paid-python 1.7.1__tar.gz → 1.8.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 (193) hide show
  1. {paid_python-1.7.1 → paid_python-1.8.0}/PKG-INFO +1 -1
  2. {paid_python-1.7.1 → paid_python-1.8.0}/pyproject.toml +1 -1
  3. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/__init__.py +78 -2
  4. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/checkouts/client.py +17 -4
  5. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/checkouts/raw_client.py +19 -8
  6. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/client.py +38 -0
  7. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/client_wrapper.py +2 -2
  8. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/customers/client.py +128 -0
  9. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/customers/raw_client.py +266 -0
  10. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/errors/__init__.py +3 -1
  11. paid_python-1.8.0/src/paid/errors/conflict_error.py +11 -0
  12. paid_python-1.8.0/src/paid/orders/__init__.py +37 -0
  13. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/orders/client.py +317 -0
  14. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/orders/raw_client.py +742 -92
  15. paid_python-1.8.0/src/paid/orders/types/__init__.py +38 -0
  16. paid_python-1.8.0/src/paid/orders/types/batch_seat_assignments_request_assignments_item.py +24 -0
  17. paid_python-1.8.0/src/paid/orders/types/list_order_seats_request_status.py +5 -0
  18. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/__init__.py +48 -0
  19. paid_python-1.8.0/src/paid/types/batch_seat_assignments_response.py +20 -0
  20. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/checkout.py +3 -0
  21. paid_python-1.8.0/src/paid/types/checkout_details.py +65 -0
  22. paid_python-1.8.0/src/paid/types/customer_user.py +38 -0
  23. paid_python-1.8.0/src/paid/types/customer_user_status.py +5 -0
  24. paid_python-1.8.0/src/paid/types/order_seat.py +36 -0
  25. paid_python-1.8.0/src/paid/types/order_seat_list_response.py +22 -0
  26. paid_python-1.8.0/src/paid/types/seat_assignee.py +23 -0
  27. paid_python-1.8.0/src/paid/types/seat_assignment_status.py +5 -0
  28. paid_python-1.8.0/src/paid/types/value_receipt_detail.py +64 -0
  29. paid_python-1.8.0/src/paid/types/value_receipt_list_response.py +21 -0
  30. paid_python-1.8.0/src/paid/types/value_receipt_summary.py +55 -0
  31. paid_python-1.8.0/src/paid/types/webhook.py +34 -0
  32. paid_python-1.8.0/src/paid/types/webhook_delivery_status.py +5 -0
  33. paid_python-1.8.0/src/paid/types/webhook_list_response.py +20 -0
  34. paid_python-1.8.0/src/paid/types/webhook_name.py +18 -0
  35. paid_python-1.8.0/src/paid/types/webhook_test_response.py +19 -0
  36. paid_python-1.8.0/src/paid/value_receipts/client.py +373 -0
  37. paid_python-1.8.0/src/paid/value_receipts/raw_client.py +560 -0
  38. paid_python-1.8.0/src/paid/webhooks/__init__.py +37 -0
  39. paid_python-1.8.0/src/paid/webhooks/client.py +277 -0
  40. paid_python-1.8.0/src/paid/webhooks/raw_client.py +526 -0
  41. paid_python-1.8.0/src/paid/webhooks/types/__init__.py +38 -0
  42. paid_python-1.8.0/src/paid/webhooks/types/test_webhook_request_webhook_name.py +18 -0
  43. paid_python-1.8.0/src/paid/webhooks/types/update_webhook_request_webhook_name.py +18 -0
  44. {paid_python-1.7.1 → paid_python-1.8.0}/LICENSE +0 -0
  45. {paid_python-1.7.1 → paid_python-1.8.0}/README.md +0 -0
  46. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/checkouts/__init__.py +0 -0
  47. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/checkouts/types/__init__.py +0 -0
  48. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/checkouts/types/list_checkouts_request_status.py +0 -0
  49. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/contacts/__init__.py +0 -0
  50. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/contacts/client.py +0 -0
  51. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/contacts/raw_client.py +0 -0
  52. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/contacts/types/__init__.py +0 -0
  53. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/contacts/types/create_contact_request_roles_item.py +0 -0
  54. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/__init__.py +0 -0
  55. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/api_error.py +0 -0
  56. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/datetime_utils.py +0 -0
  57. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/file.py +0 -0
  58. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/force_multipart.py +0 -0
  59. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/http_client.py +0 -0
  60. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/http_response.py +0 -0
  61. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/http_sse/__init__.py +0 -0
  62. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/http_sse/_api.py +0 -0
  63. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/http_sse/_decoders.py +0 -0
  64. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/http_sse/_exceptions.py +0 -0
  65. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/http_sse/_models.py +0 -0
  66. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/jsonable_encoder.py +0 -0
  67. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/pydantic_utilities.py +0 -0
  68. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/query_encoder.py +0 -0
  69. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/remove_none_from_dict.py +0 -0
  70. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/request_options.py +0 -0
  71. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/core/serialization.py +0 -0
  72. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/credits/__init__.py +0 -0
  73. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/credits/client.py +0 -0
  74. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/credits/raw_client.py +0 -0
  75. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/customer_portals/__init__.py +0 -0
  76. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/customer_portals/client.py +0 -0
  77. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/customer_portals/raw_client.py +0 -0
  78. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/customers/__init__.py +0 -0
  79. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/environment.py +0 -0
  80. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/errors/bad_request_error.py +0 -0
  81. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/errors/forbidden_error.py +0 -0
  82. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/errors/internal_server_error.py +0 -0
  83. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/errors/not_found_error.py +0 -0
  84. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/invoices/__init__.py +0 -0
  85. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/invoices/client.py +0 -0
  86. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/invoices/raw_client.py +0 -0
  87. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/logger.py +0 -0
  88. {paid_python-1.7.1/src/paid/orders → paid_python-1.8.0/src/paid/products}/__init__.py +0 -0
  89. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/products/client.py +0 -0
  90. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/products/raw_client.py +0 -0
  91. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/py.typed +0 -0
  92. {paid_python-1.7.1/src/paid/products → paid_python-1.8.0/src/paid/signals}/__init__.py +0 -0
  93. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/signals/client.py +0 -0
  94. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/signals/raw_client.py +0 -0
  95. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/__init__.py +0 -0
  96. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/anthropic_patches/__init__.py +0 -0
  97. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/anthropic_patches/patches.py +0 -0
  98. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/autoinstrumentation.py +0 -0
  99. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/context_data.py +0 -0
  100. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/context_manager.py +0 -0
  101. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/distributed_tracing.py +0 -0
  102. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/gemini_patches/__init__.py +0 -0
  103. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/gemini_patches/patches.py +0 -0
  104. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/openai_agents_patches/__init__.py +0 -0
  105. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/openai_agents_patches/patches.py +0 -0
  106. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/openai_patches/__init__.py +0 -0
  107. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/openai_patches/patches.py +0 -0
  108. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/signal.py +0 -0
  109. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/tracing.py +0 -0
  110. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/__init__.py +0 -0
  111. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/anthropic/__init__.py +0 -0
  112. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/anthropic/anthropicWrapper.py +0 -0
  113. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/bedrock/__init__.py +0 -0
  114. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/bedrock/bedrockWrapper.py +0 -0
  115. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/gemini/__init__.py +0 -0
  116. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/gemini/geminiWrapper.py +0 -0
  117. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/langchain/__init__.py +0 -0
  118. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/langchain/paidLangChainCallback.py +0 -0
  119. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/mistral/__init__.py +0 -0
  120. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/mistral/mistralWrapper.py +0 -0
  121. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/openai/__init__.py +0 -0
  122. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/openai/openAiWrapper.py +0 -0
  123. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/openai_agents/__init__.py +0 -0
  124. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/openai_agents/openaiAgentsHook.py +0 -0
  125. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/tracing/wrappers/utils.py +0 -0
  126. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/attribution.py +0 -0
  127. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/bulk_signals_response.py +0 -0
  128. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/checkout_list_response.py +0 -0
  129. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/checkout_product.py +0 -0
  130. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/checkout_product_input.py +0 -0
  131. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/checkout_status.py +0 -0
  132. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/contact.py +0 -0
  133. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/contact_billing_address.py +0 -0
  134. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/contact_list_response.py +0 -0
  135. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/contact_roles_item.py +0 -0
  136. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request.py +0 -0
  137. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing.py +0 -0
  138. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_billing_frequency.py +0 -0
  139. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_billing_type.py +0 -0
  140. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_charge_type.py +0 -0
  141. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_credit_benefits_item.py +0 -0
  142. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_credit_benefits_item_allocation_cadence.py +0 -0
  143. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_credit_benefits_item_credit_grant_timing.py +0 -0
  144. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_credit_benefits_item_recipient.py +0 -0
  145. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_credit_benefits_item_rollover_duration_unit.py +0 -0
  146. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_price_points.py +0 -0
  147. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_price_points_tiers_item.py +0 -0
  148. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_price_points_tiers_item_tier_billing_type.py +0 -0
  149. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_pricing_model.py +0 -0
  150. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_attribute_request_pricing_signal_type.py +0 -0
  151. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/create_order_line_request.py +0 -0
  152. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/credit_balance.py +0 -0
  153. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/credit_balance_list_response.py +0 -0
  154. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/credit_balance_recipient.py +0 -0
  155. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/credit_currency.py +0 -0
  156. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/credit_currency_list_response.py +0 -0
  157. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/customer.py +0 -0
  158. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/customer_attribution.py +0 -0
  159. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/customer_billing_address.py +0 -0
  160. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/customer_by_external_id.py +0 -0
  161. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/customer_by_id.py +0 -0
  162. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/customer_creation_state.py +0 -0
  163. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/customer_list_response.py +0 -0
  164. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/customer_portal.py +0 -0
  165. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/customer_portal_status.py +0 -0
  166. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/empty_response.py +0 -0
  167. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/error_response.py +0 -0
  168. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/invoice.py +0 -0
  169. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/invoice_line.py +0 -0
  170. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/invoice_line_payment_status.py +0 -0
  171. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/invoice_lines_response.py +0 -0
  172. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/invoice_list_response.py +0 -0
  173. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/invoice_payment_status.py +0 -0
  174. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/invoice_source.py +0 -0
  175. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/invoice_status.py +0 -0
  176. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/invoice_tax_status.py +0 -0
  177. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/order.py +0 -0
  178. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/order_creation_state.py +0 -0
  179. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/order_line.py +0 -0
  180. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/order_lines_response.py +0 -0
  181. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/order_list_response.py +0 -0
  182. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/pagination.py +0 -0
  183. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/product.py +0 -0
  184. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/product_by_external_id.py +0 -0
  185. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/product_by_id.py +0 -0
  186. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/product_list_response.py +0 -0
  187. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/signal.py +0 -0
  188. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/update_contact_request.py +0 -0
  189. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/update_contact_request_roles_item.py +0 -0
  190. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/update_customer_request.py +0 -0
  191. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/types/update_product_request.py +0 -0
  192. {paid_python-1.7.1/src/paid/signals → paid_python-1.8.0/src/paid/value_receipts}/__init__.py +0 -0
  193. {paid_python-1.7.1 → paid_python-1.8.0}/src/paid/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: paid-python
