mollie-api-py 1.0.0__py3-none-any.whl

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 (337) hide show
  1. mollie/__init__.py +18 -0
  2. mollie/_hooks/__init__.py +5 -0
  3. mollie/_hooks/mollie_hooks.py +165 -0
  4. mollie/_hooks/registration.py +18 -0
  5. mollie/_hooks/sdkhooks.py +76 -0
  6. mollie/_hooks/types.py +113 -0
  7. mollie/_version.py +15 -0
  8. mollie/balance_transfers.py +651 -0
  9. mollie/balances.py +1105 -0
  10. mollie/basesdk.py +360 -0
  11. mollie/capabilities.py +209 -0
  12. mollie/captures.py +677 -0
  13. mollie/chargebacks_sdk.py +675 -0
  14. mollie/client_links.py +325 -0
  15. mollie/clients.py +409 -0
  16. mollie/customers.py +1563 -0
  17. mollie/delayed_routing.py +421 -0
  18. mollie/httpclient.py +125 -0
  19. mollie/invoices.py +429 -0
  20. mollie/mandates.py +895 -0
  21. mollie/methods.py +789 -0
  22. mollie/models/__init__.py +4002 -0
  23. mollie/models/address.py +29 -0
  24. mollie/models/amount.py +25 -0
  25. mollie/models/amount_nullable.py +24 -0
  26. mollie/models/apierror.py +40 -0
  27. mollie/models/balance_card_audience.py +10 -0
  28. mollie/models/balance_card_issuer.py +12 -0
  29. mollie/models/balance_card_region.py +12 -0
  30. mollie/models/balance_fee_type.py +43 -0
  31. mollie/models/balance_prepayment_part_type.py +13 -0
  32. mollie/models/balance_report_grouping.py +10 -0
  33. mollie/models/balance_transaction_type.py +47 -0
  34. mollie/models/balance_transfer_category.py +17 -0
  35. mollie/models/balance_transfer_category_response.py +18 -0
  36. mollie/models/balance_transfer_destination_type.py +14 -0
  37. mollie/models/balance_transfer_party_type.py +10 -0
  38. mollie/models/balance_transfer_party_type_response.py +11 -0
  39. mollie/models/balance_transfer_status.py +13 -0
  40. mollie/models/balance_transfer_status_reason_response.py +19 -0
  41. mollie/models/billingaddress.py +154 -0
  42. mollie/models/cancel_paymentop.py +93 -0
  43. mollie/models/cancel_refundop.py +86 -0
  44. mollie/models/cancel_subscriptionop.py +100 -0
  45. mollie/models/capability_requirement_status.py +15 -0
  46. mollie/models/capability_status.py +12 -0
  47. mollie/models/capability_status_reason.py +10 -0
  48. mollie/models/capture_mode.py +15 -0
  49. mollie/models/capture_mode_response.py +16 -0
  50. mollie/models/capture_response.py +265 -0
  51. mollie/models/client_link_request.py +210 -0
  52. mollie/models/client_link_response.py +56 -0
  53. mollie/models/clienterror.py +30 -0
  54. mollie/models/components_sub_totals.py +127 -0
  55. mollie/models/create_captureop.py +43 -0
  56. mollie/models/create_client_linkop.py +29 -0
  57. mollie/models/create_connect_balance_transferop.py +32 -0
  58. mollie/models/create_customer_paymentop.py +43 -0
  59. mollie/models/create_customerop.py +29 -0
  60. mollie/models/create_mandateop.py +43 -0
  61. mollie/models/create_payment_linkop.py +325 -0
  62. mollie/models/create_paymentop.py +73 -0
  63. mollie/models/create_profileop.py +29 -0
  64. mollie/models/create_refundop.py +43 -0
  65. mollie/models/create_sales_invoiceop.py +29 -0
  66. mollie/models/create_subscriptionop.py +43 -0
  67. mollie/models/create_webhook.py +123 -0
  68. mollie/models/create_webhookop.py +69 -0
  69. mollie/models/currencies.py +20 -0
  70. mollie/models/customer_response.py +169 -0
  71. mollie/models/delete_customerop.py +91 -0
  72. mollie/models/delete_payment_linkop.py +91 -0
  73. mollie/models/delete_profileop.py +29 -0
  74. mollie/models/delete_sales_invoiceop.py +44 -0
  75. mollie/models/delete_values_sales_invoice.py +54 -0
  76. mollie/models/delete_webhookop.py +56 -0
  77. mollie/models/entity_balance.py +325 -0
  78. mollie/models/entity_balance_report.py +541 -0
  79. mollie/models/entity_balance_transaction.py +1068 -0
  80. mollie/models/entity_balance_transfer.py +62 -0
  81. mollie/models/entity_balance_transfer_party.py +28 -0
  82. mollie/models/entity_balance_transfer_party_response.py +32 -0
  83. mollie/models/entity_balance_transfer_response.py +159 -0
  84. mollie/models/entity_capability.py +75 -0
  85. mollie/models/entity_capability_requirement.py +87 -0
  86. mollie/models/entity_capture.py +63 -0
  87. mollie/models/entity_chargeback.py +247 -0
  88. mollie/models/entity_customer.py +86 -0
  89. mollie/models/entity_event.py +46 -0
  90. mollie/models/entity_invoice.py +247 -0
  91. mollie/models/entity_method_get.py +329 -0
  92. mollie/models/entity_onboarding_status.py +95 -0
  93. mollie/models/entity_organization.py +178 -0
  94. mollie/models/entity_payment_route.py +111 -0
  95. mollie/models/entity_payment_route_response.py +140 -0
  96. mollie/models/entity_permission.py +61 -0
  97. mollie/models/entity_refund_response.py +361 -0
  98. mollie/models/entity_route.py +96 -0
  99. mollie/models/entity_settlement.py +467 -0
  100. mollie/models/entity_terminal.py +160 -0
  101. mollie/models/entity_webhook.py +122 -0
  102. mollie/models/entity_webhook_event.py +149 -0
  103. mollie/models/error_response.py +70 -0
  104. mollie/models/get_balance_reportop.py +126 -0
  105. mollie/models/get_balanceop.py +71 -0
  106. mollie/models/get_captureop.py +129 -0
  107. mollie/models/get_chargebackop.py +129 -0
  108. mollie/models/get_clientop.py +216 -0
  109. mollie/models/get_connect_balance_transferop.py +71 -0
  110. mollie/models/get_current_organizationop.py +22 -0
  111. mollie/models/get_current_profileop.py +22 -0
  112. mollie/models/get_customerop.py +286 -0
  113. mollie/models/get_invoiceop.py +29 -0
  114. mollie/models/get_mandateop.py +86 -0
  115. mollie/models/get_methodop.py +199 -0
  116. mollie/models/get_next_settlementop.py +22 -0
  117. mollie/models/get_onboarding_statusop.py +22 -0
  118. mollie/models/get_open_settlementop.py +22 -0
  119. mollie/models/get_organizationop.py +71 -0
  120. mollie/models/get_partner_statusop.py +231 -0
  121. mollie/models/get_payment_link_paymentsop.py +188 -0
  122. mollie/models/get_payment_linkop.py +77 -0
  123. mollie/models/get_paymentop.py +128 -0
  124. mollie/models/get_permissionop.py +73 -0
  125. mollie/models/get_primary_balanceop.py +22 -0
  126. mollie/models/get_profileop.py +71 -0
  127. mollie/models/get_refundop.py +129 -0
  128. mollie/models/get_sales_invoiceop.py +75 -0
  129. mollie/models/get_settlementop.py +29 -0
  130. mollie/models/get_subscriptionop.py +86 -0
  131. mollie/models/get_terminalop.py +77 -0
  132. mollie/models/get_webhook_eventop.py +71 -0
  133. mollie/models/get_webhookop.py +71 -0
  134. mollie/models/internal/__init__.py +54 -0
  135. mollie/models/internal/globals.py +59 -0
  136. mollie/models/line_categories.py +13 -0
  137. mollie/models/line_categories_response.py +14 -0
  138. mollie/models/list_all_chargebacksop.py +236 -0
  139. mollie/models/list_all_methodsop.py +249 -0
  140. mollie/models/list_all_refundsop.py +230 -0
  141. mollie/models/list_all_subscriptionsop.py +202 -0
  142. mollie/models/list_balance_transactionsop.py +174 -0
  143. mollie/models/list_balancesop.py +171 -0
  144. mollie/models/list_capabilitiesop.py +62 -0
  145. mollie/models/list_capture_response.py +264 -0
  146. mollie/models/list_capturesop.py +185 -0
  147. mollie/models/list_chargebacksop.py +185 -0
  148. mollie/models/list_clientsop.py +269 -0
  149. mollie/models/list_connect_balance_transfersop.py +177 -0
  150. mollie/models/list_customer_paymentsop.py +231 -0
  151. mollie/models/list_customer_response.py +164 -0
  152. mollie/models/list_customersop.py +172 -0
  153. mollie/models/list_entity_balance.py +322 -0
  154. mollie/models/list_entity_chargeback.py +244 -0
  155. mollie/models/list_entity_invoice.py +244 -0
  156. mollie/models/list_entity_method.py +315 -0
  157. mollie/models/list_entity_method_all.py +391 -0
  158. mollie/models/list_entity_permission.py +56 -0
  159. mollie/models/list_entity_refund.py +352 -0
  160. mollie/models/list_entity_settlement.py +457 -0
  161. mollie/models/list_entity_terminal.py +157 -0
  162. mollie/models/list_entity_webhook.py +117 -0
  163. mollie/models/list_invoicesop.py +175 -0
  164. mollie/models/list_links.py +68 -0
  165. mollie/models/list_mandate_response.py +261 -0
  166. mollie/models/list_mandatesop.py +186 -0
  167. mollie/models/list_methodsop.py +332 -0
  168. mollie/models/list_payment_linksop.py +159 -0
  169. mollie/models/list_payment_response.py +1953 -0
  170. mollie/models/list_paymentsop.py +217 -0
  171. mollie/models/list_permissionsop.py +85 -0
  172. mollie/models/list_profile_response.py +194 -0
  173. mollie/models/list_profilesop.py +118 -0
  174. mollie/models/list_refundsop.py +189 -0
  175. mollie/models/list_route_get_response.py +97 -0
  176. mollie/models/list_sales_invoice_response.py +505 -0
  177. mollie/models/list_sales_invoicesop.py +172 -0
  178. mollie/models/list_settlement_capturesop.py +187 -0
  179. mollie/models/list_settlement_chargebacksop.py +187 -0
  180. mollie/models/list_settlement_paymentsop.py +233 -0
  181. mollie/models/list_settlement_refundsop.py +191 -0
  182. mollie/models/list_settlementsop.py +178 -0
  183. mollie/models/list_subscription_paymentsop.py +242 -0
  184. mollie/models/list_subscription_response.py +344 -0
  185. mollie/models/list_subscriptionsop.py +189 -0
  186. mollie/models/list_terminalsop.py +172 -0
  187. mollie/models/list_webhooksop.py +189 -0
  188. mollie/models/locale.py +32 -0
  189. mollie/models/locale_response.py +33 -0
  190. mollie/models/mandate_details_card_label_response.py +22 -0
  191. mollie/models/mandate_method.py +15 -0
  192. mollie/models/mandate_method_response.py +16 -0
  193. mollie/models/mandate_request.py +160 -0
  194. mollie/models/mandate_response.py +264 -0
  195. mollie/models/metadata.py +19 -0
  196. mollie/models/method.py +50 -0
  197. mollie/models/method_include_wallets_parameter.py +8 -0
  198. mollie/models/method_resource_parameter.py +9 -0
  199. mollie/models/method_response.py +59 -0
  200. mollie/models/method_status.py +15 -0
  201. mollie/models/mode.py +12 -0
  202. mollie/models/no_response_error.py +17 -0
  203. mollie/models/onboarding_vat_regulation.py +16 -0
  204. mollie/models/organization_vat_regulation.py +17 -0
  205. mollie/models/payment_address.py +130 -0
  206. mollie/models/payment_create_routeop.py +43 -0
  207. mollie/models/payment_details_card_audition_response.py +12 -0
  208. mollie/models/payment_details_card_funding_response.py +14 -0
  209. mollie/models/payment_details_card_label_response.py +23 -0
  210. mollie/models/payment_details_card_security_response.py +12 -0
  211. mollie/models/payment_details_failure_reason_response.py +25 -0
  212. mollie/models/payment_details_fee_region_response.py +20 -0
  213. mollie/models/payment_details_receipt_card_read_method_response.py +17 -0
  214. mollie/models/payment_details_receipt_card_verification_method_response.py +21 -0
  215. mollie/models/payment_details_seller_protection_response.py +20 -0
  216. mollie/models/payment_details_wallet_response.py +11 -0
  217. mollie/models/payment_line_item.py +96 -0
  218. mollie/models/payment_line_item_response.py +104 -0
  219. mollie/models/payment_line_type.py +20 -0
  220. mollie/models/payment_line_type_response.py +21 -0
  221. mollie/models/payment_link_method.py +36 -0
  222. mollie/models/payment_link_method_response.py +37 -0
  223. mollie/models/payment_link_response.py +348 -0
  224. mollie/models/payment_link_sequence_type.py +9 -0
  225. mollie/models/payment_link_sequence_type_response.py +10 -0
  226. mollie/models/payment_list_routesop.py +140 -0
  227. mollie/models/payment_method.py +53 -0
  228. mollie/models/payment_request.py +919 -0
  229. mollie/models/payment_response.py +1953 -0
  230. mollie/models/profile_request.py +67 -0
  231. mollie/models/profile_response.py +197 -0
  232. mollie/models/profile_review_status_response.py +12 -0
  233. mollie/models/recurring_line_item.py +77 -0
  234. mollie/models/refund_external_reference_type.py +10 -0
  235. mollie/models/refund_external_reference_type_response.py +11 -0
  236. mollie/models/refund_request.py +200 -0
  237. mollie/models/release_authorizationop.py +108 -0
  238. mollie/models/request_apple_pay_payment_sessionop.py +76 -0
  239. mollie/models/responsevalidationerror.py +27 -0
  240. mollie/models/revoke_mandateop.py +100 -0
  241. mollie/models/route_create_response.py +97 -0
  242. mollie/models/route_destination_type.py +10 -0
  243. mollie/models/route_destination_type_response.py +11 -0
  244. mollie/models/sales_invoice_discount.py +21 -0
  245. mollie/models/sales_invoice_discount_response.py +25 -0
  246. mollie/models/sales_invoice_discount_type.py +11 -0
  247. mollie/models/sales_invoice_discount_type_response.py +12 -0
  248. mollie/models/sales_invoice_email_details.py +20 -0
  249. mollie/models/sales_invoice_line_item.py +67 -0
  250. mollie/models/sales_invoice_line_item_response.py +70 -0
  251. mollie/models/sales_invoice_payment_details.py +59 -0
  252. mollie/models/sales_invoice_payment_details_response.py +66 -0
  253. mollie/models/sales_invoice_payment_details_source.py +12 -0
  254. mollie/models/sales_invoice_payment_details_source_response.py +13 -0
  255. mollie/models/sales_invoice_payment_term.py +16 -0
  256. mollie/models/sales_invoice_payment_term_response.py +17 -0
  257. mollie/models/sales_invoice_recipient.py +176 -0
  258. mollie/models/sales_invoice_recipient_locale.py +18 -0
  259. mollie/models/sales_invoice_recipient_locale_response.py +19 -0
  260. mollie/models/sales_invoice_recipient_response.py +182 -0
  261. mollie/models/sales_invoice_recipient_type.py +13 -0
  262. mollie/models/sales_invoice_recipient_type_response.py +14 -0
  263. mollie/models/sales_invoice_request.py +256 -0
  264. mollie/models/sales_invoice_response.py +509 -0
  265. mollie/models/sales_invoice_status.py +25 -0
  266. mollie/models/sales_invoice_status_response.py +26 -0
  267. mollie/models/sales_invoice_vat_mode.py +13 -0
  268. mollie/models/sales_invoice_vat_mode_response.py +14 -0
  269. mollie/models/sales_invoice_vat_scheme.py +11 -0
  270. mollie/models/sales_invoice_vat_scheme_response.py +12 -0
  271. mollie/models/security.py +35 -0
  272. mollie/models/sequence_type.py +10 -0
  273. mollie/models/sequence_type_response.py +11 -0
  274. mollie/models/sorting.py +9 -0
  275. mollie/models/status_reason.py +168 -0
  276. mollie/models/sub_group.py +52 -0
  277. mollie/models/sub_totals.py +120 -0
  278. mollie/models/submit_onboarding_dataop.py +214 -0
  279. mollie/models/subscription_method.py +12 -0
  280. mollie/models/subscription_method_response.py +13 -0
  281. mollie/models/subscription_request.py +213 -0
  282. mollie/models/subscription_response.py +349 -0
  283. mollie/models/terminal_brand.py +12 -0
  284. mollie/models/terminal_model.py +16 -0
  285. mollie/models/test_webhookop.py +64 -0
  286. mollie/models/update_customerop.py +43 -0
  287. mollie/models/update_payment_linkop.py +172 -0
  288. mollie/models/update_paymentop.py +332 -0
  289. mollie/models/update_profileop.py +147 -0
  290. mollie/models/update_sales_invoiceop.py +44 -0
  291. mollie/models/update_subscriptionop.py +188 -0
  292. mollie/models/update_values_sales_invoice.py +176 -0
  293. mollie/models/update_webhookop.py +83 -0
  294. mollie/models/url.py +24 -0
  295. mollie/models/url_nullable.py +25 -0
  296. mollie/models/webhook_event_types.py +18 -0
  297. mollie/models/webhook_status.py +14 -0
  298. mollie/onboarding.py +403 -0
  299. mollie/organizations.py +579 -0
  300. mollie/payment_links.py +1323 -0
  301. mollie/payments_sdk.py +1385 -0
  302. mollie/permissions.py +397 -0
  303. mollie/profiles.py +1209 -0
  304. mollie/py.typed +1 -0
  305. mollie/refunds_sdk.py +1111 -0
  306. mollie/sales_invoices.py +1121 -0
  307. mollie/sdk.py +265 -0
  308. mollie/sdkconfiguration.py +50 -0
  309. mollie/settlements.py +1735 -0
  310. mollie/subscriptions.py +1617 -0
  311. mollie/terminals.py +427 -0
  312. mollie/types/__init__.py +21 -0
  313. mollie/types/basemodel.py +39 -0
  314. mollie/utils/__init__.py +200 -0
  315. mollie/utils/annotations.py +79 -0
  316. mollie/utils/datetimes.py +23 -0
  317. mollie/utils/enums.py +74 -0
  318. mollie/utils/eventstreaming.py +248 -0
  319. mollie/utils/forms.py +223 -0
  320. mollie/utils/headers.py +136 -0
  321. mollie/utils/logger.py +27 -0
  322. mollie/utils/metadata.py +118 -0
  323. mollie/utils/queryparams.py +205 -0
  324. mollie/utils/requestbodies.py +66 -0
  325. mollie/utils/retries.py +217 -0
  326. mollie/utils/security.py +195 -0
  327. mollie/utils/serializers.py +249 -0
  328. mollie/utils/unmarshal_json_response.py +24 -0
  329. mollie/utils/url.py +155 -0
  330. mollie/utils/values.py +137 -0
  331. mollie/wallets.py +263 -0
  332. mollie/webhook_events.py +211 -0
  333. mollie/webhooks.py +1305 -0
  334. mollie_api_py-1.0.0.dist-info/METADATA +834 -0
  335. mollie_api_py-1.0.0.dist-info/RECORD +337 -0
  336. mollie_api_py-1.0.0.dist-info/WHEEL +4 -0
  337. mollie_api_py-1.0.0.dist-info/licenses/LICENSE.md +24 -0
