linq-python 0.14.0__tar.gz → 0.15.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. linq_python-0.15.1/.release-please-manifest.json +3 -0
  2. linq_python-0.15.1/CHANGELOG.md +27 -0
  3. {linq_python-0.14.0 → linq_python-0.15.1}/PKG-INFO +1 -1
  4. {linq_python-0.14.0 → linq_python-0.15.1}/api.md +24 -2
  5. {linq_python-0.14.0 → linq_python-0.15.1}/pyproject.toml +1 -1
  6. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_client.py +342 -12
  7. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_version.py +1 -1
  8. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/__init__.py +14 -0
  9. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/attachments.py +2 -2
  10. linq_python-0.15.1/src/linq/resources/available_number.py +221 -0
  11. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/chats/chats.py +240 -0
  12. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/chats/location.py +18 -16
  13. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/chats/messages.py +80 -0
  14. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/contact_card.py +2 -4
  15. linq_python-0.15.1/src/linq/resources/messages.py +1195 -0
  16. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/phone_numbers.py +103 -0
  17. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/__init__.py +8 -0
  18. linq_python-0.15.1/src/linq/types/available_number_retrieve_params.py +18 -0
  19. linq_python-0.15.1/src/linq/types/available_number_retrieve_response.py +20 -0
  20. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat.py +6 -0
  21. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/sent_message.py +35 -9
  22. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/contact_card_create_params.py +1 -4
  23. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message.py +35 -9
  24. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_content_param.py +50 -15
  25. linq_python-0.15.1/src/linq/types/message_create_params.py +55 -0
  26. linq_python-0.15.1/src/linq/types/message_create_response.py +67 -0
  27. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_event_v2.py +1 -13
  28. linq_python-0.15.1/src/linq/types/message_update_app_card_params.py +102 -0
  29. linq_python-0.15.1/src/linq/types/message_update_app_card_response.py +16 -0
  30. linq_python-0.15.1/src/linq/types/phone_number_list_response.py +109 -0
  31. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/phone_number_status_updated_webhook_event.py +26 -2
  32. linq_python-0.15.1/src/linq/types/phone_number_update_params.py +13 -0
  33. linq_python-0.15.1/src/linq/types/phone_number_update_response.py +18 -0
  34. linq_python-0.15.1/tests/api_resources/test_available_number.py +96 -0
  35. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/test_messages.py +330 -0
  36. linq_python-0.15.1/tests/api_resources/test_phone_numbers.py +172 -0
  37. {linq_python-0.14.0 → linq_python-0.15.1}/uv.lock +1 -1
  38. linq_python-0.14.0/.release-please-manifest.json +0 -3
  39. linq_python-0.14.0/CHANGELOG.md +0 -13
  40. linq_python-0.14.0/src/linq/resources/messages.py +0 -692
  41. linq_python-0.14.0/src/linq/types/phone_number_list_response.py +0 -60
  42. linq_python-0.14.0/tests/api_resources/test_phone_numbers.py +0 -80
  43. {linq_python-0.14.0 → linq_python-0.15.1}/.gitignore +0 -0
  44. {linq_python-0.14.0 → linq_python-0.15.1}/CONTRIBUTING.md +0 -0
  45. {linq_python-0.14.0 → linq_python-0.15.1}/LICENSE +0 -0
  46. {linq_python-0.14.0 → linq_python-0.15.1}/README.md +0 -0
  47. {linq_python-0.14.0 → linq_python-0.15.1}/SECURITY.md +0 -0
  48. {linq_python-0.14.0 → linq_python-0.15.1}/bin/check-release-environment +0 -0
  49. {linq_python-0.14.0 → linq_python-0.15.1}/bin/publish-pypi +0 -0
  50. {linq_python-0.14.0 → linq_python-0.15.1}/examples/.keep +0 -0
  51. {linq_python-0.14.0 → linq_python-0.15.1}/release-please-config.json +0 -0
  52. {linq_python-0.14.0 → linq_python-0.15.1}/requirements-dev.lock +0 -0
  53. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/__init__.py +0 -0
  54. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_base_client.py +0 -0
  55. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_compat.py +0 -0
  56. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_constants.py +0 -0
  57. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_exceptions.py +0 -0
  58. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_files.py +0 -0
  59. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_models.py +0 -0
  60. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_qs.py +0 -0
  61. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_resource.py +0 -0
  62. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_response.py +0 -0
  63. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_streaming.py +0 -0
  64. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_types.py +0 -0
  65. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/__init__.py +0 -0
  66. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_compat.py +0 -0
  67. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_datetime_parse.py +0 -0
  68. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_json.py +0 -0
  69. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_logs.py +0 -0
  70. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_path.py +0 -0
  71. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_proxy.py +0 -0
  72. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_reflection.py +0 -0
  73. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_resources_proxy.py +0 -0
  74. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_streams.py +0 -0
  75. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_sync.py +0 -0
  76. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_transform.py +0 -0
  77. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_typing.py +0 -0
  78. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/_utils/_utils.py +0 -0
  79. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/lib/.keep +0 -0
  80. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/pagination.py +0 -0
  81. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/py.typed +0 -0
  82. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/capability.py +0 -0
  83. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/chats/__init__.py +0 -0
  84. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/chats/participants.py +0 -0
  85. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/chats/typing.py +0 -0
  86. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/phonenumbers.py +0 -0
  87. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/webhook_events.py +0 -0
  88. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/webhook_subscriptions.py +0 -0
  89. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/resources/webhooks.py +0 -0
  90. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/attachment_create_params.py +0 -0
  91. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/attachment_create_response.py +0 -0
  92. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/attachment_retrieve_response.py +0 -0
  93. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/capability_check_RCS_params.py +0 -0
  94. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/capability_check_i_message_params.py +0 -0
  95. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_create_params.py +0 -0
  96. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_create_response.py +0 -0
  97. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_created_webhook_event.py +0 -0
  98. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_group_icon_update_failed_webhook_event.py +0 -0
  99. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_group_icon_updated_webhook_event.py +0 -0
  100. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_group_name_update_failed_webhook_event.py +0 -0
  101. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_group_name_updated_webhook_event.py +0 -0
  102. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_leave_chat_response.py +0 -0
  103. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_list_chats_params.py +0 -0
  104. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_send_voicememo_params.py +0 -0
  105. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_send_voicememo_response.py +0 -0
  106. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_typing_indicator_started_webhook_event.py +0 -0
  107. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_typing_indicator_stopped_webhook_event.py +0 -0
  108. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_update_params.py +0 -0
  109. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chat_update_response.py +0 -0
  110. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/__init__.py +0 -0
  111. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/get_chat_location_response.py +0 -0
  112. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/location_request_response.py +0 -0
  113. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/message_list_params.py +0 -0
  114. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/message_send_params.py +0 -0
  115. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/message_send_response.py +0 -0
  116. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/participant_add_params.py +0 -0
  117. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/participant_add_response.py +0 -0
  118. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/participant_remove_params.py +0 -0
  119. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/chats/participant_remove_response.py +0 -0
  120. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/contact_card_retrieve_params.py +0 -0
  121. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/contact_card_retrieve_response.py +0 -0
  122. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/contact_card_update_params.py +0 -0
  123. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/handle_check_response.py +0 -0
  124. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/link_part_param.py +0 -0
  125. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/media_part_param.py +0 -0
  126. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_add_reaction_params.py +0 -0
  127. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_add_reaction_response.py +0 -0
  128. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_delivered_webhook_event.py +0 -0
  129. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_edited_webhook_event.py +0 -0
  130. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_effect.py +0 -0
  131. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_effect_param.py +0 -0
  132. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_failed_webhook_event.py +0 -0
  133. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_list_messages_thread_params.py +0 -0
  134. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_read_webhook_event.py +0 -0
  135. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_received_webhook_event.py +0 -0
  136. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_sent_webhook_event.py +0 -0
  137. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/message_update_params.py +0 -0
  138. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/participant_added_webhook_event.py +0 -0
  139. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/participant_removed_webhook_event.py +0 -0
  140. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/phonenumber_list_response.py +0 -0
  141. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/reaction_added_webhook_event.py +0 -0
  142. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/reaction_event_base.py +0 -0
  143. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/reaction_removed_webhook_event.py +0 -0
  144. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/reply_to.py +0 -0
  145. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/reply_to_param.py +0 -0
  146. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/schemas_media_part_response.py +0 -0
  147. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/schemas_message_effect.py +0 -0
  148. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/schemas_text_part_response.py +0 -0
  149. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/set_contact_card.py +0 -0
  150. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared/__init__.py +0 -0
  151. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared/chat_handle.py +0 -0
  152. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared/link_part_response.py +0 -0
  153. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared/media_part_response.py +0 -0
  154. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared/reaction.py +0 -0
  155. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared/reaction_type.py +0 -0
  156. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared/service_type.py +0 -0
  157. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared/text_decoration.py +0 -0
  158. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared/text_part_response.py +0 -0
  159. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared_params/__init__.py +0 -0
  160. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared_params/reaction_type.py +0 -0
  161. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared_params/service_type.py +0 -0
  162. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/shared_params/text_decoration.py +0 -0
  163. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/supported_content_type.py +0 -0
  164. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/text_part_param.py +0 -0
  165. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/unwrap_webhook_event.py +0 -0
  166. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/webhook_event_list_response.py +0 -0
  167. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/webhook_event_type.py +0 -0
  168. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/webhook_subscription.py +0 -0
  169. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/webhook_subscription_create_params.py +0 -0
  170. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/webhook_subscription_create_response.py +0 -0
  171. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/webhook_subscription_list_response.py +0 -0
  172. {linq_python-0.14.0 → linq_python-0.15.1}/src/linq/types/webhook_subscription_update_params.py +0 -0
  173. {linq_python-0.14.0 → linq_python-0.15.1}/tests/__init__.py +0 -0
  174. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/__init__.py +0 -0
  175. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/chats/__init__.py +0 -0
  176. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/chats/test_location.py +0 -0
  177. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/chats/test_messages.py +0 -0
  178. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/chats/test_participants.py +0 -0
  179. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/chats/test_typing.py +0 -0
  180. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/test_attachments.py +0 -0
  181. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/test_capability.py +0 -0
  182. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/test_chats.py +0 -0
  183. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/test_contact_card.py +0 -0
  184. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/test_phonenumbers.py +0 -0
  185. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/test_webhook_events.py +0 -0
  186. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/test_webhook_subscriptions.py +0 -0
  187. {linq_python-0.14.0 → linq_python-0.15.1}/tests/api_resources/test_webhooks.py +0 -0
  188. {linq_python-0.14.0 → linq_python-0.15.1}/tests/conftest.py +0 -0
  189. {linq_python-0.14.0 → linq_python-0.15.1}/tests/sample_file.txt +0 -0
  190. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_client.py +0 -0
  191. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_extract_files.py +0 -0
  192. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_files.py +0 -0
  193. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_models.py +0 -0
  194. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_qs.py +0 -0
  195. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_required_args.py +0 -0
  196. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_response.py +0 -0
  197. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_streaming.py +0 -0
  198. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_transform.py +0 -0
  199. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_utils/test_datetime_parse.py +0 -0
  200. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_utils/test_json.py +0 -0
  201. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_utils/test_path.py +0 -0
  202. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_utils/test_proxy.py +0 -0
  203. {linq_python-0.14.0 → linq_python-0.15.1}/tests/test_utils/test_typing.py +0 -0
  204. {linq_python-0.14.0 → linq_python-0.15.1}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.15.1"