3
- Version: 1.7.1
3
+ Version: 1.8.0
4
4
  Summary:
5
5
  Requires-Python: >=3.10,<3.14
6
6
  Classifier: Intended Audience :: Developers
@@ -4,7 +4,7 @@ dynamic = ["version"]
4
4
 
5
5
  [tool.poetry]
6
6
  name = "paid-python"
7
- version = "1.7.1"
7
+ version = "1.8.0"
8
8
  description = ""
9
9
  readme = "README.md"
10
10
  authors = []
@@ -8,8 +8,10 @@ from importlib import import_module
8
8
  if typing.TYPE_CHECKING:
9
9
  from .types import (
10
10
  Attribution,
11
+ BatchSeatAssignmentsResponse,
11
12
  BulkSignalsResponse,
12
13
  Checkout,
14
+ CheckoutDetails,
13
15
  CheckoutListResponse,
14
16
  CheckoutProduct,
15
17
  CheckoutProductInput,
@@ -48,6 +50,8 @@ if typing.TYPE_CHECKING:
48
50
  CustomerListResponse,
49
51
  CustomerPortal,
50
52
  CustomerPortalStatus,
53
+ CustomerUser,
54
+ CustomerUserStatus,
51
55
  EmptyResponse,
52
56
  ErrorResponse,
53
57
  Invoice,
@@ -64,34 +68,64 @@ if typing.TYPE_CHECKING:
64
68
  OrderLine,
65
69
  OrderLinesResponse,
66
70
  OrderListResponse,
71
+ OrderSeat,
72
+ OrderSeatListResponse,
67
73
  Pagination,
68
74
  Product,
69
75
  ProductByExternalId,
70
76
  ProductById,
71
77
  ProductListResponse,
78
+ SeatAssignee,
79
+ SeatAssignmentStatus,
72
80
  Signal,
73
81
  UpdateContactRequest,
74
82
  UpdateContactRequestRolesItem,
75
83
  UpdateCustomerRequest,
76
84
  UpdateProductRequest,
85
+ ValueReceiptDetail,
86
+ ValueReceiptListResponse,
87
+ ValueReceiptSummary,
88
+ Webhook,
89
+ WebhookDeliveryStatus,
90
+ WebhookListResponse,
91
+ WebhookName,
92
+ WebhookTestResponse,
93
+ )
94
+ from .errors import BadRequestError, ConflictError, ForbiddenError, InternalServerError, NotFoundError
95
+ from . import (
96
+ checkouts,
97
+ contacts,
98
+ credits,
99
+ customer_portals,
100
+ customers,
101
+ invoices,
102
+ orders,
103
+ products,
104
+ signals,
105
+ value_receipts,
106
+ webhooks,
77
107
  )