@@ -0,0 +1,1121 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from .basesdk import BaseSDK
4
+ from mollie import models, utils
5
+ from mollie._hooks import HookContext
6
+ from mollie.types import OptionalNullable, UNSET
7
+ from mollie.utils import get_security_from_env
8
+ from mollie.utils.unmarshal_json_response import unmarshal_json_response
9
+ from typing import Any, Mapping, Optional, Union
10
+
11
+
12
+ class SalesInvoices(BaseSDK):
13
+ def create(
14
+ self,
15
+ *,
16
+ idempotency_key: Optional[str] = None,
17
+ sales_invoice_request: Optional[
18
+ Union[models.SalesInvoiceRequest, models.SalesInvoiceRequestTypedDict]
19
+ ] = None,
20
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
21
+ server_url: Optional[str] = None,
22
+ timeout_ms: Optional[int] = None,
23
+ http_headers: Optional[Mapping[str, str]] = None,
24
+ ) -> models.SalesInvoiceResponse:
25
+ r"""Create sales invoice
26
+
27
+ > 🚧 Beta feature
28
+ >
29
+ > This feature is currently in beta testing, and the final specification may still change.
30
+
31
+ With the Sales Invoice API you can generate sales invoices to send to your customers.
32
+
33
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
34
+ :param sales_invoice_request:
35
+ :param retries: Override the default retry configuration for this method
36
+ :param server_url: Override the default server URL for this method
37
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
38
+ :param http_headers: Additional headers to set or replace on requests.
39
+ """
40
+ base_url = None
41
+ url_variables = None
42
+ if timeout_ms is None:
43
+ timeout_ms = self.sdk_configuration.timeout_ms
44
+
45
+ if server_url is not None:
46
+ base_url = server_url
47
+ else:
48
+ base_url = self._get_url(base_url, url_variables)
49
+
50
+ request = models.CreateSalesInvoiceRequest(
51
+ idempotency_key=idempotency_key,
52
+ sales_invoice_request=utils.get_pydantic_model(
53
+ sales_invoice_request, Optional[models.SalesInvoiceRequest]
54
+ ),
55
+ )
56
+
57
+ req = self._build_request(
58
+ method="POST",
59
+ path="/sales-invoices",
60
+ base_url=base_url,
61
+ url_variables=url_variables,
62
+ request=request,
63
+ request_body_required=False,
64
+ request_has_path_params=False,
65
+ request_has_query_params=True,
66
+ user_agent_header="user-agent",
67
+ accept_header_value="application/hal+json",
68
+ http_headers=http_headers,
69
+ security=self.sdk_configuration.security,
70
+ get_serialized_body=lambda: utils.serialize_request_body(
71
+ request.sales_invoice_request,
72
+ False,
73
+ True,
74
+ "json",
75
+ Optional[models.SalesInvoiceRequest],
76
+ ),
77
+ timeout_ms=timeout_ms,
78
+ )
79
+
80
+ if retries == UNSET:
81
+ if self.sdk_configuration.retry_config is not UNSET:
82
+ retries = self.sdk_configuration.retry_config
83
+ else:
84
+ retries = utils.RetryConfig(
85
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
86
+ )
87
+
88
+ retry_config = None
89
+ if isinstance(retries, utils.RetryConfig):
90
+ retry_config = (retries, ["5xx"])
91
+
92
+ http_res = self.do_request(
93
+ hook_ctx=HookContext(
94
+ config=self.sdk_configuration,
95
+ base_url=base_url or "",
96
+ operation_id="create-sales-invoice",
97
+ oauth2_scopes=None,
98
+ security_source=get_security_from_env(
99
+ self.sdk_configuration.security, models.Security
100
+ ),
101
+ ),
102
+ request=req,
103
+ error_status_codes=["404", "422", "4XX", "5XX"],
104
+ retry_config=retry_config,
105
+ )
106
+
107
+ response_data: Any = None
108
+ if utils.match_response(http_res, "201", "application/hal+json"):
109
+ return unmarshal_json_response(models.SalesInvoiceResponse, http_res)
110
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
111
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
112
+ raise models.ErrorResponse(response_data, http_res)
113
+ if utils.match_response(http_res, "4XX", "*"):
114
+ http_res_text = utils.stream_to_text(http_res)
115
+ raise models.APIError("API error occurred", http_res, http_res_text)
116
+ if utils.match_response(http_res, "5XX", "*"):
117
+ http_res_text = utils.stream_to_text(http_res)
118
+ raise models.APIError("API error occurred", http_res, http_res_text)
119
+
120
+ raise models.APIError("Unexpected response received", http_res)
121
+
122
+ async def create_async(
123
+ self,
124
+ *,
125
+ idempotency_key: Optional[str] = None,
126
+ sales_invoice_request: Optional[
127
+ Union[models.SalesInvoiceRequest, models.SalesInvoiceRequestTypedDict]
128
+ ] = None,
129
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
130
+ server_url: Optional[str] = None,
131
+ timeout_ms: Optional[int] = None,
132
+ http_headers: Optional[Mapping[str, str]] = None,
133
+ ) -> models.SalesInvoiceResponse:
134
+ r"""Create sales invoice
135
+
136
+ > 🚧 Beta feature
137
+ >
138
+ > This feature is currently in beta testing, and the final specification may still change.
139
+
140
+ With the Sales Invoice API you can generate sales invoices to send to your customers.
141
+
142
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
143
+ :param sales_invoice_request:
144
+ :param retries: Override the default retry configuration for this method
145
+ :param server_url: Override the default server URL for this method
146
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
147
+ :param http_headers: Additional headers to set or replace on requests.
148
+ """
149
+ base_url = None
150
+ url_variables = None
151
+ if timeout_ms is None:
152
+ timeout_ms = self.sdk_configuration.timeout_ms
153
+
154
+ if server_url is not None:
155
+ base_url = server_url
156
+ else:
157
+ base_url = self._get_url(base_url, url_variables)
158
+
159
+ request = models.CreateSalesInvoiceRequest(
160
+ idempotency_key=idempotency_key,
161
+ sales_invoice_request=utils.get_pydantic_model(
162
+ sales_invoice_request, Optional[models.SalesInvoiceRequest]
163
+ ),
164
+ )
165
+
166
+ req = self._build_request_async(
167
+ method="POST",
168
+ path="/sales-invoices",
169
+ base_url=base_url,
170
+ url_variables=url_variables,
171
+ request=request,
172
+ request_body_required=False,
173
+ request_has_path_params=False,
174
+ request_has_query_params=True,
175
+ user_agent_header="user-agent",
176
+ accept_header_value="application/hal+json",
177
+ http_headers=http_headers,
178
+ security=self.sdk_configuration.security,
179
+ get_serialized_body=lambda: utils.serialize_request_body(
180
+ request.sales_invoice_request,
181
+ False,
182
+ True,
183
+ "json",
184
+ Optional[models.SalesInvoiceRequest],
185
+ ),
186
+ timeout_ms=timeout_ms,
187
+ )
188
+
189
+ if retries == UNSET:
190
+ if self.sdk_configuration.retry_config is not UNSET:
191
+ retries = self.sdk_configuration.retry_config
192
+ else:
193
+ retries = utils.RetryConfig(
194
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
195
+ )
196
+
197
+ retry_config = None
198
+ if isinstance(retries, utils.RetryConfig):
199
+ retry_config = (retries, ["5xx"])
200
+
201
+ http_res = await self.do_request_async(
202
+ hook_ctx=HookContext(
203
+ config=self.sdk_configuration,
204
+ base_url=base_url or "",
205
+ operation_id="create-sales-invoice",
206
+ oauth2_scopes=None,
207
+ security_source=get_security_from_env(
208
+ self.sdk_configuration.security, models.Security
209
+ ),
210
+ ),
211
+ request=req,
212
+ error_status_codes=["404", "422", "4XX", "5XX"],
213
+ retry_config=retry_config,
214
+ )
215
+
216
+ response_data: Any = None
217
+ if utils.match_response(http_res, "201", "application/hal+json"):
218
+ return unmarshal_json_response(models.SalesInvoiceResponse, http_res)
219
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
220
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
221
+ raise models.ErrorResponse(response_data, http_res)
222
+ if utils.match_response(http_res, "4XX", "*"):
223
+ http_res_text = await utils.stream_to_text_async(http_res)
224
+ raise models.APIError("API error occurred", http_res, http_res_text)
225
+ if utils.match_response(http_res, "5XX", "*"):
226
+ http_res_text = await utils.stream_to_text_async(http_res)
227
+ raise models.APIError("API error occurred", http_res, http_res_text)
228
+
229
+ raise models.APIError("Unexpected response received", http_res)
230
+
231
+ def list(
232
+ self,
233
+ *,
234
+ from_: OptionalNullable[str] = UNSET,
235
+ limit: OptionalNullable[int] = UNSET,
236
+ testmode: Optional[bool] = None,
237
+ idempotency_key: Optional[str] = None,
238
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
239
+ server_url: Optional[str] = None,
240
+ timeout_ms: Optional[int] = None,
241
+ http_headers: Optional[Mapping[str, str]] = None,
242
+ ) -> models.ListSalesInvoicesResponse:
243
+ r"""List sales invoices
244
+
245
+ > 🚧 Beta feature
246
+ >
247
+ > This feature is currently in beta testing, and the final specification may still change.
248
+
249
+ Retrieve a list of all sales invoices created through the API.
250
+
251
+ The results are paginated.
252
+
253
+ :param from_: Provide an ID to start the result set from the item with the given ID and onwards. This allows you to paginate the result set.
254
+ :param limit: The maximum number of items to return. Defaults to 50 items.
255
+ :param testmode: Most API credentials are specifically created for either live mode or test mode. In those cases the `testmode` query parameter can be omitted. For organization-level credentials such as OAuth access tokens, you can enable test mode by setting the `testmode` query parameter to `true`. Test entities cannot be retrieved when the endpoint is set to live mode, and vice versa.
256
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
257
+ :param retries: Override the default retry configuration for this method
258
+ :param server_url: Override the default server URL for this method
259
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
260
+ :param http_headers: Additional headers to set or replace on requests.
261
+ """
262
+ base_url = None
263
+ url_variables = None
264
+ if timeout_ms is None:
265
+ timeout_ms = self.sdk_configuration.timeout_ms
266
+
267
+ if server_url is not None:
268
+ base_url = server_url
269
+ else:
270
+ base_url = self._get_url(base_url, url_variables)
271
+
272
+ request = models.ListSalesInvoicesRequest(
273
+ from_=from_,
274
+ limit=limit,
275
+ testmode=testmode,
276
+ idempotency_key=idempotency_key,
277
+ )
278
+
279
+ req = self._build_request(
280
+ method="GET",
281
+ path="/sales-invoices",
282
+ base_url=base_url,
283
+ url_variables=url_variables,
284
+ request=request,
285
+ request_body_required=False,
286
+ request_has_path_params=False,
287
+ request_has_query_params=True,
288
+ user_agent_header="user-agent",
289
+ accept_header_value="application/hal+json",
290
+ http_headers=http_headers,
291
+ _globals=models.ListSalesInvoicesGlobals(
292
+ testmode=self.sdk_configuration.globals.testmode,
293
+ ),
294
+ security=self.sdk_configuration.security,
295
+ timeout_ms=timeout_ms,
296
+ )
297
+
298
+ if retries == UNSET:
299
+ if self.sdk_configuration.retry_config is not UNSET:
300
+ retries = self.sdk_configuration.retry_config
301
+ else:
302
+ retries = utils.RetryConfig(
303
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
304
+ )
305
+
306
+ retry_config = None
307
+ if isinstance(retries, utils.RetryConfig):
308
+ retry_config = (retries, ["5xx"])
309
+
310
+ http_res = self.do_request(
311
+ hook_ctx=HookContext(
312
+ config=self.sdk_configuration,
313
+ base_url=base_url or "",
314
+ operation_id="list-sales-invoices",
315
+ oauth2_scopes=None,
316
+ security_source=get_security_from_env(
317
+ self.sdk_configuration.security, models.Security
318
+ ),
319
+ ),
320
+ request=req,
321
+ error_status_codes=["400", "4XX", "5XX"],
322
+ retry_config=retry_config,
323
+ )
324
+
325
+ response_data: Any = None
326
+ if utils.match_response(http_res, "200", "application/hal+json"):
327
+ return unmarshal_json_response(models.ListSalesInvoicesResponse, http_res)
328
+ if utils.match_response(http_res, "400", "application/hal+json"):
329
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
330
+ raise models.ErrorResponse(response_data, http_res)
331
+ if utils.match_response(http_res, "4XX", "*"):
332
+ http_res_text = utils.stream_to_text(http_res)
333
+ raise models.APIError("API error occurred", http_res, http_res_text)
334
+ if utils.match_response(http_res, "5XX", "*"):
335
+ http_res_text = utils.stream_to_text(http_res)
336
+ raise models.APIError("API error occurred", http_res, http_res_text)
337
+
338
+ raise models.APIError("Unexpected response received", http_res)
339
+
340
+ async def list_async(
341
+ self,
342
+ *,
343
+ from_: OptionalNullable[str] = UNSET,
344
+ limit: OptionalNullable[int] = UNSET,
345
+ testmode: Optional[bool] = None,
346
+ idempotency_key: Optional[str] = None,
347
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
348
+ server_url: Optional[str] = None,
349
+ timeout_ms: Optional[int] = None,
350
+ http_headers: Optional[Mapping[str, str]] = None,
351
+ ) -> models.ListSalesInvoicesResponse:
352
+ r"""List sales invoices
353
+
354
+ > 🚧 Beta feature
355
+ >
356
+ > This feature is currently in beta testing, and the final specification may still change.
357
+
358
+ Retrieve a list of all sales invoices created through the API.
359
+
360
+ The results are paginated.
361
+
362
+ :param from_: Provide an ID to start the result set from the item with the given ID and onwards. This allows you to paginate the result set.
363
+ :param limit: The maximum number of items to return. Defaults to 50 items.
364
+ :param testmode: Most API credentials are specifically created for either live mode or test mode. In those cases the `testmode` query parameter can be omitted. For organization-level credentials such as OAuth access tokens, you can enable test mode by setting the `testmode` query parameter to `true`. Test entities cannot be retrieved when the endpoint is set to live mode, and vice versa.
365
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
366
+ :param retries: Override the default retry configuration for this method
367
+ :param server_url: Override the default server URL for this method
368
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
369
+ :param http_headers: Additional headers to set or replace on requests.
370
+ """
371
+ base_url = None
372
+ url_variables = None
373
+ if timeout_ms is None:
374
+ timeout_ms = self.sdk_configuration.timeout_ms
375
+
376
+ if server_url is not None:
377
+ base_url = server_url
378
+ else:
379
+ base_url = self._get_url(base_url, url_variables)
380
+
381
+ request = models.ListSalesInvoicesRequest(
382
+ from_=from_,
383
+ limit=limit,
384
+ testmode=testmode,
385
+ idempotency_key=idempotency_key,
386
+ )
387
+
388
+ req = self._build_request_async(
389
+ method="GET",
390
+ path="/sales-invoices",
391
+ base_url=base_url,
392
+ url_variables=url_variables,
393
+ request=request,
394
+ request_body_required=False,
395
+ request_has_path_params=False,
396
+ request_has_query_params=True,
397
+ user_agent_header="user-agent",
398
+ accept_header_value="application/hal+json",
399
+ http_headers=http_headers,
400
+ _globals=models.ListSalesInvoicesGlobals(
401
+ testmode=self.sdk_configuration.globals.testmode,
402
+ ),
403
+ security=self.sdk_configuration.security,
404
+ timeout_ms=timeout_ms,
405
+ )
406
+
407
+ if retries == UNSET:
408
+ if self.sdk_configuration.retry_config is not UNSET:
409
+ retries = self.sdk_configuration.retry_config
410
+ else:
411
+ retries = utils.RetryConfig(
412
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
413
+ )
414
+
415
+ retry_config = None
416
+ if isinstance(retries, utils.RetryConfig):
417
+ retry_config = (retries, ["5xx"])
418
+
419
+ http_res = await self.do_request_async(
420
+ hook_ctx=HookContext(
421
+ config=self.sdk_configuration,
422
+ base_url=base_url or "",
423
+ operation_id="list-sales-invoices",
424
+ oauth2_scopes=None,
425
+ security_source=get_security_from_env(
426
+ self.sdk_configuration.security, models.Security
427
+ ),
428
+ ),
429
+ request=req,
430
+ error_status_codes=["400", "4XX", "5XX"],
431
+ retry_config=retry_config,
432
+ )
433
+
434
+ response_data: Any = None
435
+ if utils.match_response(http_res, "200", "application/hal+json"):
436
+ return unmarshal_json_response(models.ListSalesInvoicesResponse, http_res)
437
+ if utils.match_response(http_res, "400", "application/hal+json"):
438
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
439
+ raise models.ErrorResponse(response_data, http_res)
440
+ if utils.match_response(http_res, "4XX", "*"):
441
+ http_res_text = await utils.stream_to_text_async(http_res)
442
+ raise models.APIError("API error occurred", http_res, http_res_text)
443
+ if utils.match_response(http_res, "5XX", "*"):
444
+ http_res_text = await utils.stream_to_text_async(http_res)
445
+ raise models.APIError("API error occurred", http_res, http_res_text)
446
+
447
+ raise models.APIError("Unexpected response received", http_res)
448
+
449
+ def get(
450
+ self,
451
+ *,
452
+ id: str,
453
+ testmode: Optional[bool] = None,
454
+ idempotency_key: Optional[str] = None,
455
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
456
+ server_url: Optional[str] = None,
457
+ timeout_ms: Optional[int] = None,
458
+ http_headers: Optional[Mapping[str, str]] = None,
459
+ ) -> models.SalesInvoiceResponse:
460
+ r"""Get sales invoice
461
+
462
+ > 🚧 Beta feature
463
+ >
464
+ > This feature is currently in beta testing, and the final specification may still change.
465
+
466
+ Retrieve a single sales invoice by its ID.
467
+
468
+ :param id: Provide the ID of the item you want to perform this operation on.
469
+ :param testmode: Most API credentials are specifically created for either live mode or test mode. In those cases the `testmode` query parameter can be omitted. For organization-level credentials such as OAuth access tokens, you can enable test mode by setting the `testmode` query parameter to `true`. Test entities cannot be retrieved when the endpoint is set to live mode, and vice versa.
470
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
471
+ :param retries: Override the default retry configuration for this method
472
+ :param server_url: Override the default server URL for this method
473
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
474
+ :param http_headers: Additional headers to set or replace on requests.
475
+ """
476
+ base_url = None
477
+ url_variables = None
478
+ if timeout_ms is None:
479
+ timeout_ms = self.sdk_configuration.timeout_ms
480
+
481
+ if server_url is not None:
482
+ base_url = server_url
483
+ else:
484
+ base_url = self._get_url(base_url, url_variables)
485
+
486
+ request = models.GetSalesInvoiceRequest(
487
+ id=id,
488
+ testmode=testmode,
489
+ idempotency_key=idempotency_key,
490
+ )
491
+
492
+ req = self._build_request(
493
+ method="GET",
494
+ path="/sales-invoices/{id}",
495
+ base_url=base_url,
496
+ url_variables=url_variables,
497
+ request=request,
498
+ request_body_required=False,
499
+ request_has_path_params=True,
500
+ request_has_query_params=True,
501
+ user_agent_header="user-agent",
502
+ accept_header_value="application/hal+json",
503
+ http_headers=http_headers,
504
+ _globals=models.GetSalesInvoiceGlobals(
505
+ testmode=self.sdk_configuration.globals.testmode,
506
+ ),
507
+ security=self.sdk_configuration.security,
508
+ timeout_ms=timeout_ms,
509
+ )
510
+
511
+ if retries == UNSET:
512
+ if self.sdk_configuration.retry_config is not UNSET:
513
+ retries = self.sdk_configuration.retry_config
514
+ else:
515
+ retries = utils.RetryConfig(
516
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
517
+ )
518
+
519
+ retry_config = None
520
+ if isinstance(retries, utils.RetryConfig):
521
+ retry_config = (retries, ["5xx"])
522
+
523
+ http_res = self.do_request(
524
+ hook_ctx=HookContext(
525
+ config=self.sdk_configuration,
526
+ base_url=base_url or "",
527
+ operation_id="get-sales-invoice",
528
+ oauth2_scopes=None,
529
+ security_source=get_security_from_env(
530
+ self.sdk_configuration.security, models.Security
531
+ ),
532
+ ),
533
+ request=req,
534
+ error_status_codes=["404", "4XX", "5XX"],
535
+ retry_config=retry_config,
536
+ )
537
+
538
+ response_data: Any = None
539
+ if utils.match_response(http_res, "200", "application/hal+json"):
540
+ return unmarshal_json_response(models.SalesInvoiceResponse, http_res)
541
+ if utils.match_response(http_res, "404", "application/hal+json"):
542
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
543
+ raise models.ErrorResponse(response_data, http_res)
544
+ if utils.match_response(http_res, "4XX", "*"):
545
+ http_res_text = utils.stream_to_text(http_res)
546
+ raise models.APIError("API error occurred", http_res, http_res_text)
547
+ if utils.match_response(http_res, "5XX", "*"):
548
+ http_res_text = utils.stream_to_text(http_res)
549
+ raise models.APIError("API error occurred", http_res, http_res_text)
550
+
551
+ raise models.APIError("Unexpected response received", http_res)
552
+
553
+ async def get_async(
554
+ self,
555
+ *,
556
+ id: str,
557
+ testmode: Optional[bool] = None,
558
+ idempotency_key: Optional[str] = None,
559
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
560
+ server_url: Optional[str] = None,
561
+ timeout_ms: Optional[int] = None,
562
+ http_headers: Optional[Mapping[str, str]] = None,
563
+ ) -> models.SalesInvoiceResponse:
564
+ r"""Get sales invoice
565
+
566
+ > 🚧 Beta feature
567
+ >
568
+ > This feature is currently in beta testing, and the final specification may still change.
569
+
570
+ Retrieve a single sales invoice by its ID.
571
+
572
+ :param id: Provide the ID of the item you want to perform this operation on.
573
+ :param testmode: Most API credentials are specifically created for either live mode or test mode. In those cases the `testmode` query parameter can be omitted. For organization-level credentials such as OAuth access tokens, you can enable test mode by setting the `testmode` query parameter to `true`. Test entities cannot be retrieved when the endpoint is set to live mode, and vice versa.
574
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
575
+ :param retries: Override the default retry configuration for this method
576
+ :param server_url: Override the default server URL for this method
577
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
578
+ :param http_headers: Additional headers to set or replace on requests.
579
+ """
580
+ base_url = None
581
+ url_variables = None
582
+ if timeout_ms is None:
583
+ timeout_ms = self.sdk_configuration.timeout_ms
584
+
585
+ if server_url is not None:
586
+ base_url = server_url
587
+ else:
588
+ base_url = self._get_url(base_url, url_variables)
589
+
590
+ request = models.GetSalesInvoiceRequest(
591
+ id=id,
592
+ testmode=testmode,
593
+ idempotency_key=idempotency_key,
594
+ )
595
+
596
+ req = self._build_request_async(
597
+ method="GET",
598
+ path="/sales-invoices/{id}",
599
+ base_url=base_url,
600
+ url_variables=url_variables,
601
+ request=request,
602
+ request_body_required=False,
603
+ request_has_path_params=True,
604
+ request_has_query_params=True,
605
+ user_agent_header="user-agent",
606
+ accept_header_value="application/hal+json",
607
+ http_headers=http_headers,
608
+ _globals=models.GetSalesInvoiceGlobals(
609
+ testmode=self.sdk_configuration.globals.testmode,
610
+ ),
611
+ security=self.sdk_configuration.security,
612
+ timeout_ms=timeout_ms,
613
+ )
614
+
615
+ if retries == UNSET:
616
+ if self.sdk_configuration.retry_config is not UNSET:
617
+ retries = self.sdk_configuration.retry_config
618
+ else:
619
+ retries = utils.RetryConfig(
620
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
621
+ )
622
+
623
+ retry_config = None
624
+ if isinstance(retries, utils.RetryConfig):
625
+ retry_config = (retries, ["5xx"])
626
+
627
+ http_res = await self.do_request_async(
628
+ hook_ctx=HookContext(
629
+ config=self.sdk_configuration,
630
+ base_url=base_url or "",
631
+ operation_id="get-sales-invoice",
632
+ oauth2_scopes=None,
633
+ security_source=get_security_from_env(
634
+ self.sdk_configuration.security, models.Security
635
+ ),
636
+ ),
637
+ request=req,
638
+ error_status_codes=["404", "4XX", "5XX"],
639
+ retry_config=retry_config,
640
+ )
641
+
642
+ response_data: Any = None
643
+ if utils.match_response(http_res, "200", "application/hal+json"):
644
+ return unmarshal_json_response(models.SalesInvoiceResponse, http_res)
645
+ if utils.match_response(http_res, "404", "application/hal+json"):
646
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
647
+ raise models.ErrorResponse(response_data, http_res)
648
+ if utils.match_response(http_res, "4XX", "*"):
649
+ http_res_text = await utils.stream_to_text_async(http_res)
650
+ raise models.APIError("API error occurred", http_res, http_res_text)
651
+ if utils.match_response(http_res, "5XX", "*"):
652
+ http_res_text = await utils.stream_to_text_async(http_res)
653
+ raise models.APIError("API error occurred", http_res, http_res_text)
654
+
655
+ raise models.APIError("Unexpected response received", http_res)
656
+
657
+ def update(
658
+ self,
659
+ *,
660
+ id: str,
661
+ idempotency_key: Optional[str] = None,
662
+ update_values_sales_invoice: Optional[
663
+ Union[
664
+ models.UpdateValuesSalesInvoice,
665
+ models.UpdateValuesSalesInvoiceTypedDict,
666
+ ]
667
+ ] = None,
668
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
669
+ server_url: Optional[str] = None,
670
+ timeout_ms: Optional[int] = None,
671
+ http_headers: Optional[Mapping[str, str]] = None,
672
+ ) -> models.SalesInvoiceResponse:
673
+ r"""Update sales invoice
674
+
675
+ > 🚧 Beta feature
676
+ >
677
+ > This feature is currently in beta testing, and the final specification may still change.
678
+
679
+ Certain details of an existing sales invoice can be updated. For `draft` it is all values listed below, but for
680
+ statuses `paid` and `issued` there are certain additional requirements (`paymentDetails` and `emailDetails`,
681
+ respectively).
682
+
683
+ :param id: Provide the ID of the item you want to perform this operation on.
684
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
685
+ :param update_values_sales_invoice:
686
+ :param retries: Override the default retry configuration for this method
687
+ :param server_url: Override the default server URL for this method
688
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
689
+ :param http_headers: Additional headers to set or replace on requests.
690
+ """
691
+ base_url = None
692
+ url_variables = None
693
+ if timeout_ms is None:
694
+ timeout_ms = self.sdk_configuration.timeout_ms
695
+
696
+ if server_url is not None:
697
+ base_url = server_url
698
+ else:
699
+ base_url = self._get_url(base_url, url_variables)
700
+
701
+ request = models.UpdateSalesInvoiceRequest(
702
+ id=id,
703
+ idempotency_key=idempotency_key,
704
+ update_values_sales_invoice=utils.get_pydantic_model(
705
+ update_values_sales_invoice, Optional[models.UpdateValuesSalesInvoice]
706
+ ),
707
+ )
708
+
709
+ req = self._build_request(
710
+ method="PATCH",
711
+ path="/sales-invoices/{id}",
712
+ base_url=base_url,
713
+ url_variables=url_variables,
714
+ request=request,
715
+ request_body_required=False,
716
+ request_has_path_params=True,
717
+ request_has_query_params=True,
718
+ user_agent_header="user-agent",
719
+ accept_header_value="application/hal+json",
720
+ http_headers=http_headers,
721
+ security=self.sdk_configuration.security,
722
+ get_serialized_body=lambda: utils.serialize_request_body(
723
+ request.update_values_sales_invoice,
724
+ False,
725
+ True,
726
+ "json",
727
+ Optional[models.UpdateValuesSalesInvoice],
728
+ ),
729
+ timeout_ms=timeout_ms,
730
+ )
731
+
732
+ if retries == UNSET:
733
+ if self.sdk_configuration.retry_config is not UNSET:
734
+ retries = self.sdk_configuration.retry_config
735
+ else:
736
+ retries = utils.RetryConfig(
737
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
738
+ )
739
+
740
+ retry_config = None
741
+ if isinstance(retries, utils.RetryConfig):
742
+ retry_config = (retries, ["5xx"])
743
+
744
+ http_res = self.do_request(
745
+ hook_ctx=HookContext(
746
+ config=self.sdk_configuration,
747
+ base_url=base_url or "",
748
+ operation_id="update-sales-invoice",
749
+ oauth2_scopes=None,
750
+ security_source=get_security_from_env(
751
+ self.sdk_configuration.security, models.Security
752
+ ),
753
+ ),
754
+ request=req,
755
+ error_status_codes=["404", "422", "4XX", "5XX"],
756
+ retry_config=retry_config,
757
+ )
758
+
759
+ response_data: Any = None
760
+ if utils.match_response(http_res, "200", "application/hal+json"):
761
+ return unmarshal_json_response(models.SalesInvoiceResponse, http_res)
762
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
763
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
764
+ raise models.ErrorResponse(response_data, http_res)
765
+ if utils.match_response(http_res, "4XX", "*"):
766
+ http_res_text = utils.stream_to_text(http_res)
767
+ raise models.APIError("API error occurred", http_res, http_res_text)
768
+ if utils.match_response(http_res, "5XX", "*"):
769
+ http_res_text = utils.stream_to_text(http_res)
770
+ raise models.APIError("API error occurred", http_res, http_res_text)
771
+
772
+ raise models.APIError("Unexpected response received", http_res)
773
+
774
+ async def update_async(
775
+ self,
776
+ *,
777
+ id: str,
778
+ idempotency_key: Optional[str] = None,
779
+ update_values_sales_invoice: Optional[
780
+ Union[
781
+ models.UpdateValuesSalesInvoice,
782
+ models.UpdateValuesSalesInvoiceTypedDict,
783
+ ]
784
+ ] = None,
785
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
786
+ server_url: Optional[str] = None,
787
+ timeout_ms: Optional[int] = None,
788
+ http_headers: Optional[Mapping[str, str]] = None,
789
+ ) -> models.SalesInvoiceResponse:
790
+ r"""Update sales invoice
791
+
792
+ > 🚧 Beta feature
793
+ >
794
+ > This feature is currently in beta testing, and the final specification may still change.
795
+
796
+ Certain details of an existing sales invoice can be updated. For `draft` it is all values listed below, but for
797
+ statuses `paid` and `issued` there are certain additional requirements (`paymentDetails` and `emailDetails`,
798
+ respectively).
799
+
800
+ :param id: Provide the ID of the item you want to perform this operation on.
801
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
802
+ :param update_values_sales_invoice:
803
+ :param retries: Override the default retry configuration for this method
804
+ :param server_url: Override the default server URL for this method
805
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
806
+ :param http_headers: Additional headers to set or replace on requests.
807
+ """
808
+ base_url = None
809
+ url_variables = None
810
+ if timeout_ms is None:
811
+ timeout_ms = self.sdk_configuration.timeout_ms
812
+
813
+ if server_url is not None:
814
+ base_url = server_url
815
+ else:
816
+ base_url = self._get_url(base_url, url_variables)
817
+
818
+ request = models.UpdateSalesInvoiceRequest(
819
+ id=id,
820
+ idempotency_key=idempotency_key,
821
+ update_values_sales_invoice=utils.get_pydantic_model(
822
+ update_values_sales_invoice, Optional[models.UpdateValuesSalesInvoice]
823
+ ),
824
+ )
825
+
826
+ req = self._build_request_async(
827
+ method="PATCH",
828
+ path="/sales-invoices/{id}",
829
+ base_url=base_url,
830
+ url_variables=url_variables,
831
+ request=request,
832
+ request_body_required=False,
833
+ request_has_path_params=True,
834
+ request_has_query_params=True,
835
+ user_agent_header="user-agent",
836
+ accept_header_value="application/hal+json",
837
+ http_headers=http_headers,
838
+ security=self.sdk_configuration.security,
839
+ get_serialized_body=lambda: utils.serialize_request_body(
840
+ request.update_values_sales_invoice,
841
+ False,
842
+ True,
843
+ "json",
844
+ Optional[models.UpdateValuesSalesInvoice],
845
+ ),
846
+ timeout_ms=timeout_ms,
847
+ )
848
+
849
+ if retries == UNSET:
850
+ if self.sdk_configuration.retry_config is not UNSET:
851
+ retries = self.sdk_configuration.retry_config
852
+ else:
853
+ retries = utils.RetryConfig(
854
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
855
+ )
856
+
857
+ retry_config = None
858
+ if isinstance(retries, utils.RetryConfig):
859
+ retry_config = (retries, ["5xx"])
860
+
861
+ http_res = await self.do_request_async(
862
+ hook_ctx=HookContext(
863
+ config=self.sdk_configuration,
864
+ base_url=base_url or "",
865
+ operation_id="update-sales-invoice",
866
+ oauth2_scopes=None,
867
+ security_source=get_security_from_env(
868
+ self.sdk_configuration.security, models.Security
869
+ ),
870
+ ),
871
+ request=req,
872
+ error_status_codes=["404", "422", "4XX", "5XX"],
873
+ retry_config=retry_config,
874
+ )
875
+
876
+ response_data: Any = None
877
+ if utils.match_response(http_res, "200", "application/hal+json"):
878
+ return unmarshal_json_response(models.SalesInvoiceResponse, http_res)
879
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
880
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
881
+ raise models.ErrorResponse(response_data, http_res)
882
+ if utils.match_response(http_res, "4XX", "*"):
883
+ http_res_text = await utils.stream_to_text_async(http_res)
884
+ raise models.APIError("API error occurred", http_res, http_res_text)
885
+ if utils.match_response(http_res, "5XX", "*"):
886
+ http_res_text = await utils.stream_to_text_async(http_res)
887
+ raise models.APIError("API error occurred", http_res, http_res_text)
888
+
889
+ raise models.APIError("Unexpected response received", http_res)
890
+
891
+ def delete(
892
+ self,
893
+ *,
894
+ id: str,
895
+ idempotency_key: Optional[str] = None,
896
+ delete_values_sales_invoice: Optional[
897
+ Union[
898
+ models.DeleteValuesSalesInvoice,
899
+ models.DeleteValuesSalesInvoiceTypedDict,
900
+ ]
901
+ ] = None,
902
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
903
+ server_url: Optional[str] = None,
904
+ timeout_ms: Optional[int] = None,
905
+ http_headers: Optional[Mapping[str, str]] = None,
906
+ ):
907
+ r"""Delete sales invoice
908
+
909
+ > 🚧 Beta feature
910
+ >
911
+ > This feature is currently in beta testing, and the final specification may still change.
912
+
913
+ Sales invoices which are in status `draft` can be deleted. For all other statuses, please use the
914
+ [Update sales invoice](update-sales-invoice) endpoint instead.
915
+
916
+ :param id: Provide the ID of the item you want to perform this operation on.
917
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
918
+ :param delete_values_sales_invoice:
919
+ :param retries: Override the default retry configuration for this method
920
+ :param server_url: Override the default server URL for this method
921
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
922
+ :param http_headers: Additional headers to set or replace on requests.
923
+ """
924
+ base_url = None
925
+ url_variables = None
926
+ if timeout_ms is None:
927
+ timeout_ms = self.sdk_configuration.timeout_ms
928
+
929
+ if server_url is not None:
930
+ base_url = server_url
931
+ else:
932
+ base_url = self._get_url(base_url, url_variables)
933
+
934
+ request = models.DeleteSalesInvoiceRequest(
935
+ id=id,
936
+ idempotency_key=idempotency_key,
937
+ delete_values_sales_invoice=utils.get_pydantic_model(
938
+ delete_values_sales_invoice, Optional[models.DeleteValuesSalesInvoice]
939
+ ),
940
+ )
941
+
942
+ req = self._build_request(
943
+ method="DELETE",
944
+ path="/sales-invoices/{id}",
945
+ base_url=base_url,
946
+ url_variables=url_variables,
947
+ request=request,
948
+ request_body_required=False,
949
+ request_has_path_params=True,
950
+ request_has_query_params=True,
951
+ user_agent_header="user-agent",
952
+ accept_header_value="application/hal+json",
953
+ http_headers=http_headers,
954
+ security=self.sdk_configuration.security,
955
+ get_serialized_body=lambda: utils.serialize_request_body(
956
+ request.delete_values_sales_invoice,
957
+ False,
958
+ True,
959
+ "json",
960
+ Optional[models.DeleteValuesSalesInvoice],
961
+ ),
962
+ timeout_ms=timeout_ms,
963
+ )
964
+
965
+ if retries == UNSET:
966
+ if self.sdk_configuration.retry_config is not UNSET:
967
+ retries = self.sdk_configuration.retry_config
968
+ else:
969
+ retries = utils.RetryConfig(
970
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
971
+ )
972
+
973
+ retry_config = None
974
+ if isinstance(retries, utils.RetryConfig):
975
+ retry_config = (retries, ["5xx"])
976
+
977
+ http_res = self.do_request(
978
+ hook_ctx=HookContext(
979
+ config=self.sdk_configuration,
980
+ base_url=base_url or "",
981
+ operation_id="delete-sales-invoice",
982
+ oauth2_scopes=None,
983
+ security_source=get_security_from_env(
984
+ self.sdk_configuration.security, models.Security
985
+ ),
986
+ ),
987
+ request=req,
988
+ error_status_codes=["404", "422", "4XX", "5XX"],
989
+ retry_config=retry_config,
990
+ )
991
+
992
+ response_data: Any = None
993
+ if utils.match_response(http_res, "204", "*"):
994
+ return
995
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
996
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
997
+ raise models.ErrorResponse(response_data, http_res)
998
+ if utils.match_response(http_res, "4XX", "*"):
999
+ http_res_text = utils.stream_to_text(http_res)
1000
+ raise models.APIError("API error occurred", http_res, http_res_text)
1001
+ if utils.match_response(http_res, "5XX", "*"):
1002
+ http_res_text = utils.stream_to_text(http_res)
1003
+ raise models.APIError("API error occurred", http_res, http_res_text)
1004
+
1005
+ raise models.APIError("Unexpected response received", http_res)
1006
+
1007
+ async def delete_async(
1008
+ self,
1009
+ *,
1010
+ id: str,
1011
+ idempotency_key: Optional[str] = None,
1012
+ delete_values_sales_invoice: Optional[
1013
+ Union[
1014
+ models.DeleteValuesSalesInvoice,
1015
+ models.DeleteValuesSalesInvoiceTypedDict,
1016
+ ]
1017
+ ] = None,
1018
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1019
+ server_url: Optional[str] = None,
1020
+ timeout_ms: Optional[int] = None,
1021
+ http_headers: Optional[Mapping[str, str]] = None,
1022
+ ):
1023
+ r"""Delete sales invoice
1024
+
1025
+ > 🚧 Beta feature
1026
+ >
1027
+ > This feature is currently in beta testing, and the final specification may still change.
1028
+
1029
+ Sales invoices which are in status `draft` can be deleted. For all other statuses, please use the
1030
+ [Update sales invoice](update-sales-invoice) endpoint instead.
1031
+
1032
+ :param id: Provide the ID of the item you want to perform this operation on.
1033
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
1034
+ :param delete_values_sales_invoice:
1035
+ :param retries: Override the default retry configuration for this method
1036
+ :param server_url: Override the default server URL for this method
1037
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1038
+ :param http_headers: Additional headers to set or replace on requests.
1039
+ """
1040
+ base_url = None
1041
+ url_variables = None
1042
+ if timeout_ms is None:
1043
+ timeout_ms = self.sdk_configuration.timeout_ms
1044
+
1045
+ if server_url is not None:
1046
+ base_url = server_url
1047
+ else:
1048
+ base_url = self._get_url(base_url, url_variables)
1049
+
1050
+ request = models.DeleteSalesInvoiceRequest(
1051
+ id=id,
1052
+ idempotency_key=idempotency_key,
1053
+ delete_values_sales_invoice=utils.get_pydantic_model(
1054
+ delete_values_sales_invoice, Optional[models.DeleteValuesSalesInvoice]
1055
+ ),
1056
+ )
1057
+
1058
+ req = self._build_request_async(
1059
+ method="DELETE",
1060
+ path="/sales-invoices/{id}",
1061
+ base_url=base_url,
1062
+ url_variables=url_variables,
1063
+ request=request,
1064
+ request_body_required=False,
1065
+ request_has_path_params=True,
1066
+ request_has_query_params=True,
1067
+ user_agent_header="user-agent",
1068
+ accept_header_value="application/hal+json",
1069
+ http_headers=http_headers,
1070
+ security=self.sdk_configuration.security,
1071
+ get_serialized_body=lambda: utils.serialize_request_body(
1072
+ request.delete_values_sales_invoice,
1073
+ False,
1074
+ True,
1075
+ "json",
1076
+ Optional[models.DeleteValuesSalesInvoice],
1077
+ ),
1078
+ timeout_ms=timeout_ms,
1079
+ )
1080
+
1081
+ if retries == UNSET:
1082
+ if self.sdk_configuration.retry_config is not UNSET:
1083
+ retries = self.sdk_configuration.retry_config
1084
+ else:
1085
+ retries = utils.RetryConfig(
1086
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
1087
+ )
1088
+
1089
+ retry_config = None
1090
+ if isinstance(retries, utils.RetryConfig):
1091
+ retry_config = (retries, ["5xx"])
1092
+
1093
+ http_res = await self.do_request_async(
1094
+ hook_ctx=HookContext(
1095
+ config=self.sdk_configuration,
1096
+ base_url=base_url or "",
1097
+ operation_id="delete-sales-invoice",
1098
+ oauth2_scopes=None,
1099
+ security_source=get_security_from_env(
1100
+ self.sdk_configuration.security, models.Security
1101
+ ),
1102
+ ),
1103
+ request=req,
1104
+ error_status_codes=["404", "422", "4XX", "5XX"],
1105
+ retry_config=retry_config,
1106
+ )
1107
+
1108
+ response_data: Any = None
1109
+ if utils.match_response(http_res, "204", "*"):
1110
+ return
1111
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
1112
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
1113
+ raise models.ErrorResponse(response_data, http_res)
1114
+ if utils.match_response(http_res, "4XX", "*"):
1115
+ http_res_text = await utils.stream_to_text_async(http_res)
1116
+ raise models.APIError("API error occurred", http_res, http_res_text)
1117
+ if utils.match_response(http_res, "5XX", "*"):
1118
+ http_res_text = await utils.stream_to_text_async(http_res)
1119
+ raise models.APIError("API error occurred", http_res, http_res_text)
1120
+
1121
+ raise models.APIError("Unexpected response received", http_res)