3
+ }
@@ -0,0 +1,27 @@
1
+ # Changelog
2
+
3
+ ## [0.15.1](https://github.com/linq-team/linq-python/compare/v0.15.0...v0.15.1) (2026-07-06)
4
+
5
+
6
+ ### Documentation
7
+
8
+ * clarify phone line reputation status descriptions ([#34](https://github.com/linq-team/linq-python/issues/34)) ([a5a6a99](https://github.com/linq-team/linq-python/commit/a5a6a99e2a66bacd6f50b36155d8ffb152a4a85a))
9
+
10
+ ## [0.15.0](https://github.com/linq-team/linq-python/compare/v0.14.0...v0.15.0) (2026-06-21)
11
+
12
+
13
+ ### Features
14
+
15
+ * phone line reputation + group chat icon; remove iMessage app image layout & session_id ([#32](https://github.com/linq-team/linq-python/issues/32)) ([736fe20](https://github.com/linq-team/linq-python/commit/736fe201b71b3c3bf88c5621621a0a5fbee4ac56))
16
+
17
+ ## [0.14.0](https://github.com/linq-team/linq-python/compare/v0.13.0...v0.14.0) (2026-06-10)
18
+
19
+
20
+ ### Features
21
+
22
+ * regenerate SDKs from updated API spec ([#29](https://github.com/linq-team/linq-python/issues/29)) ([dd7f2d7](https://github.com/linq-team/linq-python/commit/dd7f2d7e19e85fa9f61f6367f7e2a1cc942765bf))
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * **ci:** parse release PR number in shell, not fromJSON in env ([#26](https://github.com/linq-team/linq-python/issues/26)) ([a364403](https://github.com/linq-team/linq-python/commit/a364403289e482298f8b0d78e8e45de8fb87b79d))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: linq-python
3
- Version: 0.14.0
3
+ Version: 0.15.1
4
4
  Summary: The official Python library for the linq-api-v3 API
5
5
  Project-URL: Homepage, https://github.com/linq-team/linq-python
6
6
  Project-URL: Repository, https://github.com/linq-team/linq-python
@@ -93,16 +93,25 @@ Methods:
93
93
  Types:
94
94
 
95
95
  ```python
96
- from linq.types import Message, MessageEffect, ReplyTo, MessageAddReactionResponse
96
+ from linq.types import (
97
+ Message,
98
+ MessageEffect,
99
+ ReplyTo,
100
+ MessageCreateResponse,
101
+ MessageAddReactionResponse,
102
+ MessageUpdateAppCardResponse,
103
+ )
97
104
  ```
98
105
 
99
106
  Methods:
100
107
 
108
+ - <code title="post /v3/messages">client.messages.<a href="./src/linq/resources/messages.py">create</a>(\*\*<a href="src/linq/types/message_create_params.py">params</a>) -> <a href="./src/linq/types/message_create_response.py">MessageCreateResponse</a></code>
101
109
  - <code title="get /v3/messages/{messageId}">client.messages.<a href="./src/linq/resources/messages.py">retrieve</a>(message_id) -> <a href="./src/linq/types/message.py">Message</a></code>
102
110
  - <code title="patch /v3/messages/{messageId}">client.messages.<a href="./src/linq/resources/messages.py">update</a>(message_id, \*\*<a href="src/linq/types/message_update_params.py">params</a>) -> <a href="./src/linq/types/message.py">Message</a></code>
103
111
  - <code title="delete /v3/messages/{messageId}">client.messages.<a href="./src/linq/resources/messages.py">delete</a>(message_id) -> None</code>
104
112
  - <code title="post /v3/messages/{messageId}/reactions">client.messages.<a href="./src/linq/resources/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>
105
113
  - <code title="get /v3/messages/{messageId}/thread">client.messages.<a href="./src/linq/resources/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>
114
+ - <code title="post /v3/messages/{messageId}/update">client.messages.<a href="./src/linq/resources/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>
106
115
 
107
116
  # Attachments
108
117
 
@@ -135,13 +144,26 @@ Methods:
135
144
  Types:
136
145
 
137
146
  ```python
138
- from linq.types import PhoneNumberListResponse
147
+ from linq.types import PhoneNumberUpdateResponse, PhoneNumberListResponse
139
148
  ```
140
149
 
141
150
  Methods:
142
151
 
152
+ - <code title="put /v3/phone_numbers/{phoneNumberId}">client.phone_numbers.<a href="./src/linq/resources/phone_numbers.py">update</a>(phone_number_id, \*\*<a href="src/linq/types/phone_number_update_params.py">params</a>) -> <a href="./src/linq/types/phone_number_update_response.py">PhoneNumberUpdateResponse</a></code>
143
153
  - <code title="get /v3/phone_numbers">client.phone_numbers.<a href="./src/linq/resources/phone_numbers.py">list</a>() -> <a href="./src/linq/types/phone_number_list_response.py">PhoneNumberListResponse</a></code>
144
154
 
155
+ # AvailableNumber
156
+
157
+ Types:
158
+
159
+ ```python
160
+ from linq.types import AvailableNumberRetrieveResponse
161
+ ```
162
+
163
+ Methods:
164
+
165
+ - <code title="get /v3/available_number">client.available_number.<a href="./src/linq/resources/available_number.py">retrieve</a>(\*\*<a href="src/linq/types/available_number_retrieve_params.py">params</a>) -> <a href="./src/linq/types/available_number_retrieve_response.py">AvailableNumberRetrieveResponse</a></code>
166
+
145
167
  # WebhookEvents
146
168
 
147
169
  Types:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "linq-python"
3
- version = "0.14.0"
3
+ version = "0.15.1"
4
4
  description = "The official Python library for the linq-api-v3 API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -45,6 +45,7 @@ if TYPE_CHECKING:
45
45
  phonenumbers,
46
46
  phone_numbers,
47
47
  webhook_events,
48
+ available_number,
48
49
  webhook_subscriptions,
49
50
  )
50
51
  from .resources.messages import MessagesResource, AsyncMessagesResource
@@ -56,6 +57,7 @@ if TYPE_CHECKING:
56
57
  from .resources.phonenumbers import PhonenumbersResource, AsyncPhonenumbersResource
57
58
  from .resources.phone_numbers import PhoneNumbersResource, AsyncPhoneNumbersResource
58
59
  from .resources.webhook_events import WebhookEventsResource, AsyncWebhookEventsResource
60
+ from .resources.available_number import AvailableNumberResource, AsyncAvailableNumberResource
59
61
  from .resources.webhook_subscriptions import WebhookSubscriptionsResource, AsyncWebhookSubscriptionsResource
60
62
 
61
63
  __all__ = [
@@ -168,6 +170,46 @@ class LinqAPIV3(SyncAPIClient):
168
170
  **Limitations:**
169
171
  - A `link` part cannot be combined with other parts in the same message.
170
172
  - Maximum URL length: 2,048 characters.
173
+
174
+ ## Ephemeral Messages (Privacy Tier)
175
+
176
+ For regulated or sensitive conversations, opt in to the **ephemeral messages** tier by contacting your Linq support contact. When enabled, every message on the covered phone numbers is automatically given a fixed **24-hour retention window** — after that window the platform permanently deletes the message from Linq storage. There is no per-message flag; ephemerality is applied automatically based on your configuration.
177
+
178
+ You can request it at two scopes:
179
+
180
+ | Scope | Effect |
181
+ |---|---|
182
+ | **Partner-wide** | Every outbound and inbound message on every phone number under your account is retained for 24 hours, then deleted. |
183
+ | **Per phone number** | Only the specified phone numbers have their messages auto-deleted. The rest follow the standard message-retention policy. |
184
+
185
+ **Behavioral differences vs the standard default:**
186
+
187
+ | Aspect | Standard | Ephemeral |
188
+ |---|---|---|
189
+ | Retention | Retained per the standard message-retention policy | **Hard backstop: 24 hours** from when the message is created |
190
+ | After expiry | Message stays retrievable | Message is permanently deleted — `GET /v3/messages/{messageId}` returns `404` and it no longer appears in `GET /v3/chats/{chatId}/messages` |
191
+ | Content on expiry | N/A | Text, formatting, and attachment references are scrubbed; the message is gone, not blanked out |
192
+ | Cross-partner isolation | Enforced | Enforced |
193
+
194
+ **How the 24-hour window works:**
195
+
196
+ - The window is fixed at **24 hours from message creation** (`created_at`) and cannot be configured per message.
197
+ - It mirrors the ephemeral *attachments* 1-day backstop, so a message and any media it carries expire together.
198
+ - Expiry is delivery-independent — the clock starts when the message is created, not when it is delivered or read.
199
+
200
+ **What you observe:**
201
+
202
+ - **No expiry timestamp is exposed.** API responses and webhook payloads do not include the deletion time. If you need it, compute `created_at + 24h` yourself.
203
+ - **No deletion webhook is sent.** There is no `message.deleted` event — a message simply stops being retrievable once its window passes.
204
+ - **Delivery is unaffected.** Ephemeral messages send, deliver, and fire the usual `message.sent` / `message.received` and status webhooks exactly like standard messages. Only retention changes.
205
+
206
+ **When to choose ephemeral:**
207
+
208
+ - You have a compliance requirement that the platform must not retain message content beyond a short window.
209
+ - The conversation is high-sensitivity (PHI, financial, identity verification) and you do not want it sitting in storage long-term.
210
+ - Your application is the system of record — you capture what you need from the delivery webhook in real time and do not rely on reading message history back from Linq later.
211
+
212
+ **Important:** ephemeral applies in *both directions* — messages you send **and** messages received by the phone numbers in that scope. Because Linq can no longer return the message after 24 hours, persist anything you need to keep from the webhook payload at the time it is delivered.
171
213
  """
172
214
  from .resources.messages import MessagesResource
173
215
 
@@ -339,7 +381,7 @@ class LinqAPIV3(SyncAPIClient):
339
381
  |---|---|---|
340
382
  | Attachment bytes | Retained until you `DELETE` | **Auto-removed after 1 day**, also removable via `DELETE` |
341
383
  | Attachment metadata (id, filename, mime type, size) | Retained until you `DELETE` | Removed alongside the bytes |
342
- | Message body & parts | Retained per message-retention policy | Retained per message-retention policy |
384
+ | Message body & parts | Retained per message-retention policy | Retained per message-retention policy — unless the line also has **ephemeral messages** enabled (see the Messages page), in which case the message and its parts are deleted 24 hours after creation |
343
385
  | Audit log of deletions | Retained per platform retention policy | Retained per platform retention policy |
344
386
 
345
387
  **In transit:** TLS 1.2+ everywhere. **At rest:** AES-256 (server-side encryption).
@@ -387,6 +429,20 @@ class LinqAPIV3(SyncAPIClient):
387
429
 
388
430
  return PhoneNumbersResource(self)
389
431
 
432
+ @cached_property
433
+ def available_number(self) -> AvailableNumberResource:
434
+ """Phone Numbers represent the phone numbers assigned to your partner account.
435
+
436
+ Use the list phone numbers endpoint to discover which phone numbers are available
437
+ for sending messages.
438
+
439
+ When creating chats, listing chats, or sending a voice memo, use one of your assigned phone numbers
440
+ in the `from` field.
441
+ """
442
+ from .resources.available_number import AvailableNumberResource
443
+
444
+ return AvailableNumberResource(self)
445
+
390
446
  @cached_property
391
447
  def webhook_events(self) -> WebhookEventsResource:
392
448
  """
@@ -698,9 +754,11 @@ class LinqAPIV3(SyncAPIClient):
698
754
 
699
755
  @override
700
756
  def _auth_headers(self, security: SecurityOptions) -> dict[str, str]:
701
- return {
702
- **(self._bearer_auth if security.get("bearer_auth", False) else {}),
703
- }
757
+ headers: dict[str, str] = {}
758
+ if security.get("bearer_auth", False):
759
+ for key, value in self._bearer_auth.items():
760
+ headers.setdefault(key, value)
761
+ return headers
704
762
 
705
763
  @property
706
764
  def _bearer_auth(self) -> dict[str, str]:
@@ -901,6 +959,46 @@ class AsyncLinqAPIV3(AsyncAPIClient):
901
959
  **Limitations:**
902
960
  - A `link` part cannot be combined with other parts in the same message.
903
961
  - Maximum URL length: 2,048 characters.
962
+
963
+ ## Ephemeral Messages (Privacy Tier)
964
+
965
+ For regulated or sensitive conversations, opt in to the **ephemeral messages** tier by contacting your Linq support contact. When enabled, every message on the covered phone numbers is automatically given a fixed **24-hour retention window** — after that window the platform permanently deletes the message from Linq storage. There is no per-message flag; ephemerality is applied automatically based on your configuration.
966
+
967
+ You can request it at two scopes:
968
+
969
+ | Scope | Effect |
970
+ |---|---|
971
+ | **Partner-wide** | Every outbound and inbound message on every phone number under your account is retained for 24 hours, then deleted. |
972
+ | **Per phone number** | Only the specified phone numbers have their messages auto-deleted. The rest follow the standard message-retention policy. |
973
+
974
+ **Behavioral differences vs the standard default:**
975
+
976
+ | Aspect | Standard | Ephemeral |
977
+ |---|---|---|
978
+ | Retention | Retained per the standard message-retention policy | **Hard backstop: 24 hours** from when the message is created |
979
+ | After expiry | Message stays retrievable | Message is permanently deleted — `GET /v3/messages/{messageId}` returns `404` and it no longer appears in `GET /v3/chats/{chatId}/messages` |
980
+ | Content on expiry | N/A | Text, formatting, and attachment references are scrubbed; the message is gone, not blanked out |
981
+ | Cross-partner isolation | Enforced | Enforced |
982
+
983
+ **How the 24-hour window works:**
984
+
985
+ - The window is fixed at **24 hours from message creation** (`created_at`) and cannot be configured per message.
986
+ - It mirrors the ephemeral *attachments* 1-day backstop, so a message and any media it carries expire together.
987
+ - Expiry is delivery-independent — the clock starts when the message is created, not when it is delivered or read.
988
+
989
+ **What you observe:**
990
+
991
+ - **No expiry timestamp is exposed.** API responses and webhook payloads do not include the deletion time. If you need it, compute `created_at + 24h` yourself.
992
+ - **No deletion webhook is sent.** There is no `message.deleted` event — a message simply stops being retrievable once its window passes.
993
+ - **Delivery is unaffected.** Ephemeral messages send, deliver, and fire the usual `message.sent` / `message.received` and status webhooks exactly like standard messages. Only retention changes.
994
+
995
+ **When to choose ephemeral:**
996
+
997
+ - You have a compliance requirement that the platform must not retain message content beyond a short window.
998
+ - The conversation is high-sensitivity (PHI, financial, identity verification) and you do not want it sitting in storage long-term.
999
+ - Your application is the system of record — you capture what you need from the delivery webhook in real time and do not rely on reading message history back from Linq later.
1000
+
1001
+ **Important:** ephemeral applies in *both directions* — messages you send **and** messages received by the phone numbers in that scope. Because Linq can no longer return the message after 24 hours, persist anything you need to keep from the webhook payload at the time it is delivered.
904
1002
  """
905
1003
  from .resources.messages import AsyncMessagesResource
906
1004
 
@@ -1072,7 +1170,7 @@ class AsyncLinqAPIV3(AsyncAPIClient):
1072
1170
  |---|---|---|
1073
1171
  | Attachment bytes | Retained until you `DELETE` | **Auto-removed after 1 day**, also removable via `DELETE` |
1074
1172
  | Attachment metadata (id, filename, mime type, size) | Retained until you `DELETE` | Removed alongside the bytes |
1075
- | Message body & parts | Retained per message-retention policy | Retained per message-retention policy |
1173
+ | Message body & parts | Retained per message-retention policy | Retained per message-retention policy — unless the line also has **ephemeral messages** enabled (see the Messages page), in which case the message and its parts are deleted 24 hours after creation |
1076
1174
  | Audit log of deletions | Retained per platform retention policy | Retained per platform retention policy |
1077
1175
 
1078
1176
  **In transit:** TLS 1.2+ everywhere. **At rest:** AES-256 (server-side encryption).
@@ -1120,6 +1218,20 @@ class AsyncLinqAPIV3(AsyncAPIClient):
1120
1218
 
1121
1219
  return AsyncPhoneNumbersResource(self)
1122
1220
 
1221
+ @cached_property
1222
+ def available_number(self) -> AsyncAvailableNumberResource:
1223
+ """Phone Numbers represent the phone numbers assigned to your partner account.
1224
+
1225
+ Use the list phone numbers endpoint to discover which phone numbers are available
1226
+ for sending messages.
1227
+
1228
+ When creating chats, listing chats, or sending a voice memo, use one of your assigned phone numbers
1229
+ in the `from` field.
1230
+ """
1231
+ from .resources.available_number import AsyncAvailableNumberResource
1232
+
1233
+ return AsyncAvailableNumberResource(self)
1234
+
1123
1235
  @cached_property
1124
1236
  def webhook_events(self) -> AsyncWebhookEventsResource:
1125
1237
  """
@@ -1431,9 +1543,11 @@ class AsyncLinqAPIV3(AsyncAPIClient):
1431
1543
 
1432
1544
  @override
1433
1545
  def _auth_headers(self, security: SecurityOptions) -> dict[str, str]:
1434
- return {
1435
- **(self._bearer_auth if security.get("bearer_auth", False) else {}),
1436
- }
1546
+ headers: dict[str, str] = {}
1547
+ if security.get("bearer_auth", False):
1548
+ for key, value in self._bearer_auth.items():
1549
+ headers.setdefault(key, value)
1550
+ return headers
1437
1551
 
1438
1552
  @property
1439
1553
  def _bearer_auth(self) -> dict[str, str]:
@@ -1568,6 +1682,46 @@ class LinqAPIV3WithRawResponse:
1568
1682
  **Limitations:**
1569
1683
  - A `link` part cannot be combined with other parts in the same message.
1570
1684
  - Maximum URL length: 2,048 characters.
1685
+
1686
+ ## Ephemeral Messages (Privacy Tier)
1687
+
1688
+ For regulated or sensitive conversations, opt in to the **ephemeral messages** tier by contacting your Linq support contact. When enabled, every message on the covered phone numbers is automatically given a fixed **24-hour retention window** — after that window the platform permanently deletes the message from Linq storage. There is no per-message flag; ephemerality is applied automatically based on your configuration.
1689
+
1690
+ You can request it at two scopes:
1691
+
1692
+ | Scope | Effect |
1693
+ |---|---|
1694
+ | **Partner-wide** | Every outbound and inbound message on every phone number under your account is retained for 24 hours, then deleted. |
1695
+ | **Per phone number** | Only the specified phone numbers have their messages auto-deleted. The rest follow the standard message-retention policy. |
1696
+
1697
+ **Behavioral differences vs the standard default:**
1698
+
1699
+ | Aspect | Standard | Ephemeral |
1700
+ |---|---|---|
1701
+ | Retention | Retained per the standard message-retention policy | **Hard backstop: 24 hours** from when the message is created |
1702
+ | After expiry | Message stays retrievable | Message is permanently deleted — `GET /v3/messages/{messageId}` returns `404` and it no longer appears in `GET /v3/chats/{chatId}/messages` |
1703
+ | Content on expiry | N/A | Text, formatting, and attachment references are scrubbed; the message is gone, not blanked out |
1704
+ | Cross-partner isolation | Enforced | Enforced |
1705
+
1706
+ **How the 24-hour window works:**
1707
+
1708
+ - The window is fixed at **24 hours from message creation** (`created_at`) and cannot be configured per message.
1709
+ - It mirrors the ephemeral *attachments* 1-day backstop, so a message and any media it carries expire together.
1710
+ - Expiry is delivery-independent — the clock starts when the message is created, not when it is delivered or read.
1711
+
1712
+ **What you observe:**
1713
+
1714
+ - **No expiry timestamp is exposed.** API responses and webhook payloads do not include the deletion time. If you need it, compute `created_at + 24h` yourself.
1715
+ - **No deletion webhook is sent.** There is no `message.deleted` event — a message simply stops being retrievable once its window passes.
1716
+ - **Delivery is unaffected.** Ephemeral messages send, deliver, and fire the usual `message.sent` / `message.received` and status webhooks exactly like standard messages. Only retention changes.
1717
+
1718
+ **When to choose ephemeral:**
1719
+
1720
+ - You have a compliance requirement that the platform must not retain message content beyond a short window.
1721
+ - The conversation is high-sensitivity (PHI, financial, identity verification) and you do not want it sitting in storage long-term.
1722
+ - Your application is the system of record — you capture what you need from the delivery webhook in real time and do not rely on reading message history back from Linq later.
1723
+
1724
+ **Important:** ephemeral applies in *both directions* — messages you send **and** messages received by the phone numbers in that scope. Because Linq can no longer return the message after 24 hours, persist anything you need to keep from the webhook payload at the time it is delivered.
1571
1725
  """
1572
1726
  from .resources.messages import MessagesResourceWithRawResponse
1573
1727
 
@@ -1739,7 +1893,7 @@ class LinqAPIV3WithRawResponse:
1739
1893
  |---|---|---|
1740
1894
  | Attachment bytes | Retained until you `DELETE` | **Auto-removed after 1 day**, also removable via `DELETE` |
1741
1895
  | Attachment metadata (id, filename, mime type, size) | Retained until you `DELETE` | Removed alongside the bytes |
1742
- | Message body & parts | Retained per message-retention policy | Retained per message-retention policy |
1896
+ | Message body & parts | Retained per message-retention policy | Retained per message-retention policy — unless the line also has **ephemeral messages** enabled (see the Messages page), in which case the message and its parts are deleted 24 hours after creation |
1743
1897
  | Audit log of deletions | Retained per platform retention policy | Retained per platform retention policy |
1744
1898
 
1745
1899
  **In transit:** TLS 1.2+ everywhere. **At rest:** AES-256 (server-side encryption).
@@ -1787,6 +1941,20 @@ class LinqAPIV3WithRawResponse:
1787
1941
 
1788
1942
  return PhoneNumbersResourceWithRawResponse(self._client.phone_numbers)
1789
1943
 
1944
+ @cached_property
1945
+ def available_number(self) -> available_number.AvailableNumberResourceWithRawResponse:
1946
+ """Phone Numbers represent the phone numbers assigned to your partner account.
1947
+
1948
+ Use the list phone numbers endpoint to discover which phone numbers are available
1949
+ for sending messages.
1950
+
1951
+ When creating chats, listing chats, or sending a voice memo, use one of your assigned phone numbers
1952
+ in the `from` field.
1953
+ """
1954
+ from .resources.available_number import AvailableNumberResourceWithRawResponse
1955
+
1956
+ return AvailableNumberResourceWithRawResponse(self._client.available_number)
1957
+
1790
1958
  @cached_property
1791
1959
  def webhook_events(self) -> webhook_events.WebhookEventsResourceWithRawResponse:
1792
1960
  """
@@ -2110,6 +2278,46 @@ class AsyncLinqAPIV3WithRawResponse:
2110
2278
  **Limitations:**
2111
2279
  - A `link` part cannot be combined with other parts in the same message.
2112
2280
  - Maximum URL length: 2,048 characters.
2281
+
2282
+ ## Ephemeral Messages (Privacy Tier)
2283
+
2284
+ For regulated or sensitive conversations, opt in to the **ephemeral messages** tier by contacting your Linq support contact. When enabled, every message on the covered phone numbers is automatically given a fixed **24-hour retention window** — after that window the platform permanently deletes the message from Linq storage. There is no per-message flag; ephemerality is applied automatically based on your configuration.
2285
+
2286
+ You can request it at two scopes:
2287
+
2288
+ | Scope | Effect |
2289
+ |---|---|
2290
+ | **Partner-wide** | Every outbound and inbound message on every phone number under your account is retained for 24 hours, then deleted. |
2291
+ | **Per phone number** | Only the specified phone numbers have their messages auto-deleted. The rest follow the standard message-retention policy. |
2292
+
2293
+ **Behavioral differences vs the standard default:**
2294
+
2295
+ | Aspect | Standard | Ephemeral |
2296
+ |---|---|---|
2297
+ | Retention | Retained per the standard message-retention policy | **Hard backstop: 24 hours** from when the message is created |
2298
+ | After expiry | Message stays retrievable | Message is permanently deleted — `GET /v3/messages/{messageId}` returns `404` and it no longer appears in `GET /v3/chats/{chatId}/messages` |
2299
+ | Content on expiry | N/A | Text, formatting, and attachment references are scrubbed; the message is gone, not blanked out |
2300
+ | Cross-partner isolation | Enforced | Enforced |
2301
+
2302
+ **How the 24-hour window works:**
2303
+
2304
+ - The window is fixed at **24 hours from message creation** (`created_at`) and cannot be configured per message.
2305
+ - It mirrors the ephemeral *attachments* 1-day backstop, so a message and any media it carries expire together.
2306
+ - Expiry is delivery-independent — the clock starts when the message is created, not when it is delivered or read.
2307
+
2308
+ **What you observe:**
2309
+
2310
+ - **No expiry timestamp is exposed.** API responses and webhook payloads do not include the deletion time. If you need it, compute `created_at + 24h` yourself.
2311
+ - **No deletion webhook is sent.** There is no `message.deleted` event — a message simply stops being retrievable once its window passes.
2312
+ - **Delivery is unaffected.** Ephemeral messages send, deliver, and fire the usual `message.sent` / `message.received` and status webhooks exactly like standard messages. Only retention changes.
2313
+
2314
+ **When to choose ephemeral:**
2315
+
2316
+ - You have a compliance requirement that the platform must not retain message content beyond a short window.
2317
+ - The conversation is high-sensitivity (PHI, financial, identity verification) and you do not want it sitting in storage long-term.
2318
+ - Your application is the system of record — you capture what you need from the delivery webhook in real time and do not rely on reading message history back from Linq later.
2319
+
2320
+ **Important:** ephemeral applies in *both directions* — messages you send **and** messages received by the phone numbers in that scope. Because Linq can no longer return the message after 24 hours, persist anything you need to keep from the webhook payload at the time it is delivered.
2113
2321
  """
2114
2322
  from .resources.messages import AsyncMessagesResourceWithRawResponse
2115
2323
 
@@ -2281,7 +2489,7 @@ class AsyncLinqAPIV3WithRawResponse:
2281
2489
  |---|---|---|
2282
2490
  | Attachment bytes | Retained until you `DELETE` | **Auto-removed after 1 day**, also removable via `DELETE` |
2283
2491
  | Attachment metadata (id, filename, mime type, size) | Retained until you `DELETE` | Removed alongside the bytes |
2284
- | Message body & parts | Retained per message-retention policy | Retained per message-retention policy |
2492
+ | Message body & parts | Retained per message-retention policy | Retained per message-retention policy — unless the line also has **ephemeral messages** enabled (see the Messages page), in which case the message and its parts are deleted 24 hours after creation |
2285
2493
  | Audit log of deletions | Retained per platform retention policy | Retained per platform retention policy |
2286
2494
 
2287
2495
  **In transit:** TLS 1.2+ everywhere. **At rest:** AES-256 (server-side encryption).
@@ -2329,6 +2537,20 @@ class AsyncLinqAPIV3WithRawResponse:
2329
2537
 
2330
2538
  return AsyncPhoneNumbersResourceWithRawResponse(self._client.phone_numbers)
2331
2539
 
2540
+ @cached_property
2541
+ def available_number(self) -> available_number.AsyncAvailableNumberResourceWithRawResponse:
2542
+ """Phone Numbers represent the phone numbers assigned to your partner account.
2543
+
2544
+ Use the list phone numbers endpoint to discover which phone numbers are available
2545
+ for sending messages.
2546
+
2547
+ When creating chats, listing chats, or sending a voice memo, use one of your assigned phone numbers
2548
+ in the `from` field.
2549
+ """
2550
+ from .resources.available_number import AsyncAvailableNumberResourceWithRawResponse
2551
+
2552
+ return AsyncAvailableNumberResourceWithRawResponse(self._client.available_number)
2553
+
2332
2554
  @cached_property
2333
2555
  def webhook_events(self) -> webhook_events.AsyncWebhookEventsResourceWithRawResponse:
2334
2556
  """
@@ -2652,6 +2874,46 @@ class LinqAPIV3WithStreamedResponse:
2652
2874
  **Limitations:**
2653
2875
  - A `link` part cannot be combined with other parts in the same message.
2654
2876
  - Maximum URL length: 2,048 characters.
2877
+
2878
+ ## Ephemeral Messages (Privacy Tier)
2879
+
2880
+ For regulated or sensitive conversations, opt in to the **ephemeral messages** tier by contacting your Linq support contact. When enabled, every message on the covered phone numbers is automatically given a fixed **24-hour retention window** — after that window the platform permanently deletes the message from Linq storage. There is no per-message flag; ephemerality is applied automatically based on your configuration.
2881
+
2882
+ You can request it at two scopes:
2883
+
2884
+ | Scope | Effect |
2885
+ |---|---|
2886
+ | **Partner-wide** | Every outbound and inbound message on every phone number under your account is retained for 24 hours, then deleted. |
2887
+ | **Per phone number** | Only the specified phone numbers have their messages auto-deleted. The rest follow the standard message-retention policy. |
2888
+
2889
+ **Behavioral differences vs the standard default:**
2890
+
2891
+ | Aspect | Standard | Ephemeral |
2892
+ |---|---|---|
2893
+ | Retention | Retained per the standard message-retention policy | **Hard backstop: 24 hours** from when the message is created |
2894
+ | After expiry | Message stays retrievable | Message is permanently deleted — `GET /v3/messages/{messageId}` returns `404` and it no longer appears in `GET /v3/chats/{chatId}/messages` |
2895
+ | Content on expiry | N/A | Text, formatting, and attachment references are scrubbed; the message is gone, not blanked out |
2896
+ | Cross-partner isolation | Enforced | Enforced |
2897
+
2898
+ **How the 24-hour window works:**
2899
+
2900
+ - The window is fixed at **24 hours from message creation** (`created_at`) and cannot be configured per message.
2901
+ - It mirrors the ephemeral *attachments* 1-day backstop, so a message and any media it carries expire together.
2902
+ - Expiry is delivery-independent — the clock starts when the message is created, not when it is delivered or read.
2903
+
2904
+ **What you observe:**
2905
+
2906
+ - **No expiry timestamp is exposed.** API responses and webhook payloads do not include the deletion time. If you need it, compute `created_at + 24h` yourself.
2907
+ - **No deletion webhook is sent.** There is no `message.deleted` event — a message simply stops being retrievable once its window passes.
2908
+ - **Delivery is unaffected.** Ephemeral messages send, deliver, and fire the usual `message.sent` / `message.received` and status webhooks exactly like standard messages. Only retention changes.
2909
+
2910
+ **When to choose ephemeral:**
2911
+
2912
+ - You have a compliance requirement that the platform must not retain message content beyond a short window.
2913
+ - The conversation is high-sensitivity (PHI, financial, identity verification) and you do not want it sitting in storage long-term.
2914
+ - Your application is the system of record — you capture what you need from the delivery webhook in real time and do not rely on reading message history back from Linq later.
2915
+
2916
+ **Important:** ephemeral applies in *both directions* — messages you send **and** messages received by the phone numbers in that scope. Because Linq can no longer return the message after 24 hours, persist anything you need to keep from the webhook payload at the time it is delivered.
2655
2917
  """
2656
2918
  from .resources.messages import MessagesResourceWithStreamingResponse
2657
2919
 
@@ -2823,7 +3085,7 @@ class LinqAPIV3WithStreamedResponse:
2823
3085
  |---|---|---|
2824
3086
  | Attachment bytes | Retained until you `DELETE` | **Auto-removed after 1 day**, also removable via `DELETE` |
2825
3087
  | Attachment metadata (id, filename, mime type, size) | Retained until you `DELETE` | Removed alongside the bytes |
2826
- | Message body & parts | Retained per message-retention policy | Retained per message-retention policy |
3088
+ | Message body & parts | Retained per message-retention policy | Retained per message-retention policy — unless the line also has **ephemeral messages** enabled (see the Messages page), in which case the message and its parts are deleted 24 hours after creation |
2827
3089
  | Audit log of deletions | Retained per platform retention policy | Retained per platform retention policy |
2828
3090
 
2829
3091
  **In transit:** TLS 1.2+ everywhere. **At rest:** AES-256 (server-side encryption).
@@ -2871,6 +3133,20 @@ class LinqAPIV3WithStreamedResponse:
2871
3133
 
2872
3134
  return PhoneNumbersResourceWithStreamingResponse(self._client.phone_numbers)
2873
3135
 
3136
+ @cached_property
3137
+ def available_number(self) -> available_number.AvailableNumberResourceWithStreamingResponse:
3138
+ """Phone Numbers represent the phone numbers assigned to your partner account.
3139
+
3140
+ Use the list phone numbers endpoint to discover which phone numbers are available
3141
+ for sending messages.
3142
+
3143
+ When creating chats, listing chats, or sending a voice memo, use one of your assigned phone numbers
3144
+ in the `from` field.
3145
+ """
3146
+ from .resources.available_number import AvailableNumberResourceWithStreamingResponse
3147
+
3148
+ return AvailableNumberResourceWithStreamingResponse(self._client.available_number)
3149
+
2874
3150
  @cached_property
2875
3151
  def webhook_events(self) -> webhook_events.WebhookEventsResourceWithStreamingResponse:
2876
3152
  """
@@ -3194,6 +3470,46 @@ class AsyncLinqAPIV3WithStreamedResponse:
3194
3470
  **Limitations:**
3195
3471
  - A `link` part cannot be combined with other parts in the same message.
3196
3472
  - Maximum URL length: 2,048 characters.
3473
+
3474
+ ## Ephemeral Messages (Privacy Tier)
3475
+
3476
+ For regulated or sensitive conversations, opt in to the **ephemeral messages** tier by contacting your Linq support contact. When enabled, every message on the covered phone numbers is automatically given a fixed **24-hour retention window** — after that window the platform permanently deletes the message from Linq storage. There is no per-message flag; ephemerality is applied automatically based on your configuration.
3477
+
3478
+ You can request it at two scopes:
3479
+
3480
+ | Scope | Effect |
3481
+ |---|---|
3482
+ | **Partner-wide** | Every outbound and inbound message on every phone number under your account is retained for 24 hours, then deleted. |
3483
+ | **Per phone number** | Only the specified phone numbers have their messages auto-deleted. The rest follow the standard message-retention policy. |
3484
+
3485
+ **Behavioral differences vs the standard default:**
3486
+
3487
+ | Aspect | Standard | Ephemeral |
3488
+ |---|---|---|
3489
+ | Retention | Retained per the standard message-retention policy | **Hard backstop: 24 hours** from when the message is created |
3490
+ | After expiry | Message stays retrievable | Message is permanently deleted — `GET /v3/messages/{messageId}` returns `404` and it no longer appears in `GET /v3/chats/{chatId}/messages` |
3491
+ | Content on expiry | N/A | Text, formatting, and attachment references are scrubbed; the message is gone, not blanked out |
3492
+ | Cross-partner isolation | Enforced | Enforced |
3493
+
3494
+ **How the 24-hour window works:**
3495
+
3496
+ - The window is fixed at **24 hours from message creation** (`created_at`) and cannot be configured per message.
3497
+ - It mirrors the ephemeral *attachments* 1-day backstop, so a message and any media it carries expire together.
3498
+ - Expiry is delivery-independent — the clock starts when the message is created, not when it is delivered or read.
3499
+
3500
+ **What you observe:**
3501
+
3502
+ - **No expiry timestamp is exposed.** API responses and webhook payloads do not include the deletion time. If you need it, compute `created_at + 24h` yourself.
3503
+ - **No deletion webhook is sent.** There is no `message.deleted` event — a message simply stops being retrievable once its window passes.
3504
+ - **Delivery is unaffected.** Ephemeral messages send, deliver, and fire the usual `message.sent` / `message.received` and status webhooks exactly like standard messages. Only retention changes.
3505
+
3506
+ **When to choose ephemeral:**
3507
+
3508
+ - You have a compliance requirement that the platform must not retain message content beyond a short window.
3509
+ - The conversation is high-sensitivity (PHI, financial, identity verification) and you do not want it sitting in storage long-term.
3510
+ - Your application is the system of record — you capture what you need from the delivery webhook in real time and do not rely on reading message history back from Linq later.
3511
+
3512
+ **Important:** ephemeral applies in *both directions* — messages you send **and** messages received by the phone numbers in that scope. Because Linq can no longer return the message after 24 hours, persist anything you need to keep from the webhook payload at the time it is delivered.
3197
3513
  """
3198
3514
  from .resources.messages import AsyncMessagesResourceWithStreamingResponse
3199
3515
 
@@ -3365,7 +3681,7 @@ class AsyncLinqAPIV3WithStreamedResponse:
3365
3681
  |---|---|---|
3366
3682
  | Attachment bytes | Retained until you `DELETE` | **Auto-removed after 1 day**, also removable via `DELETE` |
3367
3683
  | Attachment metadata (id, filename, mime type, size) | Retained until you `DELETE` | Removed alongside the bytes |
3368
- | Message body & parts | Retained per message-retention policy | Retained per message-retention policy |
3684
+ | Message body & parts | Retained per message-retention policy | Retained per message-retention policy — unless the line also has **ephemeral messages** enabled (see the Messages page), in which case the message and its parts are deleted 24 hours after creation |
3369
3685
  | Audit log of deletions | Retained per platform retention policy | Retained per platform retention policy |
3370
3686
 
3371
3687
  **In transit:** TLS 1.2+ everywhere. **At rest:** AES-256 (server-side encryption).
@@ -3413,6 +3729,20 @@ class AsyncLinqAPIV3WithStreamedResponse:
3413
3729
 
3414
3730
  return AsyncPhoneNumbersResourceWithStreamingResponse(self._client.phone_numbers)
3415
3731
 
3732
+ @cached_property
3733
+ def available_number(self) -> available_number.AsyncAvailableNumberResourceWithStreamingResponse:
3734
+ """Phone Numbers represent the phone numbers assigned to your partner account.
3735
+
3736
+ Use the list phone numbers endpoint to discover which phone numbers are available
3737
+ for sending messages.
3738
+
3739
+ When creating chats, listing chats, or sending a voice memo, use one of your assigned phone numbers
3740
+ in the `from` field.
3741
+ """
3742
+ from .resources.available_number import AsyncAvailableNumberResourceWithStreamingResponse
3743
+
3744
+ return AsyncAvailableNumberResourceWithStreamingResponse(self._client.available_number)
3745
+
3416
3746
  @cached_property
3417
3747
  def webhook_events(self) -> webhook_events.AsyncWebhookEventsResourceWithStreamingResponse:
3418
3748
  """
@@ -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.14.0" # x-release-please-version
4
+ __version__ = "0.15.1" # x-release-please-version
@@ -65,6 +65,14 @@ from .webhook_events import (
65
65
  WebhookEventsResourceWithStreamingResponse,
66
66
  AsyncWebhookEventsResourceWithStreamingResponse,
67
67
  )
68
+ from .available_number import (
69
+ AvailableNumberResource,
70
+ AsyncAvailableNumberResource,
71
+ AvailableNumberResourceWithRawResponse,
72
+ AsyncAvailableNumberResourceWithRawResponse,
73
+ AvailableNumberResourceWithStreamingResponse,
74
+ AsyncAvailableNumberResourceWithStreamingResponse,
75
+ )
68
76
  from .webhook_subscriptions import (
69
77
  WebhookSubscriptionsResource,
70
78
  AsyncWebhookSubscriptionsResource,
@@ -105,6 +113,12 @@ __all__ = [
105
113
  "AsyncPhoneNumbersResourceWithRawResponse",
106
114
  "PhoneNumbersResourceWithStreamingResponse",
107
115
  "AsyncPhoneNumbersResourceWithStreamingResponse",
116
+ "AvailableNumberResource",
117
+ "AsyncAvailableNumberResource",
118
+ "AvailableNumberResourceWithRawResponse",
119
+ "AsyncAvailableNumberResourceWithRawResponse",
120
+ "AvailableNumberResourceWithStreamingResponse",
121
+ "AsyncAvailableNumberResourceWithStreamingResponse",
108
122
  "WebhookEventsResource",
109
123
  "AsyncWebhookEventsResource",
110
124
  "WebhookEventsResourceWithRawResponse",