linq-python 0.36.0__tar.gz → 0.37.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 (268) hide show
  1. linq_python-0.37.0/.release-please-manifest.json +3 -0
  2. {linq_python-0.36.0 → linq_python-0.37.0}/CHANGELOG.md +14 -0
  3. {linq_python-0.36.0 → linq_python-0.37.0}/PKG-INFO +1 -1
  4. {linq_python-0.36.0 → linq_python-0.37.0}/pyproject.toml +1 -1
  5. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_client.py +234 -0
  6. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_version.py +1 -1
  7. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/payment_requests.py +88 -0
  8. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_request.py +21 -4
  9. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_request_create_params.py +26 -1
  10. linq_python-0.37.0/src/linq/types/schemas_text_part_response.py +36 -0
  11. linq_python-0.37.0/src/linq/types/shared/text_part_response.py +40 -0
  12. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/text_part_param.py +1 -1
  13. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_payment_requests.py +10 -0
  14. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_webhooks.py +2 -2
  15. {linq_python-0.36.0 → linq_python-0.37.0}/uv.lock +1 -1
  16. linq_python-0.36.0/.release-please-manifest.json +0 -3
  17. linq_python-0.36.0/src/linq/types/schemas_text_part_response.py +0 -76
  18. linq_python-0.36.0/src/linq/types/shared/text_part_response.py +0 -80
  19. {linq_python-0.36.0 → linq_python-0.37.0}/.gitignore +0 -0
  20. {linq_python-0.36.0 → linq_python-0.37.0}/CONTRIBUTING.md +0 -0
  21. {linq_python-0.36.0 → linq_python-0.37.0}/LICENSE +0 -0
  22. {linq_python-0.36.0 → linq_python-0.37.0}/README.md +0 -0
  23. {linq_python-0.36.0 → linq_python-0.37.0}/SECURITY.md +0 -0
  24. {linq_python-0.36.0 → linq_python-0.37.0}/api.md +0 -0
  25. {linq_python-0.36.0 → linq_python-0.37.0}/bin/check-release-environment +0 -0
  26. {linq_python-0.36.0 → linq_python-0.37.0}/bin/publish-pypi +0 -0
  27. {linq_python-0.36.0 → linq_python-0.37.0}/examples/.keep +0 -0
  28. {linq_python-0.36.0 → linq_python-0.37.0}/release-please-config.json +0 -0
  29. {linq_python-0.36.0 → linq_python-0.37.0}/requirements-dev.lock +0 -0
  30. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/__init__.py +0 -0
  31. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_base_client.py +0 -0
  32. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_compat.py +0 -0
  33. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_constants.py +0 -0
  34. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_exceptions.py +0 -0
  35. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_files.py +0 -0
  36. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_models.py +0 -0
  37. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_qs.py +0 -0
  38. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_resource.py +0 -0
  39. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_response.py +0 -0
  40. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_streaming.py +0 -0
  41. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_types.py +0 -0
  42. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/__init__.py +0 -0
  43. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_compat.py +0 -0
  44. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_datetime_parse.py +0 -0
  45. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_json.py +0 -0
  46. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_logs.py +0 -0
  47. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_path.py +0 -0
  48. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_proxy.py +0 -0
  49. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_reflection.py +0 -0
  50. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_resources_proxy.py +0 -0
  51. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_streams.py +0 -0
  52. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_sync.py +0 -0
  53. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_transform.py +0 -0
  54. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_typing.py +0 -0
  55. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/_utils/_utils.py +0 -0
  56. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/lib/.keep +0 -0
  57. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/pagination.py +0 -0
  58. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/py.typed +0 -0
  59. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/__init__.py +0 -0
  60. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/attachments.py +0 -0
  61. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/available_number.py +0 -0
  62. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/blocked_handles.py +0 -0
  63. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/capability.py +0 -0
  64. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/chats/__init__.py +0 -0
  65. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/chats/background.py +0 -0
  66. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/chats/chats.py +0 -0
  67. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/chats/location.py +0 -0
  68. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/chats/messages.py +0 -0
  69. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/chats/participants.py +0 -0
  70. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/chats/polls.py +0 -0
  71. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/chats/typing.py +0 -0
  72. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/contact_card.py +0 -0
  73. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/experiences.py +0 -0
  74. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/messages/__init__.py +0 -0
  75. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/messages/messages.py +0 -0
  76. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/messages/poll.py +0 -0
  77. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/payment_handles.py +0 -0
  78. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/payment_providers.py +0 -0
  79. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/payments.py +0 -0
  80. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/phone_numbers.py +0 -0
  81. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/phonenumbers.py +0 -0
  82. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/webhook_events.py +0 -0
  83. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/webhook_subscriptions.py +0 -0
  84. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/resources/webhooks.py +0 -0
  85. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/__init__.py +0 -0
  86. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/attachment_create_params.py +0 -0
  87. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/attachment_create_response.py +0 -0
  88. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/attachment_retrieve_response.py +0 -0
  89. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/available_number_retrieve_params.py +0 -0
  90. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/available_number_retrieve_response.py +0 -0
  91. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/blocked_handle_block_params.py +0 -0
  92. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/blocked_handle_block_response.py +0 -0
  93. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/blocked_handle_entry.py +0 -0
  94. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/blocked_handle_list_response.py +0 -0
  95. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/blocked_handle_unblock_params.py +0 -0
  96. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/capability_check_RCS_params.py +0 -0
  97. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/capability_check_i_message_params.py +0 -0
  98. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat.py +0 -0
  99. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_background_update_failed_webhook_event.py +0 -0
  100. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_background_updated_webhook_event.py +0 -0
  101. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_create_params.py +0 -0
  102. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_create_response.py +0 -0
  103. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_created_webhook_event.py +0 -0
  104. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_group_icon_update_failed_webhook_event.py +0 -0
  105. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_group_icon_updated_webhook_event.py +0 -0
  106. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_group_name_update_failed_webhook_event.py +0 -0
  107. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_group_name_updated_webhook_event.py +0 -0
  108. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_leave_chat_response.py +0 -0
  109. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_list_chats_params.py +0 -0
  110. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_send_voicememo_params.py +0 -0
  111. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_send_voicememo_response.py +0 -0
  112. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_typing_indicator_started_webhook_event.py +0 -0
  113. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_typing_indicator_stopped_webhook_event.py +0 -0
  114. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_update_params.py +0 -0
  115. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chat_update_response.py +0 -0
  116. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/__init__.py +0 -0
  117. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/background_set_params.py +0 -0
  118. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/get_chat_location_response.py +0 -0
  119. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/location_request_response.py +0 -0
  120. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/message_list_params.py +0 -0
  121. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/message_send_params.py +0 -0
  122. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/message_send_response.py +0 -0
  123. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/participant_add_params.py +0 -0
  124. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/participant_add_response.py +0 -0
  125. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/participant_remove_params.py +0 -0
  126. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/participant_remove_response.py +0 -0
  127. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/poll.py +0 -0
  128. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/poll_create_params.py +0 -0
  129. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/poll_envelope.py +0 -0
  130. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/chats/sent_message.py +0 -0
  131. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/contact_card_create_params.py +0 -0
  132. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/contact_card_retrieve_params.py +0 -0
  133. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/contact_card_retrieve_response.py +0 -0
  134. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/contact_card_update_params.py +0 -0
  135. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/experience_list_response.py +0 -0
  136. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/experience_retrieve_response.py +0 -0
  137. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/handle_check_response.py +0 -0
  138. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/link_part_param.py +0 -0
  139. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/media_part_param.py +0 -0
  140. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message.py +0 -0
  141. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_add_reaction_params.py +0 -0
  142. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_add_reaction_response.py +0 -0
  143. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_content_param.py +0 -0
  144. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_create_params.py +0 -0
  145. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_create_response.py +0 -0
  146. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_delivered_webhook_event.py +0 -0
  147. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_edited_webhook_event.py +0 -0
  148. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_effect.py +0 -0
  149. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_effect_param.py +0 -0
  150. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_event_v2.py +0 -0
  151. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_failed_webhook_event.py +0 -0
  152. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_list_messages_thread_params.py +0 -0
  153. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_read_webhook_event.py +0 -0
  154. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_received_webhook_event.py +0 -0
  155. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_sent_webhook_event.py +0 -0
  156. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_update_app_card_params.py +0 -0
  157. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_update_app_card_response.py +0 -0
  158. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/message_update_params.py +0 -0
  159. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/messages/__init__.py +0 -0
  160. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/messages/poll_add_options_params.py +0 -0
  161. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/messages/poll_vote_params.py +0 -0
  162. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/participant_added_webhook_event.py +0 -0
  163. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/participant_removed_webhook_event.py +0 -0
  164. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment.py +0 -0
  165. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_create_params.py +0 -0
  166. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_credentials_response.py +0 -0
  167. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_handle_connection.py +0 -0
  168. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_handle_verify_params.py +0 -0
  169. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_provider.py +0 -0
  170. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_provider_connect_params.py +0 -0
  171. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_provider_connect_response.py +0 -0
  172. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_request_list_params.py +0 -0
  173. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/payment_request_list_response.py +0 -0
  174. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/phone_number_list_response.py +0 -0
  175. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/phone_number_status_updated_webhook_event.py +0 -0
  176. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/phone_number_update_params.py +0 -0
  177. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/phone_number_update_response.py +0 -0
  178. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/phonenumber_list_response.py +0 -0
  179. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/poll_delivered_webhook_event.py +0 -0
  180. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/poll_failed_webhook_event.py +0 -0
  181. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/poll_reaction_added_webhook_event.py +0 -0
  182. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/poll_read_webhook_event.py +0 -0
  183. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/poll_received_webhook_event.py +0 -0
  184. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/poll_sent_webhook_event.py +0 -0
  185. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/poll_updated_webhook_event.py +0 -0
  186. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/poll_vote_added_webhook_event.py +0 -0
  187. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/poll_vote_removed_webhook_event.py +0 -0
  188. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reaction_added_webhook_event.py +0 -0
  189. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reaction_event_base.py +0 -0
  190. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reaction_removed_webhook_event.py +0 -0
  191. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reply_to.py +0 -0
  192. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reply_to_param.py +0 -0
  193. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reputation_action_item.py +0 -0
  194. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reputation_audit.py +0 -0
  195. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reputation_audit_started.py +0 -0
  196. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reputation_driver.py +0 -0
  197. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reputation_driver_key.py +0 -0
  198. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reputation_evidence.py +0 -0
  199. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reputation_opt_out_chat.py +0 -0
  200. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reputation_report.py +0 -0
  201. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/reputation_unhealthy_chat.py +0 -0
  202. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/schemas_media_part_response.py +0 -0
  203. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/schemas_message_effect.py +0 -0
  204. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/set_contact_card.py +0 -0
  205. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared/__init__.py +0 -0
  206. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared/chat_handle.py +0 -0
  207. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared/link_part_response.py +0 -0
  208. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared/media_part_response.py +0 -0
  209. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared/reaction.py +0 -0
  210. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared/reaction_type.py +0 -0
  211. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared/service_type.py +0 -0
  212. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared/text_decoration.py +0 -0
  213. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared_params/__init__.py +0 -0
  214. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared_params/reaction_type.py +0 -0
  215. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared_params/service_type.py +0 -0
  216. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/shared_params/text_decoration.py +0 -0
  217. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/supported_content_type.py +0 -0
  218. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/unwrap_webhook_event.py +0 -0
  219. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/webhook_event_list_response.py +0 -0
  220. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/webhook_event_type.py +0 -0
  221. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/webhook_subscription.py +0 -0
  222. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/webhook_subscription_create_params.py +0 -0
  223. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/webhook_subscription_create_response.py +0 -0
  224. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/webhook_subscription_list_response.py +0 -0
  225. {linq_python-0.36.0 → linq_python-0.37.0}/src/linq/types/webhook_subscription_update_params.py +0 -0
  226. {linq_python-0.36.0 → linq_python-0.37.0}/tests/__init__.py +0 -0
  227. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/__init__.py +0 -0
  228. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/chats/__init__.py +0 -0
  229. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/chats/test_background.py +0 -0
  230. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/chats/test_location.py +0 -0
  231. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/chats/test_messages.py +0 -0
  232. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/chats/test_participants.py +0 -0
  233. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/chats/test_polls.py +0 -0
  234. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/chats/test_typing.py +0 -0
  235. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/messages/__init__.py +0 -0
  236. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/messages/test_poll.py +0 -0
  237. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_attachments.py +0 -0
  238. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_available_number.py +0 -0
  239. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_blocked_handles.py +0 -0
  240. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_capability.py +0 -0
  241. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_chats.py +0 -0
  242. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_contact_card.py +0 -0
  243. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_experiences.py +0 -0
  244. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_messages.py +0 -0
  245. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_payment_handles.py +0 -0
  246. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_payment_providers.py +0 -0
  247. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_payments.py +0 -0
  248. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_phone_numbers.py +0 -0
  249. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_phonenumbers.py +0 -0
  250. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_webhook_events.py +0 -0
  251. {linq_python-0.36.0 → linq_python-0.37.0}/tests/api_resources/test_webhook_subscriptions.py +0 -0
  252. {linq_python-0.36.0 → linq_python-0.37.0}/tests/conftest.py +0 -0
  253. {linq_python-0.36.0 → linq_python-0.37.0}/tests/sample_file.txt +0 -0
  254. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_client.py +0 -0
  255. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_extract_files.py +0 -0
  256. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_files.py +0 -0
  257. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_models.py +0 -0
  258. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_qs.py +0 -0
  259. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_required_args.py +0 -0
  260. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_response.py +0 -0
  261. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_streaming.py +0 -0
  262. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_transform.py +0 -0
  263. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_utils/test_datetime_parse.py +0 -0
  264. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_utils/test_json.py +0 -0
  265. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_utils/test_path.py +0 -0
  266. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_utils/test_proxy.py +0 -0
  267. {linq_python-0.36.0 → linq_python-0.37.0}/tests/test_utils/test_typing.py +0 -0
  268. {linq_python-0.36.0 → linq_python-0.37.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.37.0"
3
+ }
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.37.0](https://github.com/linq-team/linq-python/compare/v0.36.1...v0.37.0) (2026-08-28)
4
+
5
+
6
+ ### Features
7
+
8
+ * add discount support with coupons and promotion codes ([5427381](https://github.com/linq-team/linq-python/commit/5427381d5591b92d80cf169774f4bde887fcd28b))
9
+
10
+ ## [0.36.1](https://github.com/linq-team/linq-python/compare/v0.36.0...v0.36.1) (2026-08-28)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * simplify mention fields in text parts, remove mentions array ([1c73ab2](https://github.com/linq-team/linq-python/commit/1c73ab2292cce66ad1f59f8b097c7b98ca2ca421))
16
+
3
17
  ## [0.36.0](https://github.com/linq-team/linq-python/compare/v0.35.1...v0.36.0) (2026-08-28)
4
18
 
5
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: linq-python
3
- Version: 0.36.0
3
+ Version: 0.37.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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "linq-python"
3
- version = "0.36.0"
3
+ version = "0.37.0"
4
4
  description = "The official Python library for the linq-api-v3 API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -548,6 +548,45 @@ class LinqAPIV3(SyncAPIClient):
548
548
  the Customer and Subscription, so correlating in either direction is
549
549
  trivial. There are no renewal webhooks from Linq by design.
550
550
 
551
+ ### Discounts
552
+
553
+ Pass a `discount` with a **coupon** or **promotion code** from your
554
+ connected Stripe account to apply it to the subscription. Create either in
555
+ your Stripe Dashboard under Product catalog → Coupons; Linq only forwards
556
+ the id.
557
+
558
+ ```json
559
+ {
560
+ "mode": "subscription",
561
+ "price_id": "price_1QAbCdEfGhIjKlMn",
562
+ "discount": {
563
+ "coupon": "7fKCMvBh",
564
+ "label": "50% OFF FIRST MONTH"
565
+ }
566
+ }
567
+ ```
568
+
569
+ Stripe applies the coupon and prices the first invoice; the `amount` we
570
+ return is that invoice's amount due, so a `$50.00/month` price with a
571
+ 50%-off-first-month coupon comes back as `2500` and the recipient is
572
+ charged **$25.00** at checkout. A coupon that covers the whole first
573
+ invoice returns `amount: 0`; checkout shows $0.00 and collects the card for
574
+ the renewal rather than charging now. Renewals bill at the full price
575
+ automatically — how long a discount lasts is the coupon's `duration`,
576
+ enforced by Stripe on your account, and Linq never re-prices anything.
577
+
578
+ Use `promotion_code` instead of `coupon` to apply a promotion code by id
579
+ (`promo_...`, not the customer-facing code string); pass one or the other,
580
+ never both.
581
+
582
+ `label` is the customer-facing promotion name displayed at checkout instead
583
+ of the coupon or promotion code ID. The label is displayed exactly as
584
+ provided, so include important terms such as "FIRST MONTH" or
585
+ "FIRST 3 MONTHS" when applicable. These terms are not displayed elsewhere
586
+ on the checkout screen.
587
+
588
+ If omitted, Stripe uses the coupon's name as the promotion label.
589
+
551
590
  ### Free trials
552
591
 
553
592
  Add `trial_period_days` (or a fixed `trial_end` timestamp) to start the
@@ -1624,6 +1663,45 @@ class AsyncLinqAPIV3(AsyncAPIClient):
1624
1663
  the Customer and Subscription, so correlating in either direction is
1625
1664
  trivial. There are no renewal webhooks from Linq by design.
1626
1665
 
1666
+ ### Discounts
1667
+
1668
+ Pass a `discount` with a **coupon** or **promotion code** from your
1669
+ connected Stripe account to apply it to the subscription. Create either in
1670
+ your Stripe Dashboard under Product catalog → Coupons; Linq only forwards
1671
+ the id.
1672
+
1673
+ ```json
1674
+ {
1675
+ "mode": "subscription",
1676
+ "price_id": "price_1QAbCdEfGhIjKlMn",
1677
+ "discount": {
1678
+ "coupon": "7fKCMvBh",
1679
+ "label": "50% OFF FIRST MONTH"
1680
+ }
1681
+ }
1682
+ ```
1683
+
1684
+ Stripe applies the coupon and prices the first invoice; the `amount` we
1685
+ return is that invoice's amount due, so a `$50.00/month` price with a
1686
+ 50%-off-first-month coupon comes back as `2500` and the recipient is
1687
+ charged **$25.00** at checkout. A coupon that covers the whole first
1688
+ invoice returns `amount: 0`; checkout shows $0.00 and collects the card for
1689
+ the renewal rather than charging now. Renewals bill at the full price
1690
+ automatically — how long a discount lasts is the coupon's `duration`,
1691
+ enforced by Stripe on your account, and Linq never re-prices anything.
1692
+
1693
+ Use `promotion_code` instead of `coupon` to apply a promotion code by id
1694
+ (`promo_...`, not the customer-facing code string); pass one or the other,
1695
+ never both.
1696
+
1697
+ `label` is the customer-facing promotion name displayed at checkout instead
1698
+ of the coupon or promotion code ID. The label is displayed exactly as
1699
+ provided, so include important terms such as "FIRST MONTH" or
1700
+ "FIRST 3 MONTHS" when applicable. These terms are not displayed elsewhere
1701
+ on the checkout screen.
1702
+
1703
+ If omitted, Stripe uses the coupon's name as the promotion label.
1704
+
1627
1705
  ### Free trials
1628
1706
 
1629
1707
  Add `trial_period_days` (or a fixed `trial_end` timestamp) to start the
@@ -2634,6 +2712,45 @@ class LinqAPIV3WithRawResponse:
2634
2712
  the Customer and Subscription, so correlating in either direction is
2635
2713
  trivial. There are no renewal webhooks from Linq by design.
2636
2714
 
2715
+ ### Discounts
2716
+
2717
+ Pass a `discount` with a **coupon** or **promotion code** from your
2718
+ connected Stripe account to apply it to the subscription. Create either in
2719
+ your Stripe Dashboard under Product catalog → Coupons; Linq only forwards
2720
+ the id.
2721
+
2722
+ ```json
2723
+ {
2724
+ "mode": "subscription",
2725
+ "price_id": "price_1QAbCdEfGhIjKlMn",
2726
+ "discount": {
2727
+ "coupon": "7fKCMvBh",
2728
+ "label": "50% OFF FIRST MONTH"
2729
+ }
2730
+ }
2731
+ ```
2732
+
2733
+ Stripe applies the coupon and prices the first invoice; the `amount` we
2734
+ return is that invoice's amount due, so a `$50.00/month` price with a
2735
+ 50%-off-first-month coupon comes back as `2500` and the recipient is
2736
+ charged **$25.00** at checkout. A coupon that covers the whole first
2737
+ invoice returns `amount: 0`; checkout shows $0.00 and collects the card for
2738
+ the renewal rather than charging now. Renewals bill at the full price
2739
+ automatically — how long a discount lasts is the coupon's `duration`,
2740
+ enforced by Stripe on your account, and Linq never re-prices anything.
2741
+
2742
+ Use `promotion_code` instead of `coupon` to apply a promotion code by id
2743
+ (`promo_...`, not the customer-facing code string); pass one or the other,
2744
+ never both.
2745
+
2746
+ `label` is the customer-facing promotion name displayed at checkout instead
2747
+ of the coupon or promotion code ID. The label is displayed exactly as
2748
+ provided, so include important terms such as "FIRST MONTH" or
2749
+ "FIRST 3 MONTHS" when applicable. These terms are not displayed elsewhere
2750
+ on the checkout screen.
2751
+
2752
+ If omitted, Stripe uses the coupon's name as the promotion label.
2753
+
2637
2754
  ### Free trials
2638
2755
 
2639
2756
  Add `trial_period_days` (or a fixed `trial_end` timestamp) to start the
@@ -3516,6 +3633,45 @@ class AsyncLinqAPIV3WithRawResponse:
3516
3633
  the Customer and Subscription, so correlating in either direction is
3517
3634
  trivial. There are no renewal webhooks from Linq by design.
3518
3635
 
3636
+ ### Discounts
3637
+
3638
+ Pass a `discount` with a **coupon** or **promotion code** from your
3639
+ connected Stripe account to apply it to the subscription. Create either in
3640
+ your Stripe Dashboard under Product catalog → Coupons; Linq only forwards
3641
+ the id.
3642
+
3643
+ ```json
3644
+ {
3645
+ "mode": "subscription",
3646
+ "price_id": "price_1QAbCdEfGhIjKlMn",
3647
+ "discount": {
3648
+ "coupon": "7fKCMvBh",
3649
+ "label": "50% OFF FIRST MONTH"
3650
+ }
3651
+ }
3652
+ ```
3653
+
3654
+ Stripe applies the coupon and prices the first invoice; the `amount` we
3655
+ return is that invoice's amount due, so a `$50.00/month` price with a
3656
+ 50%-off-first-month coupon comes back as `2500` and the recipient is
3657
+ charged **$25.00** at checkout. A coupon that covers the whole first
3658
+ invoice returns `amount: 0`; checkout shows $0.00 and collects the card for
3659
+ the renewal rather than charging now. Renewals bill at the full price
3660
+ automatically — how long a discount lasts is the coupon's `duration`,
3661
+ enforced by Stripe on your account, and Linq never re-prices anything.
3662
+
3663
+ Use `promotion_code` instead of `coupon` to apply a promotion code by id
3664
+ (`promo_...`, not the customer-facing code string); pass one or the other,
3665
+ never both.
3666
+
3667
+ `label` is the customer-facing promotion name displayed at checkout instead
3668
+ of the coupon or promotion code ID. The label is displayed exactly as
3669
+ provided, so include important terms such as "FIRST MONTH" or
3670
+ "FIRST 3 MONTHS" when applicable. These terms are not displayed elsewhere
3671
+ on the checkout screen.
3672
+
3673
+ If omitted, Stripe uses the coupon's name as the promotion label.
3674
+
3519
3675
  ### Free trials
3520
3676
 
3521
3677
  Add `trial_period_days` (or a fixed `trial_end` timestamp) to start the
@@ -4398,6 +4554,45 @@ class LinqAPIV3WithStreamedResponse:
4398
4554
  the Customer and Subscription, so correlating in either direction is
4399
4555
  trivial. There are no renewal webhooks from Linq by design.
4400
4556
 
4557
+ ### Discounts
4558
+
4559
+ Pass a `discount` with a **coupon** or **promotion code** from your
4560
+ connected Stripe account to apply it to the subscription. Create either in
4561
+ your Stripe Dashboard under Product catalog → Coupons; Linq only forwards
4562
+ the id.
4563
+
4564
+ ```json
4565
+ {
4566
+ "mode": "subscription",
4567
+ "price_id": "price_1QAbCdEfGhIjKlMn",
4568
+ "discount": {
4569
+ "coupon": "7fKCMvBh",
4570
+ "label": "50% OFF FIRST MONTH"
4571
+ }
4572
+ }
4573
+ ```
4574
+
4575
+ Stripe applies the coupon and prices the first invoice; the `amount` we
4576
+ return is that invoice's amount due, so a `$50.00/month` price with a
4577
+ 50%-off-first-month coupon comes back as `2500` and the recipient is
4578
+ charged **$25.00** at checkout. A coupon that covers the whole first
4579
+ invoice returns `amount: 0`; checkout shows $0.00 and collects the card for
4580
+ the renewal rather than charging now. Renewals bill at the full price
4581
+ automatically — how long a discount lasts is the coupon's `duration`,
4582
+ enforced by Stripe on your account, and Linq never re-prices anything.
4583
+
4584
+ Use `promotion_code` instead of `coupon` to apply a promotion code by id
4585
+ (`promo_...`, not the customer-facing code string); pass one or the other,
4586
+ never both.
4587
+
4588
+ `label` is the customer-facing promotion name displayed at checkout instead
4589
+ of the coupon or promotion code ID. The label is displayed exactly as
4590
+ provided, so include important terms such as "FIRST MONTH" or
4591
+ "FIRST 3 MONTHS" when applicable. These terms are not displayed elsewhere
4592
+ on the checkout screen.
4593
+
4594
+ If omitted, Stripe uses the coupon's name as the promotion label.
4595
+
4401
4596
  ### Free trials
4402
4597
 
4403
4598
  Add `trial_period_days` (or a fixed `trial_end` timestamp) to start the
@@ -5280,6 +5475,45 @@ class AsyncLinqAPIV3WithStreamedResponse:
5280
5475
  the Customer and Subscription, so correlating in either direction is
5281
5476
  trivial. There are no renewal webhooks from Linq by design.
5282
5477
 
5478
+ ### Discounts
5479
+
5480
+ Pass a `discount` with a **coupon** or **promotion code** from your
5481
+ connected Stripe account to apply it to the subscription. Create either in
5482
+ your Stripe Dashboard under Product catalog → Coupons; Linq only forwards
5483
+ the id.
5484
+
5485
+ ```json
5486
+ {
5487
+ "mode": "subscription",
5488
+ "price_id": "price_1QAbCdEfGhIjKlMn",
5489
+ "discount": {
5490
+ "coupon": "7fKCMvBh",
5491
+ "label": "50% OFF FIRST MONTH"
5492
+ }
5493
+ }
5494
+ ```
5495
+
5496
+ Stripe applies the coupon and prices the first invoice; the `amount` we
5497
+ return is that invoice's amount due, so a `$50.00/month` price with a
5498
+ 50%-off-first-month coupon comes back as `2500` and the recipient is
5499
+ charged **$25.00** at checkout. A coupon that covers the whole first
5500
+ invoice returns `amount: 0`; checkout shows $0.00 and collects the card for
5501
+ the renewal rather than charging now. Renewals bill at the full price
5502
+ automatically — how long a discount lasts is the coupon's `duration`,
5503
+ enforced by Stripe on your account, and Linq never re-prices anything.
5504
+
5505
+ Use `promotion_code` instead of `coupon` to apply a promotion code by id
5506
+ (`promo_...`, not the customer-facing code string); pass one or the other,
5507
+ never both.
5508
+
5509
+ `label` is the customer-facing promotion name displayed at checkout instead
5510
+ of the coupon or promotion code ID. The label is displayed exactly as
5511
+ provided, so include important terms such as "FIRST MONTH" or
5512
+ "FIRST 3 MONTHS" when applicable. These terms are not displayed elsewhere
5513
+ on the checkout screen.
5514
+
5515
+ If omitted, Stripe uses the coupon's name as the promotion label.
5516
+
5283
5517
  ### Free trials
5284
5518
 
5285
5519
  Add `trial_period_days` (or a fixed `trial_end` timestamp) to start the
@@ -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.36.0" # x-release-please-version
4
+ __version__ = "0.37.0" # x-release-please-version
@@ -90,6 +90,45 @@ class PaymentRequestsResource(SyncAPIResource):
90
90
  the Customer and Subscription, so correlating in either direction is
91
91
  trivial. There are no renewal webhooks from Linq by design.
92
92
 
93
+ ### Discounts
94
+
95
+ Pass a `discount` with a **coupon** or **promotion code** from your
96
+ connected Stripe account to apply it to the subscription. Create either in
97
+ your Stripe Dashboard under Product catalog → Coupons; Linq only forwards
98
+ the id.
99
+
100
+ ```json
101
+ {
102
+ "mode": "subscription",
103
+ "price_id": "price_1QAbCdEfGhIjKlMn",
104
+ "discount": {
105
+ "coupon": "7fKCMvBh",
106
+ "label": "50% OFF FIRST MONTH"
107
+ }
108
+ }
109
+ ```
110
+
111
+ Stripe applies the coupon and prices the first invoice; the `amount` we
112
+ return is that invoice's amount due, so a `$50.00/month` price with a
113
+ 50%-off-first-month coupon comes back as `2500` and the recipient is
114
+ charged **$25.00** at checkout. A coupon that covers the whole first
115
+ invoice returns `amount: 0`; checkout shows $0.00 and collects the card for
116
+ the renewal rather than charging now. Renewals bill at the full price
117
+ automatically — how long a discount lasts is the coupon's `duration`,
118
+ enforced by Stripe on your account, and Linq never re-prices anything.
119
+
120
+ Use `promotion_code` instead of `coupon` to apply a promotion code by id
121
+ (`promo_...`, not the customer-facing code string); pass one or the other,
122
+ never both.
123
+
124
+ `label` is the customer-facing promotion name displayed at checkout instead
125
+ of the coupon or promotion code ID. The label is displayed exactly as
126
+ provided, so include important terms such as "FIRST MONTH" or
127
+ "FIRST 3 MONTHS" when applicable. These terms are not displayed elsewhere
128
+ on the checkout screen.
129
+
130
+ If omitted, Stripe uses the coupon's name as the promotion label.
131
+
93
132
  ### Free trials
94
133
 
95
134
  Add `trial_period_days` (or a fixed `trial_end` timestamp) to start the
@@ -203,6 +242,7 @@ class PaymentRequestsResource(SyncAPIResource):
203
242
  currency: str | Omit = omit,
204
243
  customer_id: str | Omit = omit,
205
244
  description: str | Omit = omit,
245
+ discount: payment_request_create_params.Discount | Omit = omit,
206
246
  from_: str | Omit = omit,
207
247
  metadata: Dict[str, str] | Omit = omit,
208
248
  mode: Literal["payment", "subscription"] | Omit = omit,
@@ -254,6 +294,9 @@ class PaymentRequestsResource(SyncAPIResource):
254
294
 
255
295
  description: Optional description shown to the recipient at checkout.
256
296
 
297
+ discount: Subscription mode only. The coupon or promotion code to apply to this
298
+ subscription payment. Currently, only accept one coupon or one promo code.
299
+
257
300
  from_: Required for `rail: natural`. The line the request is sent from, in E.164
258
301
  format. Must be a phone number your organization owns.
259
302
 
@@ -308,6 +351,7 @@ class PaymentRequestsResource(SyncAPIResource):
308
351
  "currency": currency,
309
352
  "customer_id": customer_id,
310
353
  "description": description,
354
+ "discount": discount,
311
355
  "from_": from_,
312
356
  "metadata": metadata,
313
357
  "mode": mode,
@@ -511,6 +555,45 @@ class AsyncPaymentRequestsResource(AsyncAPIResource):
511
555
  the Customer and Subscription, so correlating in either direction is
512
556
  trivial. There are no renewal webhooks from Linq by design.
513
557
 
558
+ ### Discounts
559
+
560
+ Pass a `discount` with a **coupon** or **promotion code** from your
561
+ connected Stripe account to apply it to the subscription. Create either in
562
+ your Stripe Dashboard under Product catalog → Coupons; Linq only forwards
563
+ the id.
564
+
565
+ ```json
566
+ {
567
+ "mode": "subscription",
568
+ "price_id": "price_1QAbCdEfGhIjKlMn",
569
+ "discount": {
570
+ "coupon": "7fKCMvBh",
571
+ "label": "50% OFF FIRST MONTH"
572
+ }
573
+ }
574
+ ```
575
+
576
+ Stripe applies the coupon and prices the first invoice; the `amount` we
577
+ return is that invoice's amount due, so a `$50.00/month` price with a
578
+ 50%-off-first-month coupon comes back as `2500` and the recipient is
579
+ charged **$25.00** at checkout. A coupon that covers the whole first
580
+ invoice returns `amount: 0`; checkout shows $0.00 and collects the card for
581
+ the renewal rather than charging now. Renewals bill at the full price
582
+ automatically — how long a discount lasts is the coupon's `duration`,
583
+ enforced by Stripe on your account, and Linq never re-prices anything.
584
+
585
+ Use `promotion_code` instead of `coupon` to apply a promotion code by id
586
+ (`promo_...`, not the customer-facing code string); pass one or the other,
587
+ never both.
588
+
589
+ `label` is the customer-facing promotion name displayed at checkout instead
590
+ of the coupon or promotion code ID. The label is displayed exactly as
591
+ provided, so include important terms such as "FIRST MONTH" or
592
+ "FIRST 3 MONTHS" when applicable. These terms are not displayed elsewhere
593
+ on the checkout screen.
594
+
595
+ If omitted, Stripe uses the coupon's name as the promotion label.
596
+
514
597
  ### Free trials
515
598
 
516
599
  Add `trial_period_days` (or a fixed `trial_end` timestamp) to start the
@@ -624,6 +707,7 @@ class AsyncPaymentRequestsResource(AsyncAPIResource):
624
707
  currency: str | Omit = omit,
625
708
  customer_id: str | Omit = omit,
626
709
  description: str | Omit = omit,
710
+ discount: payment_request_create_params.Discount | Omit = omit,
627
711
  from_: str | Omit = omit,
628
712
  metadata: Dict[str, str] | Omit = omit,
629
713
  mode: Literal["payment", "subscription"] | Omit = omit,
@@ -675,6 +759,9 @@ class AsyncPaymentRequestsResource(AsyncAPIResource):
675
759
 
676
760
  description: Optional description shown to the recipient at checkout.
677
761
 
762
+ discount: Subscription mode only. The coupon or promotion code to apply to this
763
+ subscription payment. Currently, only accept one coupon or one promo code.
764
+
678
765
  from_: Required for `rail: natural`. The line the request is sent from, in E.164
679
766
  format. Must be a phone number your organization owns.
680
767
 
@@ -729,6 +816,7 @@ class AsyncPaymentRequestsResource(AsyncAPIResource):
729
816
  "currency": currency,
730
817
  "customer_id": customer_id,
731
818
  "description": description,
819
+ "discount": discount,
732
820
  "from_": from_,
733
821
  "metadata": metadata,
734
822
  "mode": mode,
@@ -6,7 +6,20 @@ from typing_extensions import Literal
6
6
 
7
7
  from .._models import BaseModel
8
8
 
9
- __all__ = ["PaymentRequest", "Natural", "Stripe"]
9
+ __all__ = ["PaymentRequest", "Discount", "Natural", "Stripe"]
10
+
11
+
12
+ class Discount(BaseModel):
13
+ """Subscription mode — the discount applied, as Stripe applied it."""
14
+
15
+ coupon: Optional[str] = None
16
+ """The ID of the coupon applied."""
17
+
18
+ label: Optional[str] = None
19
+ """The customer-facing discount description shown at checkout."""
20
+
21
+ promotion_code: Optional[str] = None
22
+ """The ID of the promotion code applied, if you passed one."""
10
23
 
11
24
 
12
25
  class Natural(BaseModel):
@@ -47,10 +60,11 @@ class PaymentRequest(BaseModel):
47
60
  """Unique identifier of the payment request."""
48
61
 
49
62
  amount: int
50
- """Amount in the currency's minor units.
63
+ """What the recipient is charged at checkout, in the currency's minor units.
51
64
 
52
- In `subscription` mode this is the recurring amount (price × quantity) the
53
- recipient pays per interval, starting at checkout.
65
+ In `subscription` mode this is the first invoice's amount due all items after
66
+ any discounts are applied so a discount that covers the whole invoice returns
67
+ `0` and checkout shows $0.00.
54
68
  """
55
69
 
56
70
  checkout_url: str
@@ -74,6 +88,9 @@ class PaymentRequest(BaseModel):
74
88
 
75
89
  description: Optional[str] = None
76
90
 
91
+ discount: Optional[Discount] = None
92
+ """Subscription mode — the discount applied, as Stripe applied it."""
93
+
77
94
  expires_at: Optional[datetime] = None
78
95
  """When an unpaid request auto-expires."""
79
96
 
@@ -8,7 +8,7 @@ from typing_extensions import Literal, Annotated, TypedDict
8
8
 
9
9
  from .._utils import PropertyInfo
10
10
 
11
- __all__ = ["PaymentRequestCreateParams"]
11
+ __all__ = ["PaymentRequestCreateParams", "Discount"]
12
12
 
13
13
 
14
14
  class PaymentRequestCreateParams(TypedDict, total=False):
@@ -39,6 +39,13 @@ class PaymentRequestCreateParams(TypedDict, total=False):
39
39
  description: str
40
40
  """Optional description shown to the recipient at checkout."""
41
41
 
42
+ discount: Discount
43
+ """Subscription mode only.
44
+
45
+ The coupon or promotion code to apply to this subscription payment. Currently,
46
+ only accept one coupon or one promo code.
47
+ """
48
+
42
49
  from_: Annotated[str, PropertyInfo(alias="from")]
43
50
  """Required for `rail: natural`.
44
51
 
@@ -102,3 +109,21 @@ class PaymentRequestCreateParams(TypedDict, total=False):
102
109
  """
103
110
 
104
111
  idempotency_key: Annotated[str, PropertyInfo(alias="Idempotency-Key")]
112
+
113
+
114
+ class Discount(TypedDict, total=False):
115
+ """Subscription mode only.
116
+
117
+ The coupon or promotion code to apply to
118
+ this subscription payment. Currently, only accept one coupon or one
119
+ promo code.
120
+ """
121
+
122
+ coupon: str
123
+ """The ID of the coupon to apply to this subscription."""
124
+
125
+ label: str
126
+ """Name of the coupon/promo code displayed to customers."""
127
+
128
+ promotion_code: str
129
+ """The ID of a promotion code to apply to this subscription."""
@@ -0,0 +1,36 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Optional
4
+ from typing_extensions import Literal
5
+
6
+ from .._models import BaseModel
7
+ from .shared.text_decoration import TextDecoration
8
+
9
+ __all__ = ["SchemasTextPartResponse"]
10
+
11
+
12
+ class SchemasTextPartResponse(BaseModel):
13
+ """A text message part"""
14
+
15
+ type: Literal["text"]
16
+ """Indicates this is a text message part"""
17
+
18
+ value: str
19
+ """The text content"""
20
+
21
+ mention: Optional[str] = None
22
+ """
23
+ Handle (E.164 phone number or Apple ID email) of the @mentioned chat
24
+ participant, as sent. `null` when the part carries no mention.
25
+ """
26
+
27
+ mention_range: Optional[List[int]] = None
28
+ """
29
+ Character range `[start, end)` in `value` highlighted as the mention, as sent.
30
+ `null` when the send omitted it (the whole `value` is highlighted) or the part
31
+ carries no mention. _Characters are measured as UTF-16 code units. Most
32
+ characters count as 1; some emoji count as 2._
33
+ """
34
+
35
+ text_decorations: Optional[List[TextDecoration]] = None
36
+ """Text decorations applied to character ranges in the value"""
@@ -0,0 +1,40 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Optional
4
+ from typing_extensions import Literal
5
+
6
+ from .reaction import Reaction
7
+ from ..._models import BaseModel
8
+ from .text_decoration import TextDecoration
9
+
10
+ __all__ = ["TextPartResponse"]
11
+
12
+
13
+ class TextPartResponse(BaseModel):
14
+ """A text message part"""
15
+
16
+ reactions: Optional[List[Reaction]] = None
17
+ """Reactions on this message part"""
18
+
19
+ type: Literal["text"]
20
+ """Indicates this is a text message part"""
21
+
22
+ value: str
23
+ """The text content"""
24
+
25
+ mention: Optional[str] = None
26
+ """
27
+ Handle (E.164 phone number or Apple ID email) of the @mentioned chat
28
+ participant, as sent. `null` when the part carries no mention.
29
+ """
30
+
31
+ mention_range: Optional[List[int]] = None
32
+ """
33
+ Character range `[start, end)` in `value` highlighted as the mention, as sent.
34
+ `null` when the send omitted it (the whole `value` is highlighted) or the part
35
+ carries no mention. _Characters are measured as UTF-16 code units. Most
36
+ characters count as 1; some emoji count as 2._
37
+ """
38
+
39
+ text_decorations: Optional[List[TextDecoration]] = None
40
+ """Text decorations applied to character ranges in the value"""
@@ -23,7 +23,7 @@ class TextPartParam(TypedDict, total=False):
23
23
  """
24
24
 
25
25
  mention: str
26
- """Mention a chat participant.
26
+ """@mention a chat participant.
27
27
 
28
28
  Group chats only — sending a mention to a direct chat is rejected with `409` /
29
29
  `2023`. The chat's service is not a constraint: a mention is accepted in any
@@ -35,6 +35,11 @@ class TestPaymentRequests:
35
35
  currency="usd",
36
36
  customer_id="cus_QAbCdEfGhIjKlMn",
37
37
  description="Coffee with Ava",
38
+ discount={
39
+ "coupon": "7fKCMvBh",
40
+ "label": "15% OFF FIRST 3 MONTHS",
41
+ "promotion_code": "promo_1QAbCdEfGhIjKlMn",
42
+ },
38
43
  from_="+12025550123",
39
44
  metadata={"order_id": "order_8675309"},
40
45
  mode="payment",
@@ -212,6 +217,11 @@ class TestAsyncPaymentRequests:
212
217
  currency="usd",
213
218
  customer_id="cus_QAbCdEfGhIjKlMn",
214
219
  description="Coffee with Ava",
220
+ discount={
221
+ "coupon": "7fKCMvBh",
222
+ "label": "15% OFF FIRST 3 MONTHS",
223
+ "promotion_code": "promo_1QAbCdEfGhIjKlMn",
224
+ },
215
225
  from_="+12025550123",
216
226
  metadata={"order_id": "order_8675309"},
217
227
  mode="payment",