78
- from .errors import BadRequestError, ForbiddenError, InternalServerError, NotFoundError
79
- from . import checkouts, contacts, credits, customer_portals, customers, invoices, orders, products, signals
80
108
  from .checkouts import ListCheckoutsRequestStatus
81
109
  from .client import AsyncPaid, Paid
82
110
  from .contacts import CreateContactRequestRolesItem
83
111
  from .environment import PaidEnvironment
112
+ from .orders import BatchSeatAssignmentsRequestAssignmentsItem, ListOrderSeatsRequestStatus
84
113
  from .version import __version__
114
+ from .webhooks import TestWebhookRequestWebhookName, UpdateWebhookRequestWebhookName
85
115
  _dynamic_imports: typing.Dict[str, str] = {
86
116
  "AsyncPaid": ".client",
87
117
  "Attribution": ".types",
88
118
  "BadRequestError": ".errors",
119
+ "BatchSeatAssignmentsRequestAssignmentsItem": ".orders",
120
+ "BatchSeatAssignmentsResponse": ".types",
89
121
  "BulkSignalsResponse": ".types",
90
122
  "Checkout": ".types",
123
+ "CheckoutDetails": ".types",
91
124
  "CheckoutListResponse": ".types",
92
125
  "CheckoutProduct": ".types",
93
126
  "CheckoutProductInput": ".types",
94
127
  "CheckoutStatus": ".types",
128
+ "ConflictError": ".errors",
95
129
  "Contact": ".types",
96
130
  "ContactBillingAddress": ".types",
97
131
  "ContactListResponse": ".types",
@@ -127,6 +161,8 @@ _dynamic_imports: typing.Dict[str, str] = {
127
161
  "CustomerListResponse": ".types",
128
162
  "CustomerPortal": ".types",
129
163
  "CustomerPortalStatus": ".types",
164
+ "CustomerUser": ".types",
165
+ "CustomerUserStatus": ".types",
130
166
  "EmptyResponse": ".types",
131
167
  "ErrorResponse": ".types",
132
168
  "ForbiddenError": ".errors",
@@ -141,12 +177,15 @@ _dynamic_imports: typing.Dict[str, str] = {
141
177
  "InvoiceStatus": ".types",
142
178
  "InvoiceTaxStatus": ".types",
143
179
  "ListCheckoutsRequestStatus": ".checkouts",
180
+ "ListOrderSeatsRequestStatus": ".orders",
144
181
  "NotFoundError": ".errors",
145
182
  "Order": ".types",
146
183
  "OrderCreationState": ".types",
147
184
  "OrderLine": ".types",
148
185
  "OrderLinesResponse": ".types",
149
186
  "OrderListResponse": ".types",
187
+ "OrderSeat": ".types",
188
+ "OrderSeatListResponse": ".types",
150
189
  "Pagination": ".types",
151
190
  "Paid": ".client",
152
191
  "PaidEnvironment": ".environment",
@@ -154,11 +193,23 @@ _dynamic_imports: typing.Dict[str, str] = {
154
193
  "ProductByExternalId": ".types",
155
194
  "ProductById": ".types",
156
195
  "ProductListResponse": ".types",
196
+ "SeatAssignee": ".types",
197
+ "SeatAssignmentStatus": ".types",
157
198
  "Signal": ".types",
199
+ "TestWebhookRequestWebhookName": ".webhooks",
158
200
  "UpdateContactRequest": ".types",
159
201
  "UpdateContactRequestRolesItem": ".types",
160
202
  "UpdateCustomerRequest": ".types",
161
203
  "UpdateProductRequest": ".types",
204
+ "UpdateWebhookRequestWebhookName": ".webhooks",
205
+ "ValueReceiptDetail": ".types",
206
+ "ValueReceiptListResponse": ".types",
207
+ "ValueReceiptSummary": ".types",
208
+ "Webhook": ".types",
209
+ "WebhookDeliveryStatus": ".types",
210
+ "WebhookListResponse": ".types",
211
+ "WebhookName": ".types",
212
+ "WebhookTestResponse": ".types",
162
213
  "__version__": ".version",
163
214
  "checkouts": ".checkouts",
164
215
  "contacts": ".contacts",
@@ -169,6 +220,8 @@ _dynamic_imports: typing.Dict[str, str] = {
169
220
  "orders": ".orders",
170
221
  "products": ".products",
171
222
  "signals": ".signals",
223
+ "value_receipts": ".value_receipts",
224
+ "webhooks": ".webhooks",
172
225
  }
173
226
 
174
227
 
@@ -197,12 +250,16 @@ __all__ = [
197
250
  "AsyncPaid",
198
251
  "Attribution",
199
252
  "BadRequestError",
253
+ "BatchSeatAssignmentsRequestAssignmentsItem",
254
+ "BatchSeatAssignmentsResponse",
200
255
  "BulkSignalsResponse",
201
256
  "Checkout",
257
+ "CheckoutDetails",
202
258
  "CheckoutListResponse",
203
259
  "CheckoutProduct",
204
260
  "CheckoutProductInput",
205
261
  "CheckoutStatus",
262
+ "ConflictError",
206
263
  "Contact",
207
264
  "ContactBillingAddress",
208
265
  "ContactListResponse",
@@ -238,6 +295,8 @@ __all__ = [
238
295
  "CustomerListResponse",
239
296
  "CustomerPortal",
240
297
  "CustomerPortalStatus",
298
+ "CustomerUser",
299
+ "CustomerUserStatus",
241
300
  "EmptyResponse",
242
301
  "ErrorResponse",
243
302
  "ForbiddenError",
@@ -252,12 +311,15 @@ __all__ = [
252
311
  "InvoiceStatus",
253
312
  "InvoiceTaxStatus",
254
313
  "ListCheckoutsRequestStatus",
314
+ "ListOrderSeatsRequestStatus",
255
315
  "NotFoundError",
256
316
  "Order",
257
317
  "OrderCreationState",
258
318
  "OrderLine",
259
319
  "OrderLinesResponse",
260
320
  "OrderListResponse",
321
+ "OrderSeat",
322
+ "OrderSeatListResponse",
261
323
  "Pagination",
262
324
  "Paid",
263
325
  "PaidEnvironment",
@@ -265,11 +327,23 @@ __all__ = [
265
327
  "ProductByExternalId",
266
328
  "ProductById",
267
329
  "ProductListResponse",
330
+ "SeatAssignee",
331
+ "SeatAssignmentStatus",
268
332
  "Signal",
333
+ "TestWebhookRequestWebhookName",
269
334
  "UpdateContactRequest",
270
335
  "UpdateContactRequestRolesItem",
271
336
  "UpdateCustomerRequest",
272
337
  "UpdateProductRequest",
338
+ "UpdateWebhookRequestWebhookName",
339
+ "ValueReceiptDetail",
340
+ "ValueReceiptListResponse",
341
+ "ValueReceiptSummary",
342
+ "Webhook",
343
+ "WebhookDeliveryStatus",
344
+ "WebhookListResponse",
345
+ "WebhookName",
346
+ "WebhookTestResponse",
273
347
  "__version__",
274
348
  "checkouts",
275
349
  "contacts",
@@ -280,4 +354,6 @@ __all__ = [
280
354
  "orders",
281
355
  "products",
282
356
  "signals",
357
+ "value_receipts",
358
+ "webhooks",
283
359
  ]
@@ -6,6 +6,7 @@ import typing
6
6
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
7
7
  from ..core.request_options import RequestOptions
8
8
  from ..types.checkout import Checkout
9
+ from ..types.checkout_details import CheckoutDetails
9
10
  from ..types.checkout_list_response import CheckoutListResponse
10
11
  from ..types.checkout_product_input import CheckoutProductInput
11
12
  from ..types.empty_response import EmptyResponse
@@ -85,6 +86,7 @@ class CheckoutsClient:
85
86
  collect_address: typing.Optional[bool] = OMIT,
86
87
  collect_phone: typing.Optional[bool] = OMIT,
87
88
  single_use: typing.Optional[bool] = OMIT,
89
+ currency: typing.Optional[str] = OMIT,
88
90
  request_options: typing.Optional[RequestOptions] = None,
89
91
  ) -> Checkout:
90
92
  """
@@ -113,6 +115,9 @@ class CheckoutsClient:
113
115
 
114
116
  single_use : typing.Optional[bool]
115
117
 
118
+ currency : typing.Optional[str]
119
+ Lock checkout to a specific currency. Omit to allow all currencies supported by the selected plans.
120
+
116
121
  request_options : typing.Optional[RequestOptions]
117
122
  Request-specific configuration.
118
123
 
@@ -148,11 +153,12 @@ class CheckoutsClient:
148
153
  collect_address=collect_address,
149
154
  collect_phone=collect_phone,
150
155
  single_use=single_use,
156
+ currency=currency,
151
157
  request_options=request_options,
152
158
  )
153
159
  return _response.data
154
160
 
155
- def get_checkout(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Checkout:
161
+ def get_checkout(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> CheckoutDetails:
156
162
  """
157
163
  Get a checkout by ID
158
164
 
@@ -165,7 +171,7 @@ class CheckoutsClient:
165
171
 
166
172
  Returns
167
173
  -------
168
- Checkout
174
+ CheckoutDetails
169
175
  200
170
176
 
171
177
  Examples
@@ -290,6 +296,7 @@ class AsyncCheckoutsClient:
290
296
  collect_address: typing.Optional[bool] = OMIT,
291
297
  collect_phone: typing.Optional[bool] = OMIT,
292
298
  single_use: typing.Optional[bool] = OMIT,
299
+ currency: typing.Optional[str] = OMIT,
293
300
  request_options: typing.Optional[RequestOptions] = None,
294
301
  ) -> Checkout:
295
302
  """
@@ -318,6 +325,9 @@ class AsyncCheckoutsClient:
318
325
 
319
326
  single_use : typing.Optional[bool]
320
327
 
328
+ currency : typing.Optional[str]
329
+ Lock checkout to a specific currency. Omit to allow all currencies supported by the selected plans.
330
+
321
331
  request_options : typing.Optional[RequestOptions]
322
332
  Request-specific configuration.
323
333
 
@@ -361,11 +371,14 @@ class AsyncCheckoutsClient:
361
371
  collect_address=collect_address,
362
372
  collect_phone=collect_phone,
363
373
  single_use=single_use,
374
+ currency=currency,
364
375
  request_options=request_options,
365
376
  )
366
377
  return _response.data
367
378
 
368
- async def get_checkout(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Checkout:
379
+ async def get_checkout(
380
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
381
+ ) -> CheckoutDetails:
369
382
  """
370
383
  Get a checkout by ID
371
384
 
@@ -378,7 +391,7 @@ class AsyncCheckoutsClient:
378
391
 
379
392
  Returns
380
393
  -------
381
- Checkout
394
+ CheckoutDetails
382
395
  200
383
396
 
384
397
  Examples
@@ -16,6 +16,7 @@ from ..errors.forbidden_error import ForbiddenError
16
16
  from ..errors.internal_server_error import InternalServerError
17
17
  from ..errors.not_found_error import NotFoundError
18
18
  from ..types.checkout import Checkout
19
+ from ..types.checkout_details import CheckoutDetails
19
20
  from ..types.checkout_list_response import CheckoutListResponse
20
21
  from ..types.checkout_product_input import CheckoutProductInput
21
22
  from ..types.empty_response import EmptyResponse
@@ -128,6 +129,7 @@ class RawCheckoutsClient:
128
129
  collect_address: typing.Optional[bool] = OMIT,
129
130
  collect_phone: typing.Optional[bool] = OMIT,
130
131
  single_use: typing.Optional[bool] = OMIT,
132
+ currency: typing.Optional[str] = OMIT,
131
133
  request_options: typing.Optional[RequestOptions] = None,
132
134
  ) -> HttpResponse[Checkout]:
133
135
  """
@@ -156,6 +158,9 @@ class RawCheckoutsClient:
156
158
 
157
159
  single_use : typing.Optional[bool]
158
160
 
161
+ currency : typing.Optional[str]
162
+ Lock checkout to a specific currency. Omit to allow all currencies supported by the selected plans.
163
+
159
164
  request_options : typing.Optional[RequestOptions]
160
165
  Request-specific configuration.
161
166
 
@@ -180,6 +185,7 @@ class RawCheckoutsClient:
180
185
  "collectAddress": collect_address,
181
186
  "collectPhone": collect_phone,
182
187
  "singleUse": single_use,
188
+ "currency": currency,
183
189
  },
184
190
  headers={
185
191
  "content-type": "application/json",
@@ -248,7 +254,7 @@ class RawCheckoutsClient:
248
254
 
249
255
  def get_checkout(
250
256
  self, id: str, *, request_options: typing.Optional[RequestOptions] = None
251
- ) -> HttpResponse[Checkout]:
257
+ ) -> HttpResponse[CheckoutDetails]:
252
258
  """
253
259
  Get a checkout by ID
254
260
 
@@ -261,7 +267,7 @@ class RawCheckoutsClient:
261
267
 
262
268
  Returns
263
269
  -------
264
- HttpResponse[Checkout]
270
+ HttpResponse[CheckoutDetails]
265
271
  200
266
272
  """
267
273
  _response = self._client_wrapper.httpx_client.request(
@@ -272,9 +278,9 @@ class RawCheckoutsClient:
272
278
  try:
273
279
  if 200 <= _response.status_code < 300:
274
280
  _data = typing.cast(
275
- Checkout,
281
+ CheckoutDetails,
276
282
  parse_obj_as(
277
- type_=Checkout, # type: ignore
283
+ type_=CheckoutDetails, # type: ignore
278
284
  object_=_response.json(),
279
285
  ),
280
286
  )
@@ -491,6 +497,7 @@ class AsyncRawCheckoutsClient:
491
497
  collect_address: typing.Optional[bool] = OMIT,
492
498
  collect_phone: typing.Optional[bool] = OMIT,
493
499
  single_use: typing.Optional[bool] = OMIT,
500
+ currency: typing.Optional[str] = OMIT,
494
501
  request_options: typing.Optional[RequestOptions] = None,
495
502
  ) -> AsyncHttpResponse[Checkout]:
496
503
  """
@@ -519,6 +526,9 @@ class AsyncRawCheckoutsClient:
519
526
 
520
527
  single_use : typing.Optional[bool]
521
528
 
529
+ currency : typing.Optional[str]
530
+ Lock checkout to a specific currency. Omit to allow all currencies supported by the selected plans.
531
+
522
532
  request_options : typing.Optional[RequestOptions]
523
533
  Request-specific configuration.
524
534
 
@@ -543,6 +553,7 @@ class AsyncRawCheckoutsClient:
543
553
  "collectAddress": collect_address,
544
554
  "collectPhone": collect_phone,
545
555
  "singleUse": single_use,
556
+ "currency": currency,
546
557
  },
547
558
  headers={
548
559
  "content-type": "application/json",
@@ -611,7 +622,7 @@ class AsyncRawCheckoutsClient:
611
622
 
612
623
  async def get_checkout(
613
624
  self, id: str, *, request_options: typing.Optional[RequestOptions] = None
614
- ) -> AsyncHttpResponse[Checkout]:
625
+ ) -> AsyncHttpResponse[CheckoutDetails]:
615
626
  """
616
627
  Get a checkout by ID
617
628
 
@@ -624,7 +635,7 @@ class AsyncRawCheckoutsClient:
624
635
 
625
636
  Returns
626
637
  -------
627
- AsyncHttpResponse[Checkout]
638
+ AsyncHttpResponse[CheckoutDetails]
628
639
  200
629
640
  """
630
641
  _response = await self._client_wrapper.httpx_client.request(
@@ -635,9 +646,9 @@ class AsyncRawCheckoutsClient:
635
646
  try:
636
647
  if 200 <= _response.status_code < 300:
637
648
  _data = typing.cast(
638
- Checkout,
649
+ CheckoutDetails,
639
650
  parse_obj_as(
640
- type_=Checkout, # type: ignore
651
+ type_=CheckoutDetails, # type: ignore
641
652
  object_=_response.json(),
642
653
  ),
643
654
  )
@@ -18,6 +18,8 @@ if typing.TYPE_CHECKING:
18
18
  from .orders.client import AsyncOrdersClient, OrdersClient
19
19
  from .products.client import AsyncProductsClient, ProductsClient
20
20
  from .signals.client import AsyncSignalsClient, SignalsClient
21
+ from .value_receipts.client import AsyncValueReceiptsClient, ValueReceiptsClient
22
+ from .webhooks.client import AsyncWebhooksClient, WebhooksClient
21
23
 
22
24
 
23
25
  class Paid:
@@ -94,6 +96,8 @@ class Paid:
94
96
  self._credits: typing.Optional[CreditsClient] = None
95
97
  self._checkouts: typing.Optional[CheckoutsClient] = None
96
98
  self._customer_portals: typing.Optional[CustomerPortalsClient] = None
99
+ self._value_receipts: typing.Optional[ValueReceiptsClient] = None
100
+ self._webhooks: typing.Optional[WebhooksClient] = None
97
101
 
98
102
  @property
99
103
  def products(self):
@@ -167,6 +171,22 @@ class Paid:
167
171
  self._customer_portals = CustomerPortalsClient(client_wrapper=self._client_wrapper)
168
172
  return self._customer_portals
169
173
 
174
+ @property
175
+ def value_receipts(self):
176
+ if self._value_receipts is None:
177
+ from .value_receipts.client import ValueReceiptsClient # noqa: E402
178
+
179
+ self._value_receipts = ValueReceiptsClient(client_wrapper=self._client_wrapper)
180
+ return self._value_receipts
181
+
182
+ @property
183
+ def webhooks(self):
184
+ if self._webhooks is None:
185
+ from .webhooks.client import WebhooksClient # noqa: E402
186
+
187
+ self._webhooks = WebhooksClient(client_wrapper=self._client_wrapper)
188
+ return self._webhooks
189
+
170
190
 
171
191
  class AsyncPaid:
172
192
  """
@@ -242,6 +262,8 @@ class AsyncPaid:
242
262
  self._credits: typing.Optional[AsyncCreditsClient] = None
243
263
  self._checkouts: typing.Optional[AsyncCheckoutsClient] = None
244
264
  self._customer_portals: typing.Optional[AsyncCustomerPortalsClient] = None
265
+ self._value_receipts: typing.Optional[AsyncValueReceiptsClient] = None
266
+ self._webhooks: typing.Optional[AsyncWebhooksClient] = None
245
267
 
246
268
  @property
247
269
  def products(self):
@@ -315,6 +337,22 @@ class AsyncPaid:
315
337
  self._customer_portals = AsyncCustomerPortalsClient(client_wrapper=self._client_wrapper)
316
338
  return self._customer_portals
317
339
 
340
+ @property
341
+ def value_receipts(self):
342
+ if self._value_receipts is None:
343
+ from .value_receipts.client import AsyncValueReceiptsClient # noqa: E402
344
+
345
+ self._value_receipts = AsyncValueReceiptsClient(client_wrapper=self._client_wrapper)
346
+ return self._value_receipts
347
+
348
+ @property
349
+ def webhooks(self):
350
+ if self._webhooks is None:
351
+ from .webhooks.client import AsyncWebhooksClient # noqa: E402
352
+
353
+ self._webhooks = AsyncWebhooksClient(client_wrapper=self._client_wrapper)
354
+ return self._webhooks
355
+
318
356
 
319
357
  def _get_base_url(*, base_url: typing.Optional[str] = None, environment: PaidEnvironment) -> str:
320
358
  if base_url is not None:
@@ -24,12 +24,12 @@ class BaseClientWrapper:
24
24
  import platform
25
25
 
26
26
  headers: typing.Dict[str, str] = {
27
- "User-Agent": "paid-python/1.7.1",
27
+ "User-Agent": "paid-python/1.8.0",
28
28
  "X-Fern-Language": "Python",
29
29
  "X-Fern-Runtime": f"python/{platform.python_version()}",
30
30
  "X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}",
31
31
  "X-Fern-SDK-Name": "paid-python",
32
- "X-Fern-SDK-Version": "1.7.1",
32
+ "X-Fern-SDK-Version": "1.8.0",
33
33
  **(self.get_custom_headers() or {}),
34
34
  }
35
35
  headers["Authorization"] = f"Bearer {self._get_token()}"
@@ -10,6 +10,8 @@ from ..types.customer import Customer
10
10
  from ..types.customer_billing_address import CustomerBillingAddress
11
11
  from ..types.customer_creation_state import CustomerCreationState
12
12
  from ..types.customer_list_response import CustomerListResponse
13
+ from ..types.customer_user import CustomerUser
14
+ from ..types.customer_user_status import CustomerUserStatus
13
15
  from ..types.empty_response import EmptyResponse
14
16
  from .raw_client import AsyncRawCustomersClient, RawCustomersClient
15
17
 
@@ -502,6 +504,65 @@ class CustomersClient:
502
504
  )
503
505
  return _response.data
504
506
 
507
+ def upsert_customer_user_by_external_id(
508
+ self,
509
+ customer_external_id: str,
510
+ user_external_id: str,
511
+ *,
512
+ name: typing.Optional[str] = OMIT,
513
+ email: typing.Optional[str] = OMIT,
514
+ metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
515
+ status: typing.Optional[CustomerUserStatus] = OMIT,
516
+ request_options: typing.Optional[RequestOptions] = None,
517
+ ) -> CustomerUser:
518
+ """
519
+ Create or update a customer user using customer and user external IDs
520
+
521
+ Parameters
522
+ ----------
523
+ customer_external_id : str
524
+
525
+ user_external_id : str
526
+
527
+ name : typing.Optional[str]
528
+
529
+ email : typing.Optional[str]
530
+
531
+ metadata : typing.Optional[typing.Dict[str, typing.Any]]
532
+
533
+ status : typing.Optional[CustomerUserStatus]
534
+
535
+ request_options : typing.Optional[RequestOptions]
536
+ Request-specific configuration.
537
+
538
+ Returns
539
+ -------
540
+ CustomerUser
541
+ 200
542
+
543
+ Examples
544
+ --------
545
+ from paid import Paid
546
+
547
+ client = Paid(
548
+ token="YOUR_TOKEN",
549
+ )
550
+ client.customers.upsert_customer_user_by_external_id(
551
+ customer_external_id="customerExternalId",
552
+ user_external_id="userExternalId",
553
+ )
554
+ """
555
+ _response = self._raw_client.upsert_customer_user_by_external_id(
556
+ customer_external_id,
557
+ user_external_id,
558
+ name=name,
559
+ email=email,
560
+ metadata=metadata,
561
+ status=status,
562
+ request_options=request_options,
563
+ )
564
+ return _response.data
565
+
505
566
 
506
567
  class AsyncCustomersClient:
507
568
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -1067,3 +1128,70 @@ class AsyncCustomersClient:
1067
1128
  external_id, request_options=request_options
1068
1129
  )
1069
1130
  return _response.data
1131
+
1132
+ async def upsert_customer_user_by_external_id(
1133
+ self,
1134
+ customer_external_id: str,
1135
+ user_external_id: str,
1136
+ *,
1137
+ name: typing.Optional[str] = OMIT,
1138
+ email: typing.Optional[str] = OMIT,
1139
+ metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
1140
+ status: typing.Optional[CustomerUserStatus] = OMIT,
1141
+ request_options: typing.Optional[RequestOptions] = None,
1142
+ ) -> CustomerUser:
1143
+ """
1144
+ Create or update a customer user using customer and user external IDs
1145
+
1146
+ Parameters
1147
+ ----------
1148
+ customer_external_id : str
1149
+
1150
+ user_external_id : str
1151
+
1152
+ name : typing.Optional[str]
1153
+
1154
+ email : typing.Optional[str]
1155
+
1156
+ metadata : typing.Optional[typing.Dict[str, typing.Any]]
1157
+
1158
+ status : typing.Optional[CustomerUserStatus]
1159
+
1160
+ request_options : typing.Optional[RequestOptions]
1161
+ Request-specific configuration.
1162
+
1163
+ Returns
1164
+ -------
1165
+ CustomerUser
1166
+ 200
1167
+
1168
+ Examples
1169
+ --------
1170
+ import asyncio
1171
+
1172
+ from paid import AsyncPaid
1173
+
1174
+ client = AsyncPaid(
1175
+ token="YOUR_TOKEN",
1176
+ )
1177
+
1178
+
1179
+ async def main() -> None:
1180
+ await client.customers.upsert_customer_user_by_external_id(
1181
+ customer_external_id="customerExternalId",
1182
+ user_external_id="userExternalId",
1183
+ )
1184
+
1185
+
1186
+ asyncio.run(main())
1187
+ """
1188
+ _response = await self._raw_client.upsert_customer_user_by_external_id(
1189
+ customer_external_id,
1190
+ user_external_id,
1191
+ name=name,
1192
+ email=email,
1193
+ metadata=metadata,
1194
+ status=status,
1195
+ request_options=request_options,
1196
+ )
1197
+ return _response.data