linq-python 0.55.0__tar.gz → 0.56.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 (284) hide show
  1. linq_python-0.56.0/.release-please-manifest.json +3 -0
  2. {linq_python-0.55.0 → linq_python-0.56.0}/CHANGELOG.md +7 -0
  3. {linq_python-0.55.0 → linq_python-0.56.0}/PKG-INFO +1 -1
  4. {linq_python-0.55.0 → linq_python-0.56.0}/api.md +2 -0
  5. {linq_python-0.55.0 → linq_python-0.56.0}/pyproject.toml +1 -1
  6. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_version.py +1 -1
  7. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/chats/chats.py +72 -0
  8. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/chats/messages.py +72 -0
  9. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/messages/messages.py +6 -4
  10. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/__init__.py +2 -0
  11. linq_python-0.56.0/src/linq/types/inline_sticker_param.py +40 -0
  12. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/schemas_text_part_response.py +10 -0
  13. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared/__init__.py +1 -0
  14. linq_python-0.56.0/src/linq/types/shared/inline_sticker_response.py +37 -0
  15. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared/text_part_response.py +10 -0
  16. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/text_part_param.py +28 -0
  17. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/chats/test_messages.py +24 -0
  18. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_chats.py +24 -0
  19. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_messages.py +24 -0
  20. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_webhooks.py +2 -2
  21. {linq_python-0.55.0 → linq_python-0.56.0}/uv.lock +1 -1
  22. linq_python-0.55.0/.release-please-manifest.json +0 -3
  23. {linq_python-0.55.0 → linq_python-0.56.0}/.gitignore +0 -0
  24. {linq_python-0.55.0 → linq_python-0.56.0}/CONTRIBUTING.md +0 -0
  25. {linq_python-0.55.0 → linq_python-0.56.0}/LICENSE +0 -0
  26. {linq_python-0.55.0 → linq_python-0.56.0}/README.md +0 -0
  27. {linq_python-0.55.0 → linq_python-0.56.0}/SECURITY.md +0 -0
  28. {linq_python-0.55.0 → linq_python-0.56.0}/bin/check-release-environment +0 -0
  29. {linq_python-0.55.0 → linq_python-0.56.0}/bin/publish-pypi +0 -0
  30. {linq_python-0.55.0 → linq_python-0.56.0}/examples/.keep +0 -0
  31. {linq_python-0.55.0 → linq_python-0.56.0}/release-please-config.json +0 -0
  32. {linq_python-0.55.0 → linq_python-0.56.0}/requirements-dev.lock +0 -0
  33. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/__init__.py +0 -0
  34. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_base_client.py +0 -0
  35. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_client.py +0 -0
  36. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_compat.py +0 -0
  37. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_constants.py +0 -0
  38. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_exceptions.py +0 -0
  39. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_files.py +0 -0
  40. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_models.py +0 -0
  41. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_qs.py +0 -0
  42. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_resource.py +0 -0
  43. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_response.py +0 -0
  44. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_streaming.py +0 -0
  45. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_types.py +0 -0
  46. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/__init__.py +0 -0
  47. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_compat.py +0 -0
  48. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_datetime_parse.py +0 -0
  49. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_json.py +0 -0
  50. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_logs.py +0 -0
  51. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_path.py +0 -0
  52. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_proxy.py +0 -0
  53. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_reflection.py +0 -0
  54. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_resources_proxy.py +0 -0
  55. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_streams.py +0 -0
  56. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_sync.py +0 -0
  57. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_transform.py +0 -0
  58. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_typing.py +0 -0
  59. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/_utils/_utils.py +0 -0
  60. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/lib/.keep +0 -0
  61. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/pagination.py +0 -0
  62. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/py.typed +0 -0
  63. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/__init__.py +0 -0
  64. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/attachments.py +0 -0
  65. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/available_number.py +0 -0
  66. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/blocked_handles.py +0 -0
  67. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/capability.py +0 -0
  68. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/chats/__init__.py +0 -0
  69. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/chats/background.py +0 -0
  70. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/chats/location.py +0 -0
  71. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/chats/participants.py +0 -0
  72. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/chats/polls.py +0 -0
  73. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/chats/typing.py +0 -0
  74. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/contact_card.py +0 -0
  75. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/experiences.py +0 -0
  76. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/messages/__init__.py +0 -0
  77. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/messages/poll.py +0 -0
  78. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/payment_handles.py +0 -0
  79. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/payment_providers.py +0 -0
  80. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/payment_requests.py +0 -0
  81. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/payments.py +0 -0
  82. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/phone_numbers.py +0 -0
  83. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/phonenumbers.py +0 -0
  84. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/webhook_events.py +0 -0
  85. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/webhook_subscriptions.py +0 -0
  86. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/resources/webhooks.py +0 -0
  87. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/attachment_create_params.py +0 -0
  88. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/attachment_create_response.py +0 -0
  89. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/attachment_retrieve_response.py +0 -0
  90. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/available_number_retrieve_params.py +0 -0
  91. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/available_number_retrieve_response.py +0 -0
  92. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/blocked_handle_block_params.py +0 -0
  93. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/blocked_handle_block_response.py +0 -0
  94. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/blocked_handle_entry.py +0 -0
  95. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/blocked_handle_list_response.py +0 -0
  96. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/blocked_handle_unblock_params.py +0 -0
  97. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/capability_check_RCS_params.py +0 -0
  98. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/capability_check_i_message_params.py +0 -0
  99. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat.py +0 -0
  100. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_background_update_failed_webhook_event.py +0 -0
  101. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_background_updated_webhook_event.py +0 -0
  102. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_create_params.py +0 -0
  103. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_create_response.py +0 -0
  104. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_created_webhook_event.py +0 -0
  105. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_group_icon_update_failed_webhook_event.py +0 -0
  106. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_group_icon_updated_webhook_event.py +0 -0
  107. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_group_name_update_failed_webhook_event.py +0 -0
  108. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_group_name_updated_webhook_event.py +0 -0
  109. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_leave_chat_response.py +0 -0
  110. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_list_chats_params.py +0 -0
  111. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_send_voicememo_params.py +0 -0
  112. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_send_voicememo_response.py +0 -0
  113. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_typing_indicator_started_webhook_event.py +0 -0
  114. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_typing_indicator_stopped_webhook_event.py +0 -0
  115. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_update_params.py +0 -0
  116. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chat_update_response.py +0 -0
  117. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/__init__.py +0 -0
  118. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/background_set_params.py +0 -0
  119. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/get_chat_location_response.py +0 -0
  120. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/location_request_response.py +0 -0
  121. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/location_stop_params.py +0 -0
  122. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/message_list_params.py +0 -0
  123. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/message_send_params.py +0 -0
  124. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/message_send_response.py +0 -0
  125. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/participant_add_params.py +0 -0
  126. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/participant_add_response.py +0 -0
  127. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/participant_remove_params.py +0 -0
  128. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/participant_remove_response.py +0 -0
  129. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/poll.py +0 -0
  130. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/poll_create_params.py +0 -0
  131. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/poll_envelope.py +0 -0
  132. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/sent_message.py +0 -0
  133. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/chats/stop_chat_location_sharing_response.py +0 -0
  134. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/connection_created_webhook_event.py +0 -0
  135. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/connection_revoked_webhook_event.py +0 -0
  136. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/contact_card_create_params.py +0 -0
  137. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/contact_card_received_webhook_event.py +0 -0
  138. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/contact_card_retrieve_params.py +0 -0
  139. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/contact_card_retrieve_response.py +0 -0
  140. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/contact_card_update_params.py +0 -0
  141. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/experience_list_response.py +0 -0
  142. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/experience_retrieve_response.py +0 -0
  143. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/handle_check_response.py +0 -0
  144. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/link_part_param.py +0 -0
  145. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/location_sharing_started_webhook_event.py +0 -0
  146. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/location_sharing_stopped_webhook_event.py +0 -0
  147. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/media_part_param.py +0 -0
  148. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message.py +0 -0
  149. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_add_reaction_params.py +0 -0
  150. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_add_reaction_response.py +0 -0
  151. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_content_param.py +0 -0
  152. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_create_params.py +0 -0
  153. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_create_response.py +0 -0
  154. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_delivered_webhook_event.py +0 -0
  155. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_edited_webhook_event.py +0 -0
  156. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_effect.py +0 -0
  157. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_effect_param.py +0 -0
  158. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_event_v2.py +0 -0
  159. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_failed_webhook_event.py +0 -0
  160. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_list_messages_thread_params.py +0 -0
  161. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_read_webhook_event.py +0 -0
  162. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_received_webhook_event.py +0 -0
  163. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_sent_webhook_event.py +0 -0
  164. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_update_app_card_params.py +0 -0
  165. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_update_app_card_response.py +0 -0
  166. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_update_params.py +0 -0
  167. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_update_sticker_placement_params.py +0 -0
  168. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/message_update_sticker_placement_response.py +0 -0
  169. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/messages/__init__.py +0 -0
  170. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/messages/poll_add_options_params.py +0 -0
  171. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/messages/poll_vote_params.py +0 -0
  172. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/participant_added_webhook_event.py +0 -0
  173. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/participant_removed_webhook_event.py +0 -0
  174. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment.py +0 -0
  175. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_authorized_webhook_event.py +0 -0
  176. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_canceled_webhook_event.py +0 -0
  177. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_create_params.py +0 -0
  178. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_credentials_response.py +0 -0
  179. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_declined_webhook_event.py +0 -0
  180. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_expired_webhook_event.py +0 -0
  181. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_handle_connection.py +0 -0
  182. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_handle_verify_params.py +0 -0
  183. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_provider.py +0 -0
  184. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_provider_connect_params.py +0 -0
  185. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_provider_connect_response.py +0 -0
  186. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_request.py +0 -0
  187. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_request_create_params.py +0 -0
  188. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_request_list_params.py +0 -0
  189. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_request_list_response.py +0 -0
  190. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/payment_succeeded_webhook_event.py +0 -0
  191. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/phone_number_assigned_webhook_event.py +0 -0
  192. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/phone_number_list_response.py +0 -0
  193. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/phone_number_released_webhook_event.py +0 -0
  194. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/phone_number_status_updated_webhook_event.py +0 -0
  195. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/phone_number_update_params.py +0 -0
  196. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/phone_number_update_response.py +0 -0
  197. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/phonenumber_list_response.py +0 -0
  198. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/poll_delivered_webhook_event.py +0 -0
  199. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/poll_failed_webhook_event.py +0 -0
  200. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/poll_reaction_added_webhook_event.py +0 -0
  201. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/poll_read_webhook_event.py +0 -0
  202. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/poll_received_webhook_event.py +0 -0
  203. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/poll_sent_webhook_event.py +0 -0
  204. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/poll_updated_webhook_event.py +0 -0
  205. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/poll_vote_added_webhook_event.py +0 -0
  206. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/poll_vote_removed_webhook_event.py +0 -0
  207. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reaction_added_webhook_event.py +0 -0
  208. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reaction_event_base.py +0 -0
  209. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reaction_removed_webhook_event.py +0 -0
  210. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reply_to.py +0 -0
  211. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reply_to_param.py +0 -0
  212. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reputation_action_item.py +0 -0
  213. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reputation_audit.py +0 -0
  214. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reputation_audit_started.py +0 -0
  215. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reputation_driver.py +0 -0
  216. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reputation_driver_key.py +0 -0
  217. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reputation_evidence.py +0 -0
  218. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reputation_opt_out_chat.py +0 -0
  219. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reputation_report.py +0 -0
  220. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/reputation_unhealthy_chat.py +0 -0
  221. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/schemas_media_part_response.py +0 -0
  222. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/schemas_message_effect.py +0 -0
  223. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/set_contact_card.py +0 -0
  224. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared/chat_handle.py +0 -0
  225. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared/link_part_response.py +0 -0
  226. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared/media_part_response.py +0 -0
  227. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared/reaction.py +0 -0
  228. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared/reaction_type.py +0 -0
  229. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared/service_type.py +0 -0
  230. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared/text_decoration.py +0 -0
  231. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared_params/__init__.py +0 -0
  232. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared_params/reaction_type.py +0 -0
  233. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared_params/service_type.py +0 -0
  234. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/shared_params/text_decoration.py +0 -0
  235. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/supported_content_type.py +0 -0
  236. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/unwrap_webhook_event.py +0 -0
  237. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/webhook_event_list_response.py +0 -0
  238. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/webhook_event_type.py +0 -0
  239. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/webhook_subscription.py +0 -0
  240. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/webhook_subscription_create_params.py +0 -0
  241. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/webhook_subscription_create_response.py +0 -0
  242. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/webhook_subscription_list_response.py +0 -0
  243. {linq_python-0.55.0 → linq_python-0.56.0}/src/linq/types/webhook_subscription_update_params.py +0 -0
  244. {linq_python-0.55.0 → linq_python-0.56.0}/tests/__init__.py +0 -0
  245. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/__init__.py +0 -0
  246. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/chats/__init__.py +0 -0
  247. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/chats/test_background.py +0 -0
  248. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/chats/test_location.py +0 -0
  249. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/chats/test_participants.py +0 -0
  250. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/chats/test_polls.py +0 -0
  251. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/chats/test_typing.py +0 -0
  252. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/messages/__init__.py +0 -0
  253. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/messages/test_poll.py +0 -0
  254. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_attachments.py +0 -0
  255. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_available_number.py +0 -0
  256. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_blocked_handles.py +0 -0
  257. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_capability.py +0 -0
  258. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_contact_card.py +0 -0
  259. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_experiences.py +0 -0
  260. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_payment_handles.py +0 -0
  261. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_payment_providers.py +0 -0
  262. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_payment_requests.py +0 -0
  263. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_payments.py +0 -0
  264. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_phone_numbers.py +0 -0
  265. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_phonenumbers.py +0 -0
  266. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_webhook_events.py +0 -0
  267. {linq_python-0.55.0 → linq_python-0.56.0}/tests/api_resources/test_webhook_subscriptions.py +0 -0
  268. {linq_python-0.55.0 → linq_python-0.56.0}/tests/conftest.py +0 -0
  269. {linq_python-0.55.0 → linq_python-0.56.0}/tests/sample_file.txt +0 -0
  270. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_client.py +0 -0
  271. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_extract_files.py +0 -0
  272. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_files.py +0 -0
  273. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_models.py +0 -0
  274. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_qs.py +0 -0
  275. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_required_args.py +0 -0
  276. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_response.py +0 -0
  277. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_streaming.py +0 -0
  278. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_transform.py +0 -0
  279. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_utils/test_datetime_parse.py +0 -0
  280. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_utils/test_json.py +0 -0
  281. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_utils/test_path.py +0 -0
  282. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_utils/test_proxy.py +0 -0
  283. {linq_python-0.55.0 → linq_python-0.56.0}/tests/test_utils/test_typing.py +0 -0
  284. {linq_python-0.55.0 → linq_python-0.56.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.56.0"
3
+ }
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.56.0](https://github.com/linq-team/linq-python/compare/v0.55.0...v0.56.0) (2026-09-15)
4
+
5
+
6
+ ### Features
7
+
8
+ * add inline stickers support for imessage text messages ([abe79e1](https://github.com/linq-team/linq-python/commit/abe79e1abd474d6deec9627f3a32f13c00e19fcb))
9
+
3
10
  ## [0.55.0](https://github.com/linq-team/linq-python/compare/v0.54.0...v0.55.0) (2026-09-14)
4
11
 
5
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: linq-python
3
- Version: 0.55.0
3
+ Version: 0.56.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
@@ -3,6 +3,7 @@
3
3
  ```python
4
4
  from linq.types import (
5
5
  ChatHandle,
6
+ InlineStickerResponse,
6
7
  LinkPartResponse,
7
8
  MediaPartResponse,
8
9
  Reaction,
@@ -20,6 +21,7 @@ Types:
20
21
  ```python
21
22
  from linq.types import (
22
23
  Chat,
24
+ InlineSticker,
23
25
  LinkPart,
24
26
  MediaPart,
25
27
  MessageContent,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "linq-python"
3
- version = "0.55.0"
3
+ version = "0.56.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.55.0" # x-release-please-version
4
+ __version__ = "0.56.0" # x-release-please-version
@@ -418,6 +418,42 @@ class ChatsResource(SyncAPIResource):
418
418
  participants, iMessage recipients see the decorations and SMS/RCS recipients
419
419
  receive the same message as plain text.
420
420
 
421
+ ## Inline Stickers (iMessage only)
422
+
423
+ Use the `inline_stickers` array on a text part to place stickers inside the
424
+ text. Each sticker replaces the characters in its `range: [start, end)` and
425
+ takes its image from exactly one of `url` or `attachment_id` — an image uploaded
426
+ with `POST /v3/attachments`.
427
+
428
+ ```json
429
+ {
430
+ "type": "text",
431
+ "value": "Happy birthday 🎂! 🎉🎉",
432
+ "inline_stickers": [
433
+ {
434
+ "range": [15, 17],
435
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000"
436
+ },
437
+ {
438
+ "range": [19, 21],
439
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
440
+ },
441
+ {
442
+ "range": [21, 23],
443
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
444
+ }
445
+ ]
446
+ }
447
+ ```
448
+
449
+ **Note:** A sticker takes the place of the characters it covers, so they are
450
+ hidden on iMessage: `"Sip cup"` with a sticker on `cup` reads "Sip [sticker]".
451
+ Those characters are what SMS and RCS recipients receive (the stickers are
452
+ dropped and `value` is sent as written) and what VoiceOver reads. To keep a word
453
+ visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the range on
454
+ `🥤`. Up to 100 stickers and 10 different images per part; copies of one image
455
+ count as one.
456
+
421
457
  ## First-Message Link Restriction
422
458
 
423
459
  To protect sender deliverability, the **first outbound message** of a new chat
@@ -1189,6 +1225,42 @@ class AsyncChatsResource(AsyncAPIResource):
1189
1225
  participants, iMessage recipients see the decorations and SMS/RCS recipients
1190
1226
  receive the same message as plain text.
1191
1227
 
1228
+ ## Inline Stickers (iMessage only)
1229
+
1230
+ Use the `inline_stickers` array on a text part to place stickers inside the
1231
+ text. Each sticker replaces the characters in its `range: [start, end)` and
1232
+ takes its image from exactly one of `url` or `attachment_id` — an image uploaded
1233
+ with `POST /v3/attachments`.
1234
+
1235
+ ```json
1236
+ {
1237
+ "type": "text",
1238
+ "value": "Happy birthday 🎂! 🎉🎉",
1239
+ "inline_stickers": [
1240
+ {
1241
+ "range": [15, 17],
1242
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000"
1243
+ },
1244
+ {
1245
+ "range": [19, 21],
1246
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
1247
+ },
1248
+ {
1249
+ "range": [21, 23],
1250
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
1251
+ }
1252
+ ]
1253
+ }
1254
+ ```
1255
+
1256
+ **Note:** A sticker takes the place of the characters it covers, so they are
1257
+ hidden on iMessage: `"Sip cup"` with a sticker on `cup` reads "Sip [sticker]".
1258
+ Those characters are what SMS and RCS recipients receive (the stickers are
1259
+ dropped and `value` is sent as written) and what VoiceOver reads. To keep a word
1260
+ visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the range on
1261
+ `🥤`. Up to 100 stickers and 10 different images per part; copies of one image
1262
+ count as one.
1263
+
1192
1264
  ## First-Message Link Restriction
1193
1265
 
1194
1266
  To protect sender deliverability, the **first outbound message** of a new chat
@@ -227,6 +227,42 @@ class MessagesResource(SyncAPIResource):
227
227
  participants, iMessage recipients see the decorations and SMS/RCS recipients
228
228
  receive the same message as plain text.
229
229
 
230
+ ## Inline Stickers (iMessage only)
231
+
232
+ Use the `inline_stickers` array on a text part to place stickers inside the
233
+ text. Each sticker replaces the characters in its `range: [start, end)` and
234
+ takes its image from exactly one of `url` or `attachment_id` — an image uploaded
235
+ with `POST /v3/attachments`.
236
+
237
+ ```json
238
+ {
239
+ "type": "text",
240
+ "value": "Happy birthday 🎂! 🎉🎉",
241
+ "inline_stickers": [
242
+ {
243
+ "range": [15, 17],
244
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000"
245
+ },
246
+ {
247
+ "range": [19, 21],
248
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
249
+ },
250
+ {
251
+ "range": [21, 23],
252
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
253
+ }
254
+ ]
255
+ }
256
+ ```
257
+
258
+ **Note:** A sticker takes the place of the characters it covers, so they are
259
+ hidden on iMessage: `"Sip cup"` with a sticker on `cup` reads "Sip [sticker]".
260
+ Those characters are what SMS and RCS recipients receive (the stickers are
261
+ dropped and `value` is sent as written) and what VoiceOver reads. To keep a word
262
+ visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the range on
263
+ `🥤`. Up to 100 stickers and 10 different images per part; copies of one image
264
+ count as one.
265
+
230
266
  Args:
231
267
  message: Message content container. Groups all message-related fields together,
232
268
  separating the "what" (message content) from the "where" (routing fields like
@@ -472,6 +508,42 @@ class AsyncMessagesResource(AsyncAPIResource):
472
508
  participants, iMessage recipients see the decorations and SMS/RCS recipients
473
509
  receive the same message as plain text.
474
510
 
511
+ ## Inline Stickers (iMessage only)
512
+
513
+ Use the `inline_stickers` array on a text part to place stickers inside the
514
+ text. Each sticker replaces the characters in its `range: [start, end)` and
515
+ takes its image from exactly one of `url` or `attachment_id` — an image uploaded
516
+ with `POST /v3/attachments`.
517
+
518
+ ```json
519
+ {
520
+ "type": "text",
521
+ "value": "Happy birthday 🎂! 🎉🎉",
522
+ "inline_stickers": [
523
+ {
524
+ "range": [15, 17],
525
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000"
526
+ },
527
+ {
528
+ "range": [19, 21],
529
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
530
+ },
531
+ {
532
+ "range": [21, 23],
533
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
534
+ }
535
+ ]
536
+ }
537
+ ```
538
+
539
+ **Note:** A sticker takes the place of the characters it covers, so they are
540
+ hidden on iMessage: `"Sip cup"` with a sticker on `cup` reads "Sip [sticker]".
541
+ Those characters are what SMS and RCS recipients receive (the stickers are
542
+ dropped and `value` is sent as written) and what VoiceOver reads. To keep a word
543
+ visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the range on
544
+ `🥤`. Up to 100 stickers and 10 different images per part; copies of one image
545
+ count as one.
546
+
475
547
  Args:
476
548
  message: Message content container. Groups all message-related fields together,
477
549
  separating the "what" (message content) from the "where" (routing fields like
@@ -276,10 +276,11 @@ class MessagesResource(SyncAPIResource):
276
276
  - Voice memos are **not** supported here. To send an iMessage voice-memo bubble,
277
277
  use `POST /v3/chats/{chatId}/voicememo` with a known chat id.
278
278
 
279
- ## Service preference, effects, decorations
279
+ ## Service preference, effects, decorations, inline stickers
280
280
 
281
281
  Set `message.preferred_service` (`iMessage` | `RCS` | `SMS`), `message.effect`,
282
- and per-part `text_decorations` exactly as on the other send endpoints.
282
+ and per-part `text_decorations` and `inline_stickers` exactly as on the other
283
+ send endpoints.
283
284
 
284
285
  Always responds `202 Accepted` — chat creation is incidental to the send.
285
286
 
@@ -1063,10 +1064,11 @@ class AsyncMessagesResource(AsyncAPIResource):
1063
1064
  - Voice memos are **not** supported here. To send an iMessage voice-memo bubble,
1064
1065
  use `POST /v3/chats/{chatId}/voicememo` with a known chat id.
1065
1066
 
1066
- ## Service preference, effects, decorations
1067
+ ## Service preference, effects, decorations, inline stickers
1067
1068
 
1068
1069
  Set `message.preferred_service` (`iMessage` | `RCS` | `SMS`), `message.effect`,
1069
- and per-part `text_decorations` exactly as on the other send endpoints.
1070
+ and per-part `text_decorations` and `inline_stickers` exactly as on the other
1071
+ send endpoints.
1070
1072
 
1071
1073
  Always responds `202 Accepted` — chat creation is incidental to the send.
1072
1074
 
@@ -12,6 +12,7 @@ from .shared import (
12
12
  LinkPartResponse as LinkPartResponse,
13
13
  TextPartResponse as TextPartResponse,
14
14
  MediaPartResponse as MediaPartResponse,
15
+ InlineStickerResponse as InlineStickerResponse,
15
16
  )
16
17
  from .message import Message as Message
17
18
  from .payment import Payment as Payment
@@ -36,6 +37,7 @@ from .reputation_evidence import ReputationEvidence as ReputationEvidence
36
37
  from .blocked_handle_entry import BlockedHandleEntry as BlockedHandleEntry
37
38
  from .chat_create_response import ChatCreateResponse as ChatCreateResponse
38
39
  from .chat_update_response import ChatUpdateResponse as ChatUpdateResponse
40
+ from .inline_sticker_param import InlineStickerParam as InlineStickerParam
39
41
  from .message_effect_param import MessageEffectParam as MessageEffectParam
40
42
  from .unwrap_webhook_event import UnwrapWebhookEvent as UnwrapWebhookEvent
41
43
  from .webhook_subscription import WebhookSubscription as WebhookSubscription
@@ -0,0 +1,40 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Iterable
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["InlineStickerParam"]
9
+
10
+
11
+ class InlineStickerParam(TypedDict, total=False):
12
+ """
13
+ A sticker image placed inside the text of a part, replacing the characters in `range`.
14
+ Provide exactly one of `url` or `attachment_id`.
15
+ """
16
+
17
+ range: Required[Iterable[int]]
18
+ """
19
+ Character range `[start, end)` in the `value` string that the sticker replaces.
20
+ `start` is inclusive, `end` is exclusive. Those characters are hidden on
21
+ iMessage and sent as written on SMS and RCS. _Characters are measured as UTF-16
22
+ code units. Most characters count as 1; some emoji count as 2._
23
+ """
24
+
25
+ attachment_id: str
26
+ """Reference to a sticker image pre-uploaded via `POST /v3/attachments`.
27
+
28
+ Exactly one of `url` or `attachment_id` is required.
29
+ """
30
+
31
+ url: str
32
+ """
33
+ Linq attachment URL of the sticker image — the `download_url` returned by
34
+ `POST /v3/attachments`.
35
+
36
+ The image must already be stored with us. To use an image from elsewhere, upload
37
+ it with `POST /v3/attachments` first and pass `attachment_id`.
38
+
39
+ Exactly one of `url` or `attachment_id` is required.
40
+ """
@@ -5,6 +5,7 @@ from typing_extensions import Literal
5
5
 
6
6
  from .._models import BaseModel
7
7
  from .shared.text_decoration import TextDecoration
8
+ from .shared.inline_sticker_response import InlineStickerResponse
8
9
 
9
10
  __all__ = ["SchemasTextPartResponse", "Mention"]
10
11
 
@@ -42,6 +43,15 @@ class SchemasTextPartResponse(BaseModel):
42
43
  value: str
43
44
  """The text content"""
44
45
 
46
+ inline_stickers: Optional[List[InlineStickerResponse]] = None
47
+ """Stickers placed inside the text, in the order they appear in `value`.
48
+
49
+ `null` when the part has none.
50
+
51
+ Set on messages sent with `inline_stickers`. An inline sticker received over
52
+ iMessage currently arrives as a separate media part.
53
+ """
54
+
45
55
  mention: Optional[str] = None
46
56
  """DEPRECATED: Use `mentions` instead.
47
57
 
@@ -8,3 +8,4 @@ from .text_decoration import TextDecoration as TextDecoration
8
8
  from .link_part_response import LinkPartResponse as LinkPartResponse
9
9
  from .text_part_response import TextPartResponse as TextPartResponse
10
10
  from .media_part_response import MediaPartResponse as MediaPartResponse
11
+ from .inline_sticker_response import InlineStickerResponse as InlineStickerResponse
@@ -0,0 +1,37 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Optional
4
+
5
+ from ..._models import BaseModel
6
+
7
+ __all__ = ["InlineStickerResponse"]
8
+
9
+
10
+ class InlineStickerResponse(BaseModel):
11
+ """
12
+ One sticker image placed inside the text of a part: `id`, `url` and the image details.
13
+ """
14
+
15
+ range: List[int]
16
+ """Character range `[start, end)` in `value` that the sticker replaces.
17
+
18
+ Those characters are hidden on iMessage and sent as written on SMS and RCS.
19
+ _Characters are measured as UTF-16 code units. Most characters count as 1; some
20
+ emoji count as 2._
21
+ """
22
+
23
+ id: Optional[str] = None
24
+ """Attachment ID of the sticker image."""
25
+
26
+ file_name: Optional[str] = None
27
+ """Filename of the sticker"""
28
+
29
+ mime_type: Optional[str] = None
30
+ """MIME type of the sticker image"""
31
+
32
+ url: Optional[str] = None
33
+ """URL for downloading the sticker image.
34
+
35
+ Permanent for a normal upload; a time-limited signed URL when the image is an
36
+ ephemeral attachment.
37
+ """
@@ -6,6 +6,7 @@ from typing_extensions import Literal
6
6
  from .reaction import Reaction
7
7
  from ..._models import BaseModel
8
8
  from .text_decoration import TextDecoration
9
+ from .inline_sticker_response import InlineStickerResponse
9
10
 
10
11
  __all__ = ["TextPartResponse", "Mention"]
11
12
 
@@ -46,6 +47,15 @@ class TextPartResponse(BaseModel):
46
47
  value: str
47
48
  """The text content"""
48
49
 
50
+ inline_stickers: Optional[List[InlineStickerResponse]] = None
51
+ """Stickers placed inside the text, in the order they appear in `value`.
52
+
53
+ `null` when the part has none.
54
+
55
+ Set on messages sent with `inline_stickers`. An inline sticker received over
56
+ iMessage currently arrives as a separate media part.
57
+ """
58
+
49
59
  mention: Optional[str] = None
50
60
  """DEPRECATED: Use `mentions` instead.
51
61
 
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  from typing import Iterable
6
6
  from typing_extensions import Literal, Required, TypedDict
7
7
 
8
+ from .inline_sticker_param import InlineStickerParam
8
9
  from .shared_params.text_decoration import TextDecoration
9
10
 
10
11
  __all__ = ["TextPartParam"]
@@ -22,6 +23,33 @@ class TextPartParam(TypedDict, total=False):
22
23
  formatting and animations (iMessage only).
23
24
  """
24
25
 
26
+ inline_stickers: Iterable[InlineStickerParam]
27
+ """
28
+ Optional stickers placed inside the text, in the line with the words (iMessage
29
+ only).
30
+
31
+ Each sticker replaces the characters in its `range` `[start, end)` of `value`,
32
+ and takes its image from exactly one of `url` or `attachment_id` — an image
33
+ uploaded with `POST /v3/attachments`. The characters a sticker covers are hidden
34
+ on iMessage and are what SMS and RCS recipients receive and VoiceOver reads, so
35
+ cover something that stands in for the sticker (`"🎂"`, `"[cake]"`). To keep a
36
+ word visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the
37
+ range on `🥤`.
38
+
39
+ Up to 100 stickers and 10 different images per part. Copies of one image count
40
+ as one: twenty copies of one sticker use one of the 10. An animated image
41
+ arrives as a still.
42
+
43
+ Stickers cannot overlap each other or a `text_decorations` range, cannot split a
44
+ character, and cannot be combined with `mention`.
45
+
46
+ _Characters are measured as UTF-16 code units. Most characters count as 1; some
47
+ emoji count as 2._
48
+
49
+ **Note:** on SMS and RCS the stickers are dropped and `value` is sent as plain
50
+ text.
51
+ """
52
+
25
53
  mention: str
26
54
  """Mention a chat participant.
27
55
 
@@ -100,6 +100,18 @@ class TestMessages:
100
100
  {
101
101
  "type": "text",
102
102
  "value": "Hello, world!",
103
+ "inline_stickers": [
104
+ {
105
+ "range": [15, 17],
106
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000",
107
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
108
+ },
109
+ {
110
+ "range": [19, 21],
111
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
112
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
113
+ },
114
+ ],
103
115
  "mention": "+14155551234",
104
116
  "mention_range": [4, 9],
105
117
  "text_decorations": [
@@ -250,6 +262,18 @@ class TestAsyncMessages:
250
262
  {
251
263
  "type": "text",
252
264
  "value": "Hello, world!",
265
+ "inline_stickers": [
266
+ {
267
+ "range": [15, 17],
268
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000",
269
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
270
+ },
271
+ {
272
+ "range": [19, 21],
273
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
274
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
275
+ },
276
+ ],
253
277
  "mention": "+14155551234",
254
278
  "mention_range": [4, 9],
255
279
  "text_decorations": [
@@ -54,6 +54,18 @@ class TestChats:
54
54
  {
55
55
  "type": "text",
56
56
  "value": "Hello! How can I help you today?",
57
+ "inline_stickers": [
58
+ {
59
+ "range": [15, 17],
60
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000",
61
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
62
+ },
63
+ {
64
+ "range": [19, 21],
65
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
66
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
67
+ },
68
+ ],
57
69
  "mention": "+14155551234",
58
70
  "mention_range": [4, 9],
59
71
  "text_decorations": [
@@ -459,6 +471,18 @@ class TestAsyncChats:
459
471
  {
460
472
  "type": "text",
461
473
  "value": "Hello! How can I help you today?",
474
+ "inline_stickers": [
475
+ {
476
+ "range": [15, 17],
477
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000",
478
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
479
+ },
480
+ {
481
+ "range": [19, 21],
482
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
483
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
484
+ },
485
+ ],
462
486
  "mention": "+14155551234",
463
487
  "mention_range": [4, 9],
464
488
  "text_decorations": [
@@ -52,6 +52,18 @@ class TestMessages:
52
52
  {
53
53
  "type": "text",
54
54
  "value": "Hi! Thanks for reaching out — how can we help?",
55
+ "inline_stickers": [
56
+ {
57
+ "range": [15, 17],
58
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000",
59
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
60
+ },
61
+ {
62
+ "range": [19, 21],
63
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
64
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
65
+ },
66
+ ],
55
67
  "mention": "+14155551234",
56
68
  "mention_range": [4, 9],
57
69
  "text_decorations": [
@@ -557,6 +569,18 @@ class TestAsyncMessages:
557
569
  {
558
570
  "type": "text",
559
571
  "value": "Hi! Thanks for reaching out — how can we help?",
572
+ "inline_stickers": [
573
+ {
574
+ "range": [15, 17],
575
+ "attachment_id": "550e8400-e29b-41d4-a716-446655440000",
576
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
577
+ },
578
+ {
579
+ "range": [19, 21],
580
+ "attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
581
+ "url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
582
+ },
583
+ ],
560
584
  "mention": "+14155551234",
561
585
  "mention_range": [4, 9],
562
586
  "text_decorations": [
@@ -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/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","zero_retention":false},"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!","inline_stickers":[{"range":[15,17],"id":"550e8400-e29b-41d4-a716-446655440000","file_name":"sticker.png","mime_type":"image/png","url":"https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png"}],"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","zero_retention":false},"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/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","zero_retention":false},"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!","inline_stickers":[{"range":[15,17],"id":"550e8400-e29b-41d4-a716-446655440000","file_name":"sticker.png","mime_type":"image/png","url":"https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png"}],"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","zero_retention":false},"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.54.0"
533
+ version = "0.55.0"
534
534
  source = { editable = "." }
535
535
  dependencies = [
536
536
  { name = "anyio" },
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.55.0"
3
- }
File without changes
File without changes
File without changes
File without changes