linq-python 0.43.0__tar.gz → 0.45.0__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 (279) hide show
  1. linq_python-0.45.0/.release-please-manifest.json +3 -0
  2. {linq_python-0.43.0 → linq_python-0.45.0}/CHANGELOG.md +14 -0
  3. {linq_python-0.43.0 → linq_python-0.45.0}/PKG-INFO +1 -1
  4. {linq_python-0.43.0 → linq_python-0.45.0}/api.md +2 -0
  5. {linq_python-0.43.0 → linq_python-0.45.0}/pyproject.toml +1 -1
  6. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_version.py +1 -1
  7. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/messages/messages.py +204 -0
  8. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/__init__.py +6 -0
  9. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/media_part_param.py +19 -0
  10. linq_python-0.45.0/src/linq/types/message_add_reaction_params.py +101 -0
  11. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_event_v2.py +8 -0
  12. linq_python-0.45.0/src/linq/types/message_update_sticker_placement_params.py +60 -0
  13. linq_python-0.45.0/src/linq/types/message_update_sticker_placement_response.py +15 -0
  14. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reaction_event_base.py +8 -0
  15. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared/reaction.py +11 -0
  16. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_messages.py +161 -0
  17. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_webhooks.py +2 -2
  18. {linq_python-0.43.0 → linq_python-0.45.0}/uv.lock +1 -1
  19. linq_python-0.43.0/.release-please-manifest.json +0 -3
  20. linq_python-0.43.0/src/linq/types/message_add_reaction_params.py +0 -32
  21. {linq_python-0.43.0 → linq_python-0.45.0}/.gitignore +0 -0
  22. {linq_python-0.43.0 → linq_python-0.45.0}/CONTRIBUTING.md +0 -0
  23. {linq_python-0.43.0 → linq_python-0.45.0}/LICENSE +0 -0
  24. {linq_python-0.43.0 → linq_python-0.45.0}/README.md +0 -0
  25. {linq_python-0.43.0 → linq_python-0.45.0}/SECURITY.md +0 -0
  26. {linq_python-0.43.0 → linq_python-0.45.0}/bin/check-release-environment +0 -0
  27. {linq_python-0.43.0 → linq_python-0.45.0}/bin/publish-pypi +0 -0
  28. {linq_python-0.43.0 → linq_python-0.45.0}/examples/.keep +0 -0
  29. {linq_python-0.43.0 → linq_python-0.45.0}/release-please-config.json +0 -0
  30. {linq_python-0.43.0 → linq_python-0.45.0}/requirements-dev.lock +0 -0
  31. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/__init__.py +0 -0
  32. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_base_client.py +0 -0
  33. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_client.py +0 -0
  34. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_compat.py +0 -0
  35. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_constants.py +0 -0
  36. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_exceptions.py +0 -0
  37. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_files.py +0 -0
  38. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_models.py +0 -0
  39. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_qs.py +0 -0
  40. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_resource.py +0 -0
  41. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_response.py +0 -0
  42. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_streaming.py +0 -0
  43. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_types.py +0 -0
  44. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/__init__.py +0 -0
  45. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_compat.py +0 -0
  46. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_datetime_parse.py +0 -0
  47. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_json.py +0 -0
  48. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_logs.py +0 -0
  49. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_path.py +0 -0
  50. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_proxy.py +0 -0
  51. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_reflection.py +0 -0
  52. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_resources_proxy.py +0 -0
  53. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_streams.py +0 -0
  54. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_sync.py +0 -0
  55. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_transform.py +0 -0
  56. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_typing.py +0 -0
  57. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/_utils/_utils.py +0 -0
  58. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/lib/.keep +0 -0
  59. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/pagination.py +0 -0
  60. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/py.typed +0 -0
  61. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/__init__.py +0 -0
  62. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/attachments.py +0 -0
  63. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/available_number.py +0 -0
  64. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/blocked_handles.py +0 -0
  65. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/capability.py +0 -0
  66. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/chats/__init__.py +0 -0
  67. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/chats/background.py +0 -0
  68. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/chats/chats.py +0 -0
  69. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/chats/location.py +0 -0
  70. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/chats/messages.py +0 -0
  71. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/chats/participants.py +0 -0
  72. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/chats/polls.py +0 -0
  73. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/chats/typing.py +0 -0
  74. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/contact_card.py +0 -0
  75. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/experiences.py +0 -0
  76. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/messages/__init__.py +0 -0
  77. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/messages/poll.py +0 -0
  78. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/payment_handles.py +0 -0
  79. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/payment_providers.py +0 -0
  80. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/payment_requests.py +0 -0
  81. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/payments.py +0 -0
  82. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/phone_numbers.py +0 -0
  83. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/phonenumbers.py +0 -0
  84. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/webhook_events.py +0 -0
  85. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/webhook_subscriptions.py +0 -0
  86. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/resources/webhooks.py +0 -0
  87. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/attachment_create_params.py +0 -0
  88. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/attachment_create_response.py +0 -0
  89. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/attachment_retrieve_response.py +0 -0
  90. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/available_number_retrieve_params.py +0 -0
  91. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/available_number_retrieve_response.py +0 -0
  92. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/blocked_handle_block_params.py +0 -0
  93. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/blocked_handle_block_response.py +0 -0
  94. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/blocked_handle_entry.py +0 -0
  95. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/blocked_handle_list_response.py +0 -0
  96. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/blocked_handle_unblock_params.py +0 -0
  97. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/capability_check_RCS_params.py +0 -0
  98. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/capability_check_i_message_params.py +0 -0
  99. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat.py +0 -0
  100. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_background_update_failed_webhook_event.py +0 -0
  101. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_background_updated_webhook_event.py +0 -0
  102. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_create_params.py +0 -0
  103. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_create_response.py +0 -0
  104. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_created_webhook_event.py +0 -0
  105. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_group_icon_update_failed_webhook_event.py +0 -0
  106. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_group_icon_updated_webhook_event.py +0 -0
  107. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_group_name_update_failed_webhook_event.py +0 -0
  108. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_group_name_updated_webhook_event.py +0 -0
  109. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_leave_chat_response.py +0 -0
  110. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_list_chats_params.py +0 -0
  111. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_send_voicememo_params.py +0 -0
  112. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_send_voicememo_response.py +0 -0
  113. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_typing_indicator_started_webhook_event.py +0 -0
  114. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_typing_indicator_stopped_webhook_event.py +0 -0
  115. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_update_params.py +0 -0
  116. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chat_update_response.py +0 -0
  117. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/__init__.py +0 -0
  118. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/background_set_params.py +0 -0
  119. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/get_chat_location_response.py +0 -0
  120. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/location_request_response.py +0 -0
  121. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/message_list_params.py +0 -0
  122. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/message_send_params.py +0 -0
  123. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/message_send_response.py +0 -0
  124. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/participant_add_params.py +0 -0
  125. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/participant_add_response.py +0 -0
  126. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/participant_remove_params.py +0 -0
  127. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/participant_remove_response.py +0 -0
  128. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/poll.py +0 -0
  129. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/poll_create_params.py +0 -0
  130. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/poll_envelope.py +0 -0
  131. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/chats/sent_message.py +0 -0
  132. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/connection_created_webhook_event.py +0 -0
  133. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/connection_revoked_webhook_event.py +0 -0
  134. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/contact_card_create_params.py +0 -0
  135. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/contact_card_received_webhook_event.py +0 -0
  136. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/contact_card_retrieve_params.py +0 -0
  137. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/contact_card_retrieve_response.py +0 -0
  138. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/contact_card_update_params.py +0 -0
  139. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/experience_list_response.py +0 -0
  140. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/experience_retrieve_response.py +0 -0
  141. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/handle_check_response.py +0 -0
  142. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/link_part_param.py +0 -0
  143. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/location_sharing_started_webhook_event.py +0 -0
  144. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/location_sharing_stopped_webhook_event.py +0 -0
  145. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message.py +0 -0
  146. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_add_reaction_response.py +0 -0
  147. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_content_param.py +0 -0
  148. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_create_params.py +0 -0
  149. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_create_response.py +0 -0
  150. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_delivered_webhook_event.py +0 -0
  151. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_edited_webhook_event.py +0 -0
  152. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_effect.py +0 -0
  153. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_effect_param.py +0 -0
  154. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_failed_webhook_event.py +0 -0
  155. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_list_messages_thread_params.py +0 -0
  156. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_read_webhook_event.py +0 -0
  157. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_received_webhook_event.py +0 -0
  158. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_sent_webhook_event.py +0 -0
  159. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_update_app_card_params.py +0 -0
  160. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_update_app_card_response.py +0 -0
  161. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/message_update_params.py +0 -0
  162. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/messages/__init__.py +0 -0
  163. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/messages/poll_add_options_params.py +0 -0
  164. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/messages/poll_vote_params.py +0 -0
  165. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/participant_added_webhook_event.py +0 -0
  166. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/participant_removed_webhook_event.py +0 -0
  167. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment.py +0 -0
  168. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_authorized_webhook_event.py +0 -0
  169. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_canceled_webhook_event.py +0 -0
  170. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_create_params.py +0 -0
  171. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_credentials_response.py +0 -0
  172. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_declined_webhook_event.py +0 -0
  173. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_expired_webhook_event.py +0 -0
  174. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_handle_connection.py +0 -0
  175. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_handle_verify_params.py +0 -0
  176. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_provider.py +0 -0
  177. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_provider_connect_params.py +0 -0
  178. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_provider_connect_response.py +0 -0
  179. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_request.py +0 -0
  180. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_request_create_params.py +0 -0
  181. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_request_list_params.py +0 -0
  182. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_request_list_response.py +0 -0
  183. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/payment_succeeded_webhook_event.py +0 -0
  184. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/phone_number_list_response.py +0 -0
  185. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/phone_number_status_updated_webhook_event.py +0 -0
  186. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/phone_number_update_params.py +0 -0
  187. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/phone_number_update_response.py +0 -0
  188. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/phonenumber_list_response.py +0 -0
  189. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/poll_delivered_webhook_event.py +0 -0
  190. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/poll_failed_webhook_event.py +0 -0
  191. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/poll_reaction_added_webhook_event.py +0 -0
  192. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/poll_read_webhook_event.py +0 -0
  193. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/poll_received_webhook_event.py +0 -0
  194. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/poll_sent_webhook_event.py +0 -0
  195. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/poll_updated_webhook_event.py +0 -0
  196. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/poll_vote_added_webhook_event.py +0 -0
  197. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/poll_vote_removed_webhook_event.py +0 -0
  198. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reaction_added_webhook_event.py +0 -0
  199. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reaction_removed_webhook_event.py +0 -0
  200. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reply_to.py +0 -0
  201. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reply_to_param.py +0 -0
  202. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reputation_action_item.py +0 -0
  203. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reputation_audit.py +0 -0
  204. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reputation_audit_started.py +0 -0
  205. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reputation_driver.py +0 -0
  206. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reputation_driver_key.py +0 -0
  207. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reputation_evidence.py +0 -0
  208. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reputation_opt_out_chat.py +0 -0
  209. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reputation_report.py +0 -0
  210. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/reputation_unhealthy_chat.py +0 -0
  211. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/schemas_media_part_response.py +0 -0
  212. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/schemas_message_effect.py +0 -0
  213. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/schemas_text_part_response.py +0 -0
  214. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/set_contact_card.py +0 -0
  215. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared/__init__.py +0 -0
  216. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared/chat_handle.py +0 -0
  217. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared/link_part_response.py +0 -0
  218. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared/media_part_response.py +0 -0
  219. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared/reaction_type.py +0 -0
  220. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared/service_type.py +0 -0
  221. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared/text_decoration.py +0 -0
  222. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared/text_part_response.py +0 -0
  223. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared_params/__init__.py +0 -0
  224. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared_params/reaction_type.py +0 -0
  225. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared_params/service_type.py +0 -0
  226. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/shared_params/text_decoration.py +0 -0
  227. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/supported_content_type.py +0 -0
  228. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/text_part_param.py +0 -0
  229. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/unwrap_webhook_event.py +0 -0
  230. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/webhook_event_list_response.py +0 -0
  231. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/webhook_event_type.py +0 -0
  232. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/webhook_subscription.py +0 -0
  233. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/webhook_subscription_create_params.py +0 -0
  234. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/webhook_subscription_create_response.py +0 -0
  235. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/webhook_subscription_list_response.py +0 -0
  236. {linq_python-0.43.0 → linq_python-0.45.0}/src/linq/types/webhook_subscription_update_params.py +0 -0
  237. {linq_python-0.43.0 → linq_python-0.45.0}/tests/__init__.py +0 -0
  238. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/__init__.py +0 -0
  239. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/chats/__init__.py +0 -0
  240. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/chats/test_background.py +0 -0
  241. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/chats/test_location.py +0 -0
  242. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/chats/test_messages.py +0 -0
  243. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/chats/test_participants.py +0 -0
  244. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/chats/test_polls.py +0 -0
  245. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/chats/test_typing.py +0 -0
  246. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/messages/__init__.py +0 -0
  247. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/messages/test_poll.py +0 -0
  248. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_attachments.py +0 -0
  249. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_available_number.py +0 -0
  250. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_blocked_handles.py +0 -0
  251. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_capability.py +0 -0
  252. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_chats.py +0 -0
  253. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_contact_card.py +0 -0
  254. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_experiences.py +0 -0
  255. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_payment_handles.py +0 -0
  256. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_payment_providers.py +0 -0
  257. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_payment_requests.py +0 -0
  258. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_payments.py +0 -0
  259. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_phone_numbers.py +0 -0
  260. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_phonenumbers.py +0 -0
  261. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_webhook_events.py +0 -0
  262. {linq_python-0.43.0 → linq_python-0.45.0}/tests/api_resources/test_webhook_subscriptions.py +0 -0
  263. {linq_python-0.43.0 → linq_python-0.45.0}/tests/conftest.py +0 -0
  264. {linq_python-0.43.0 → linq_python-0.45.0}/tests/sample_file.txt +0 -0
  265. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_client.py +0 -0
  266. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_extract_files.py +0 -0
  267. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_files.py +0 -0
  268. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_models.py +0 -0
  269. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_qs.py +0 -0
  270. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_required_args.py +0 -0
  271. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_response.py +0 -0
  272. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_streaming.py +0 -0
  273. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_transform.py +0 -0
  274. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_utils/test_datetime_parse.py +0 -0
  275. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_utils/test_json.py +0 -0
  276. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_utils/test_path.py +0 -0
  277. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_utils/test_proxy.py +0 -0
  278. {linq_python-0.43.0 → linq_python-0.45.0}/tests/test_utils/test_typing.py +0 -0
  279. {linq_python-0.43.0 → linq_python-0.45.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.45.0"
3
+ }
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.45.0](https://github.com/linq-team/linq-python/compare/v0.44.0...v0.45.0) (2026-09-05)
4
+
5
+
6
+ ### Features
7
+
8
+ * add zero_retention field to message responses ([1c47484](https://github.com/linq-team/linq-python/commit/1c474846e44ec3c830bac2acfe97ba8b0fec5650))
9
+
10
+ ## [0.44.0](https://github.com/linq-team/linq-python/compare/v0.43.0...v0.44.0) (2026-09-05)
11
+
12
+
13
+ ### Features
14
+
15
+ * add sticker reactions and placement adjustment ([de31a11](https://github.com/linq-team/linq-python/commit/de31a112a43dd89c42116fef0bd01cf8a3811976))
16
+
3
17
  ## [0.43.0](https://github.com/linq-team/linq-python/compare/v0.42.0...v0.43.0) (2026-09-04)
4
18
 
5
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: linq-python
3
- Version: 0.43.0
3
+ Version: 0.45.0
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
@@ -119,6 +119,7 @@ from linq.types import (
119
119
  MessageCreateResponse,
120
120
  MessageAddReactionResponse,
121
121
  MessageUpdateAppCardResponse,
122
+ MessageUpdateStickerPlacementResponse,
122
123
  )
123
124
  ```
124
125
 
@@ -131,6 +132,7 @@ Methods:
131
132
  - <code title="post /v3/messages/{messageId}/reactions">client.messages.<a href="./src/linq/resources/messages/messages.py">add_reaction</a>(message_id, \*\*<a href="src/linq/types/message_add_reaction_params.py">params</a>) -> <a href="./src/linq/types/message_add_reaction_response.py">MessageAddReactionResponse</a></code>
132
133
  - <code title="get /v3/messages/{messageId}/thread">client.messages.<a href="./src/linq/resources/messages/messages.py">list_messages_thread</a>(message_id, \*\*<a href="src/linq/types/message_list_messages_thread_params.py">params</a>) -> <a href="./src/linq/types/message.py">SyncListMessagesPagination[Message]</a></code>
133
134
  - <code title="post /v3/messages/{messageId}/update">client.messages.<a href="./src/linq/resources/messages/messages.py">update_app_card</a>(message_id, \*\*<a href="src/linq/types/message_update_app_card_params.py">params</a>) -> <a href="./src/linq/types/message_update_app_card_response.py">MessageUpdateAppCardResponse</a></code>
135
+ - <code title="patch /v3/messages/{messageId}/reactions/{reactionId}">client.messages.<a href="./src/linq/resources/messages/messages.py">update_sticker_placement</a>(reaction_id, \*, message_id, \*\*<a href="src/linq/types/message_update_sticker_placement_params.py">params</a>) -> <a href="./src/linq/types/message_update_sticker_placement_response.py">MessageUpdateStickerPlacementResponse</a></code>
134
136
 
135
137
  ## Poll
136
138
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "linq-python"
3
- version = "0.43.0"
3
+ version = "0.45.0"
4
4
  description = "The official Python library for the linq-api-v3 API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -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.43.0" # x-release-please-version
4
+ __version__ = "0.45.0" # x-release-please-version
@@ -20,6 +20,7 @@ from ...types import (
20
20
  message_add_reaction_params,
21
21
  message_update_app_card_params,
22
22
  message_list_messages_thread_params,
23
+ message_update_sticker_placement_params,
23
24
  )
24
25
  from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given
25
26
  from ..._utils import path_template, maybe_transform, strip_not_given, async_maybe_transform
@@ -39,6 +40,7 @@ from ...types.message_content_param import MessageContentParam
39
40
  from ...types.message_create_response import MessageCreateResponse
40
41
  from ...types.message_add_reaction_response import MessageAddReactionResponse
41
42
  from ...types.message_update_app_card_response import MessageUpdateAppCardResponse
43
+ from ...types.message_update_sticker_placement_response import MessageUpdateStickerPlacementResponse
42
44
 
43
45
  __all__ = ["MessagesResource", "AsyncMessagesResource"]
44
46
 
@@ -478,8 +480,11 @@ class MessagesResource(SyncAPIResource):
478
480
  *,
479
481
  operation: Literal["add", "remove"],
480
482
  type: ReactionType,
483
+ attachment_id: str | Omit = omit,
481
484
  custom_emoji: str | Omit = omit,
482
485
  part_index: int | Omit = omit,
486
+ placement: message_add_reaction_params.Placement | Omit = omit,
487
+ url: str | Omit = omit,
483
488
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
484
489
  # The extra values given here take precedence over values defined on the client or passed to this method.
485
490
  extra_headers: Headers | None = None,
@@ -501,6 +506,12 @@ class MessagesResource(SyncAPIResource):
501
506
  - emphasize ‼️
502
507
  - question ❓
503
508
  - custom - any emoji (use `custom_emoji` field to specify)
509
+ - sticker - an image peeled onto the message (use `url` or `attachment_id`)
510
+
511
+ **Stickers** are iMessage-only and cannot be removed — iMessage has no unpeel
512
+ operation, so `operation: "remove"` with `type: "sticker"` is rejected.
513
+ Position, size and rotation are optional via `placement`, and can be changed
514
+ afterwards with `PATCH /v3/messages/{messageId}/reactions/{reactionId}`.
504
515
 
505
516
  Args:
506
517
  operation: Whether to add or remove the reaction
@@ -510,11 +521,33 @@ class MessagesResource(SyncAPIResource):
510
521
  emoji in the custom_emoji field. Sticker reactions have type "sticker" with
511
522
  sticker attachment details in the sticker field.
512
523
 
524
+ attachment_id: Reference to a sticker image pre-uploaded via `POST /v3/attachments`. Only valid
525
+ when type is "sticker".
526
+
527
+ Either `url` or `attachment_id` must be provided when type is "sticker", but not
528
+ both.
529
+
513
530
  custom_emoji: Custom emoji string. Required when type is "custom".
514
531
 
515
532
  part_index: Optional index of the message part to react to. If not provided, reacts to the
516
533
  entire message (part 0).
517
534
 
535
+ placement: Optional position, size and rotation of a sticker on the target bubble. Only
536
+ valid when type is "sticker".
537
+
538
+ Every field is independent and optional — omit the object entirely, or any field
539
+ within it, to keep the default (centred, default size, unrotated).
540
+
541
+ url: Linq attachment URL of the sticker image — the `download_url` returned by
542
+ `POST /v3/attachments`. Only valid when type is "sticker".
543
+
544
+ Unlike a media part, this does **not** accept an arbitrary host: reactions have
545
+ no download step, so the image must already be stored. To send a sticker from
546
+ elsewhere, upload it with `POST /v3/attachments` first and pass `attachment_id`.
547
+
548
+ Either `url` or `attachment_id` must be provided when type is "sticker", but not
549
+ both.
550
+
518
551
  extra_headers: Send extra headers
519
552
 
520
553
  extra_query: Add additional query parameters to the request
@@ -531,8 +564,11 @@ class MessagesResource(SyncAPIResource):
531
564
  {
532
565
  "operation": operation,
533
566
  "type": type,
567
+ "attachment_id": attachment_id,
534
568
  "custom_emoji": custom_emoji,
535
569
  "part_index": part_index,
570
+ "placement": placement,
571
+ "url": url,
536
572
  },
537
573
  message_add_reaction_params.MessageAddReactionParams,
538
574
  ),
@@ -710,6 +746,67 @@ class MessagesResource(SyncAPIResource):
710
746
  cast_to=MessageUpdateAppCardResponse,
711
747
  )
712
748
 
749
+ def update_sticker_placement(
750
+ self,
751
+ reaction_id: str,
752
+ *,
753
+ message_id: str,
754
+ placement: message_update_sticker_placement_params.Placement,
755
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
756
+ # The extra values given here take precedence over values defined on the client or passed to this method.
757
+ extra_headers: Headers | None = None,
758
+ extra_query: Query | None = None,
759
+ extra_body: Body | None = None,
760
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
761
+ ) -> MessageUpdateStickerPlacementResponse:
762
+ """
763
+ Move, resize or rotate a sticker that has already been peeled onto a message.
764
+ The change is sent to every device in the conversation, exactly as dragging the
765
+ sticker by hand would.
766
+
767
+ Only stickers can be repositioned — a tapback has no placement, so a non-sticker
768
+ `reactionId` is rejected. Any field omitted from `placement` keeps its current
769
+ value.
770
+
771
+ `reactionId` is the `id` from the reaction on the message, or from the
772
+ `reaction.added` webhook. Stickers stack, so this id is what distinguishes one
773
+ sticker from another on the same message.
774
+
775
+ Stickers peeled before this endpoint existed cannot be moved: addressing one
776
+ requires an identifier that was not recorded at the time, and it returns 404.
777
+
778
+ Args:
779
+ placement: Optional position, size and rotation of a sticker on the target bubble. Only
780
+ valid when type is "sticker".
781
+
782
+ Every field is independent and optional — omit the object entirely, or any field
783
+ within it, to keep the default (centred, default size, unrotated).
784
+
785
+ extra_headers: Send extra headers
786
+
787
+ extra_query: Add additional query parameters to the request
788
+
789
+ extra_body: Add additional JSON properties to the request
790
+
791
+ timeout: Override the client-level default timeout for this request, in seconds
792
+ """
793
+ if not message_id:
794
+ raise ValueError(f"Expected a non-empty value for `message_id` but received {message_id!r}")
795
+ if not reaction_id:
796
+ raise ValueError(f"Expected a non-empty value for `reaction_id` but received {reaction_id!r}")
797
+ return self._patch(
798
+ path_template(
799
+ "/v3/messages/{message_id}/reactions/{reaction_id}", message_id=message_id, reaction_id=reaction_id
800
+ ),
801
+ body=maybe_transform(
802
+ {"placement": placement}, message_update_sticker_placement_params.MessageUpdateStickerPlacementParams
803
+ ),
804
+ options=make_request_options(
805
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
806
+ ),
807
+ cast_to=MessageUpdateStickerPlacementResponse,
808
+ )
809
+
713
810
 
714
811
  class AsyncMessagesResource(AsyncAPIResource):
715
812
  """Messages are individual communications within a chat thread.
@@ -1146,8 +1243,11 @@ class AsyncMessagesResource(AsyncAPIResource):
1146
1243
  *,
1147
1244
  operation: Literal["add", "remove"],
1148
1245
  type: ReactionType,
1246
+ attachment_id: str | Omit = omit,
1149
1247
  custom_emoji: str | Omit = omit,
1150
1248
  part_index: int | Omit = omit,
1249
+ placement: message_add_reaction_params.Placement | Omit = omit,
1250
+ url: str | Omit = omit,
1151
1251
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1152
1252
  # The extra values given here take precedence over values defined on the client or passed to this method.
1153
1253
  extra_headers: Headers | None = None,
@@ -1169,6 +1269,12 @@ class AsyncMessagesResource(AsyncAPIResource):
1169
1269
  - emphasize ‼️
1170
1270
  - question ❓
1171
1271
  - custom - any emoji (use `custom_emoji` field to specify)
1272
+ - sticker - an image peeled onto the message (use `url` or `attachment_id`)
1273
+
1274
+ **Stickers** are iMessage-only and cannot be removed — iMessage has no unpeel
1275
+ operation, so `operation: "remove"` with `type: "sticker"` is rejected.
1276
+ Position, size and rotation are optional via `placement`, and can be changed
1277
+ afterwards with `PATCH /v3/messages/{messageId}/reactions/{reactionId}`.
1172
1278
 
1173
1279
  Args:
1174
1280
  operation: Whether to add or remove the reaction
@@ -1178,11 +1284,33 @@ class AsyncMessagesResource(AsyncAPIResource):
1178
1284
  emoji in the custom_emoji field. Sticker reactions have type "sticker" with
1179
1285
  sticker attachment details in the sticker field.
1180
1286
 
1287
+ attachment_id: Reference to a sticker image pre-uploaded via `POST /v3/attachments`. Only valid
1288
+ when type is "sticker".
1289
+
1290
+ Either `url` or `attachment_id` must be provided when type is "sticker", but not
1291
+ both.
1292
+
1181
1293
  custom_emoji: Custom emoji string. Required when type is "custom".
1182
1294
 
1183
1295
  part_index: Optional index of the message part to react to. If not provided, reacts to the
1184
1296
  entire message (part 0).
1185
1297
 
1298
+ placement: Optional position, size and rotation of a sticker on the target bubble. Only
1299
+ valid when type is "sticker".
1300
+
1301
+ Every field is independent and optional — omit the object entirely, or any field
1302
+ within it, to keep the default (centred, default size, unrotated).
1303
+
1304
+ url: Linq attachment URL of the sticker image — the `download_url` returned by
1305
+ `POST /v3/attachments`. Only valid when type is "sticker".
1306
+
1307
+ Unlike a media part, this does **not** accept an arbitrary host: reactions have
1308
+ no download step, so the image must already be stored. To send a sticker from
1309
+ elsewhere, upload it with `POST /v3/attachments` first and pass `attachment_id`.
1310
+
1311
+ Either `url` or `attachment_id` must be provided when type is "sticker", but not
1312
+ both.
1313
+
1186
1314
  extra_headers: Send extra headers
1187
1315
 
1188
1316
  extra_query: Add additional query parameters to the request
@@ -1199,8 +1327,11 @@ class AsyncMessagesResource(AsyncAPIResource):
1199
1327
  {
1200
1328
  "operation": operation,
1201
1329
  "type": type,
1330
+ "attachment_id": attachment_id,
1202
1331
  "custom_emoji": custom_emoji,
1203
1332
  "part_index": part_index,
1333
+ "placement": placement,
1334
+ "url": url,
1204
1335
  },
1205
1336
  message_add_reaction_params.MessageAddReactionParams,
1206
1337
  ),
@@ -1378,6 +1509,67 @@ class AsyncMessagesResource(AsyncAPIResource):
1378
1509
  cast_to=MessageUpdateAppCardResponse,
1379
1510
  )
1380
1511
 
1512
+ async def update_sticker_placement(
1513
+ self,
1514
+ reaction_id: str,
1515
+ *,
1516
+ message_id: str,
1517
+ placement: message_update_sticker_placement_params.Placement,
1518
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1519
+ # The extra values given here take precedence over values defined on the client or passed to this method.
1520
+ extra_headers: Headers | None = None,
1521
+ extra_query: Query | None = None,
1522
+ extra_body: Body | None = None,
1523
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
1524
+ ) -> MessageUpdateStickerPlacementResponse:
1525
+ """
1526
+ Move, resize or rotate a sticker that has already been peeled onto a message.
1527
+ The change is sent to every device in the conversation, exactly as dragging the
1528
+ sticker by hand would.
1529
+
1530
+ Only stickers can be repositioned — a tapback has no placement, so a non-sticker
1531
+ `reactionId` is rejected. Any field omitted from `placement` keeps its current
1532
+ value.
1533
+
1534
+ `reactionId` is the `id` from the reaction on the message, or from the
1535
+ `reaction.added` webhook. Stickers stack, so this id is what distinguishes one
1536
+ sticker from another on the same message.
1537
+
1538
+ Stickers peeled before this endpoint existed cannot be moved: addressing one
1539
+ requires an identifier that was not recorded at the time, and it returns 404.
1540
+
1541
+ Args:
1542
+ placement: Optional position, size and rotation of a sticker on the target bubble. Only
1543
+ valid when type is "sticker".
1544
+
1545
+ Every field is independent and optional — omit the object entirely, or any field
1546
+ within it, to keep the default (centred, default size, unrotated).
1547
+
1548
+ extra_headers: Send extra headers
1549
+
1550
+ extra_query: Add additional query parameters to the request
1551
+
1552
+ extra_body: Add additional JSON properties to the request
1553
+
1554
+ timeout: Override the client-level default timeout for this request, in seconds
1555
+ """
1556
+ if not message_id:
1557
+ raise ValueError(f"Expected a non-empty value for `message_id` but received {message_id!r}")
1558
+ if not reaction_id:
1559
+ raise ValueError(f"Expected a non-empty value for `reaction_id` but received {reaction_id!r}")
1560
+ return await self._patch(
1561
+ path_template(
1562
+ "/v3/messages/{message_id}/reactions/{reaction_id}", message_id=message_id, reaction_id=reaction_id
1563
+ ),
1564
+ body=await async_maybe_transform(
1565
+ {"placement": placement}, message_update_sticker_placement_params.MessageUpdateStickerPlacementParams
1566
+ ),
1567
+ options=make_request_options(
1568
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1569
+ ),
1570
+ cast_to=MessageUpdateStickerPlacementResponse,
1571
+ )
1572
+
1381
1573
 
1382
1574
  class MessagesResourceWithRawResponse:
1383
1575
  def __init__(self, messages: MessagesResource) -> None:
@@ -1404,6 +1596,9 @@ class MessagesResourceWithRawResponse:
1404
1596
  self.update_app_card = to_raw_response_wrapper(
1405
1597
  messages.update_app_card,
1406
1598
  )
1599
+ self.update_sticker_placement = to_raw_response_wrapper(
1600
+ messages.update_sticker_placement,
1601
+ )
1407
1602
 
1408
1603
  @cached_property
1409
1604
  def poll(self) -> PollResourceWithRawResponse:
@@ -1507,6 +1702,9 @@ class AsyncMessagesResourceWithRawResponse:
1507
1702
  self.update_app_card = async_to_raw_response_wrapper(
1508
1703
  messages.update_app_card,
1509
1704
  )
1705
+ self.update_sticker_placement = async_to_raw_response_wrapper(
1706
+ messages.update_sticker_placement,
1707
+ )
1510
1708
 
1511
1709
  @cached_property
1512
1710
  def poll(self) -> AsyncPollResourceWithRawResponse:
@@ -1610,6 +1808,9 @@ class MessagesResourceWithStreamingResponse:
1610
1808
  self.update_app_card = to_streamed_response_wrapper(
1611
1809
  messages.update_app_card,
1612
1810
  )
1811
+ self.update_sticker_placement = to_streamed_response_wrapper(
1812
+ messages.update_sticker_placement,
1813
+ )
1613
1814
 
1614
1815
  @cached_property
1615
1816
  def poll(self) -> PollResourceWithStreamingResponse:
@@ -1713,6 +1914,9 @@ class AsyncMessagesResourceWithStreamingResponse:
1713
1914
  self.update_app_card = async_to_streamed_response_wrapper(
1714
1915
  messages.update_app_card,
1715
1916
  )
1917
+ self.update_sticker_placement = async_to_streamed_response_wrapper(
1918
+ messages.update_sticker_placement,
1919
+ )
1716
1920
 
1717
1921
  @cached_property
1718
1922
  def poll(self) -> AsyncPollResourceWithStreamingResponse:
@@ -136,6 +136,12 @@ from .location_sharing_started_webhook_event import (
136
136
  from .location_sharing_stopped_webhook_event import (
137
137
  LocationSharingStoppedWebhookEvent as LocationSharingStoppedWebhookEvent,
138
138
  )
139
+ from .message_update_sticker_placement_params import (
140
+ MessageUpdateStickerPlacementParams as MessageUpdateStickerPlacementParams,
141
+ )
142
+ from .message_update_sticker_placement_response import (
143
+ MessageUpdateStickerPlacementResponse as MessageUpdateStickerPlacementResponse,
144
+ )
139
145
  from .phone_number_status_updated_webhook_event import (
140
146
  PhoneNumberStatusUpdatedWebhookEvent as PhoneNumberStatusUpdatedWebhookEvent,
141
147
  )
@@ -20,6 +20,25 @@ class MediaPartParam(TypedDict, total=False):
20
20
  Either `url` or `attachment_id` must be provided, but not both.
21
21
  """
22
22
 
23
+ sticker: bool
24
+ """Send this image as a **sticker** rather than a photo.
25
+
26
+ The recipient can peel it off and place it on any message in the conversation,
27
+ and it renders without a bubble.
28
+
29
+ An opaque photo is cut out automatically — the subject is lifted from its
30
+ background, the same way "Add Sticker" does on iOS. An image that already has
31
+ transparency is sent as-is. If no subject can be found, the image sends as an
32
+ ordinary photo.
33
+
34
+ **iMessage only.** On SMS/RCS the flag is ignored and the image sends as a
35
+ photo.
36
+
37
+ Stickers can be combined with a `text` part in the same message; the text
38
+ arrives as its own bubble. To place a sticker _onto_ an existing message
39
+ instead, use `POST /v3/messages/{messageId}/reactions` with `type: "sticker"`.
40
+ """
41
+
23
42
  url: str
24
43
  """Any publicly accessible HTTPS URL to the media file.
25
44
 
@@ -0,0 +1,101 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Literal, Required, TypedDict
6
+
7
+ from .shared.reaction_type import ReactionType
8
+
9
+ __all__ = ["MessageAddReactionParams", "Placement"]
10
+
11
+
12
+ class MessageAddReactionParams(TypedDict, total=False):
13
+ operation: Required[Literal["add", "remove"]]
14
+ """Whether to add or remove the reaction"""
15
+
16
+ type: Required[ReactionType]
17
+ """Type of reaction.
18
+
19
+ Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
20
+ Custom emoji reactions have type "custom" with the actual emoji in the
21
+ custom_emoji field. Sticker reactions have type "sticker" with sticker
22
+ attachment details in the sticker field.
23
+ """
24
+
25
+ attachment_id: str
26
+ """
27
+ Reference to a sticker image pre-uploaded via `POST /v3/attachments`. Only valid
28
+ when type is "sticker".
29
+
30
+ Either `url` or `attachment_id` must be provided when type is "sticker", but not
31
+ both.
32
+ """
33
+
34
+ custom_emoji: str
35
+ """Custom emoji string. Required when type is "custom"."""
36
+
37
+ part_index: int
38
+ """
39
+ Optional index of the message part to react to. If not provided, reacts to the
40
+ entire message (part 0).
41
+ """
42
+
43
+ placement: Placement
44
+ """Optional position, size and rotation of a sticker on the target bubble.
45
+
46
+ Only valid when type is "sticker".
47
+
48
+ Every field is independent and optional — omit the object entirely, or any field
49
+ within it, to keep the default (centred, default size, unrotated).
50
+ """
51
+
52
+ url: str
53
+ """
54
+ Linq attachment URL of the sticker image — the `download_url` returned by
55
+ `POST /v3/attachments`. Only valid when type is "sticker".
56
+
57
+ Unlike a media part, this does **not** accept an arbitrary host: reactions have
58
+ no download step, so the image must already be stored. To send a sticker from
59
+ elsewhere, upload it with `POST /v3/attachments` first and pass `attachment_id`.
60
+
61
+ Either `url` or `attachment_id` must be provided when type is "sticker", but not
62
+ both.
63
+ """
64
+
65
+
66
+ class Placement(TypedDict, total=False):
67
+ """Optional position, size and rotation of a sticker on the target
68
+ bubble.
69
+
70
+ Only valid when type is "sticker".
71
+
72
+ Every field is independent and optional — omit the object entirely,
73
+ or any field within it, to keep the default (centred, default size,
74
+ unrotated).
75
+ """
76
+
77
+ rotation: float
78
+ """Clockwise rotation in degrees."""
79
+
80
+ scale: float
81
+ """Size relative to the default, where 1 matches the size a sticker gets natively.
82
+
83
+ Values outside 0.5–1.5 are clamped rather than rejected. The upper bound keeps a
84
+ sticker within the size range iMessage itself displays: its own limit is larger,
85
+ but that allowance assumes the transparent padding Apple's stickers carry, which
86
+ a full-bleed image does not have.
87
+
88
+ Scale is linear, so 1.5 is a little over twice the area.
89
+ """
90
+
91
+ x: float
92
+ """Horizontal position on the target bubble, from -1 (far left) to 1 (far right).
93
+
94
+ 0 is centred.
95
+ """
96
+
97
+ y: float
98
+ """Vertical position on the target bubble, from -1 (top) to 1 (bottom).
99
+
100
+ 0 is centred.
101
+ """
@@ -272,3 +272,11 @@ class MessageEventV2(BaseModel):
272
272
 
273
273
  sent_at: Optional[datetime] = None
274
274
  """When the message was sent. Null if not yet sent."""
275
+
276
+ zero_retention: Optional[bool] = None
277
+ """True when this message was sent on a zero-day-retention line.
278
+
279
+ `parts` is always empty in that case — Linq never persists this message's
280
+ content, so there is nothing to include here, not even a count or type of what
281
+ was sent.
282
+ """
@@ -0,0 +1,60 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, Annotated, TypedDict
6
+
7
+ from .._utils import PropertyInfo
8
+
9
+ __all__ = ["MessageUpdateStickerPlacementParams", "Placement"]
10
+
11
+
12
+ class MessageUpdateStickerPlacementParams(TypedDict, total=False):
13
+ message_id: Required[Annotated[str, PropertyInfo(alias="messageId")]]
14
+
15
+ placement: Required[Placement]
16
+ """Optional position, size and rotation of a sticker on the target bubble.
17
+
18
+ Only valid when type is "sticker".
19
+
20
+ Every field is independent and optional — omit the object entirely, or any field
21
+ within it, to keep the default (centred, default size, unrotated).
22
+ """
23
+
24
+
25
+ class Placement(TypedDict, total=False):
26
+ """Optional position, size and rotation of a sticker on the target
27
+ bubble.
28
+
29
+ Only valid when type is "sticker".
30
+
31
+ Every field is independent and optional — omit the object entirely,
32
+ or any field within it, to keep the default (centred, default size,
33
+ unrotated).
34
+ """
35
+
36
+ rotation: float
37
+ """Clockwise rotation in degrees."""
38
+
39
+ scale: float
40
+ """Size relative to the default, where 1 matches the size a sticker gets natively.
41
+
42
+ Values outside 0.5–1.5 are clamped rather than rejected. The upper bound keeps a
43
+ sticker within the size range iMessage itself displays: its own limit is larger,
44
+ but that allowance assumes the transparent padding Apple's stickers carry, which
45
+ a full-bleed image does not have.
46
+
47
+ Scale is linear, so 1.5 is a little over twice the area.
48
+ """
49
+
50
+ x: float
51
+ """Horizontal position on the target bubble, from -1 (far left) to 1 (far right).
52
+
53
+ 0 is centred.
54
+ """
55
+
56
+ y: float
57
+ """Vertical position on the target bubble, from -1 (top) to 1 (bottom).
58
+
59
+ 0 is centred.
60
+ """
@@ -0,0 +1,15 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+
5
+ from .._models import BaseModel
6
+
7
+ __all__ = ["MessageUpdateStickerPlacementResponse"]
8
+
9
+
10
+ class MessageUpdateStickerPlacementResponse(BaseModel):
11
+ status: Optional[str] = None
12
+
13
+ success: Optional[bool] = None
14
+
15
+ trace_id: Optional[str] = None
@@ -75,6 +75,14 @@ class ReactionEventBase(BaseModel):
75
75
  reacted_at: Optional[datetime] = None
76
76
  """When the reaction was added or removed"""
77
77
 
78
+ reaction_id: Optional[str] = None
79
+ """Identifier for this reaction.
80
+
81
+ Pass it to `PATCH /v3/messages/{messageId}/reactions/{reactionId}` to move a
82
+ sticker. Stickers stack, so this is what distinguishes one sticker from another
83
+ on the same message.
84
+ """
85
+
78
86
  service: Optional[ServiceType] = None
79
87
  """Messaging service type"""
80
88
 
@@ -46,6 +46,17 @@ class Reaction(BaseModel):
46
46
  attachment details in the sticker field.
47
47
  """
48
48
 
49
+ id: Optional[str] = None
50
+ """Identifier for this reaction.
51
+
52
+ Pass it to `PATCH /v3/messages/{messageId}/reactions/{reactionId}` to move a
53
+ sticker.
54
+
55
+ Stickers placed before this API shipped can be read but not moved: the
56
+ device-side reference needed to reposition them was never recorded, so `PATCH`
57
+ returns 404 for those.
58
+ """
59
+
49
60
  custom_emoji: Optional[str] = None
50
61
  """Custom emoji if type is "custom", null otherwise"""
51
62