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
mollie/payments_sdk.py ADDED
@@ -0,0 +1,1385 @@
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 PaymentsSDK(BaseSDK):
13
+ def create(
14
+ self,
15
+ *,
16
+ include: OptionalNullable[str] = UNSET,
17
+ idempotency_key: Optional[str] = None,
18
+ payment_request: Optional[
19
+ Union[models.PaymentRequest, models.PaymentRequestTypedDict]
20
+ ] = None,
21
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
22
+ server_url: Optional[str] = None,
23
+ timeout_ms: Optional[int] = None,
24
+ http_headers: Optional[Mapping[str, str]] = None,
25
+ ) -> models.PaymentResponse:
26
+ r"""Create payment
27
+
28
+ Payment creation is elemental to the Mollie API: this is where most payment
29
+ implementations start off.
30
+
31
+ Once you have created a payment, you should redirect your customer to the
32
+ URL in the `_links.checkout` property from the response.
33
+
34
+ To wrap your head around the payment process, an explanation and flow charts
35
+ can be found in the 'Accepting payments' guide.
36
+
37
+ If you specify the `method` parameter when creating a payment, optional
38
+ additional parameters may be available for the payment method that are not listed below. Please refer to the
39
+ guide on [method-specific parameters](extra-payment-parameters).
40
+
41
+ :param include: This endpoint allows you to include additional information via the `include` query string parameter.
42
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
43
+ :param payment_request:
44
+ :param retries: Override the default retry configuration for this method
45
+ :param server_url: Override the default server URL for this method
46
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
47
+ :param http_headers: Additional headers to set or replace on requests.
48
+ """
49
+ base_url = None
50
+ url_variables = None
51
+ if timeout_ms is None:
52
+ timeout_ms = self.sdk_configuration.timeout_ms
53
+
54
+ if server_url is not None:
55
+ base_url = server_url
56
+ else:
57
+ base_url = self._get_url(base_url, url_variables)
58
+
59
+ request = models.CreatePaymentRequest(
60
+ include=include,
61
+ idempotency_key=idempotency_key,
62
+ payment_request=utils.get_pydantic_model(
63
+ payment_request, Optional[models.PaymentRequest]
64
+ ),
65
+ )
66
+
67
+ req = self._build_request(
68
+ method="POST",
69
+ path="/payments",
70
+ base_url=base_url,
71
+ url_variables=url_variables,
72
+ request=request,
73
+ request_body_required=False,
74
+ request_has_path_params=False,
75
+ request_has_query_params=True,
76
+ user_agent_header="user-agent",
77
+ accept_header_value="application/hal+json",
78
+ http_headers=http_headers,
79
+ security=self.sdk_configuration.security,
80
+ get_serialized_body=lambda: utils.serialize_request_body(
81
+ request.payment_request,
82
+ False,
83
+ True,
84
+ "json",
85
+ Optional[models.PaymentRequest],
86
+ ),
87
+ timeout_ms=timeout_ms,
88
+ )
89
+
90
+ if retries == UNSET:
91
+ if self.sdk_configuration.retry_config is not UNSET:
92
+ retries = self.sdk_configuration.retry_config
93
+ else:
94
+ retries = utils.RetryConfig(
95
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
96
+ )
97
+
98
+ retry_config = None
99
+ if isinstance(retries, utils.RetryConfig):
100
+ retry_config = (retries, ["5xx"])
101
+
102
+ http_res = self.do_request(
103
+ hook_ctx=HookContext(
104
+ config=self.sdk_configuration,
105
+ base_url=base_url or "",
106
+ operation_id="create-payment",
107
+ oauth2_scopes=None,
108
+ security_source=get_security_from_env(
109
+ self.sdk_configuration.security, models.Security
110
+ ),
111
+ ),
112
+ request=req,
113
+ error_status_codes=["422", "4XX", "503", "5XX"],
114
+ retry_config=retry_config,
115
+ )
116
+
117
+ response_data: Any = None
118
+ if utils.match_response(http_res, "201", "application/hal+json"):
119
+ return unmarshal_json_response(models.PaymentResponse, http_res)
120
+ if utils.match_response(http_res, "422", "application/hal+json"):
121
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
122
+ raise models.ErrorResponse(response_data, http_res)
123
+ if utils.match_response(http_res, "503", "application/hal+json"):
124
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
125
+ raise models.ErrorResponse(response_data, http_res)
126
+ if utils.match_response(http_res, "4XX", "*"):
127
+ http_res_text = utils.stream_to_text(http_res)
128
+ raise models.APIError("API error occurred", http_res, http_res_text)
129
+ if utils.match_response(http_res, "5XX", "*"):
130
+ http_res_text = utils.stream_to_text(http_res)
131
+ raise models.APIError("API error occurred", http_res, http_res_text)
132
+
133
+ raise models.APIError("Unexpected response received", http_res)
134
+
135
+ async def create_async(
136
+ self,
137
+ *,
138
+ include: OptionalNullable[str] = UNSET,
139
+ idempotency_key: Optional[str] = None,
140
+ payment_request: Optional[
141
+ Union[models.PaymentRequest, models.PaymentRequestTypedDict]
142
+ ] = None,
143
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
144
+ server_url: Optional[str] = None,
145
+ timeout_ms: Optional[int] = None,
146
+ http_headers: Optional[Mapping[str, str]] = None,
147
+ ) -> models.PaymentResponse:
148
+ r"""Create payment
149
+
150
+ Payment creation is elemental to the Mollie API: this is where most payment
151
+ implementations start off.
152
+
153
+ Once you have created a payment, you should redirect your customer to the
154
+ URL in the `_links.checkout` property from the response.
155
+
156
+ To wrap your head around the payment process, an explanation and flow charts
157
+ can be found in the 'Accepting payments' guide.
158
+
159
+ If you specify the `method` parameter when creating a payment, optional
160
+ additional parameters may be available for the payment method that are not listed below. Please refer to the
161
+ guide on [method-specific parameters](extra-payment-parameters).
162
+
163
+ :param include: This endpoint allows you to include additional information via the `include` query string parameter.
164
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
165
+ :param payment_request:
166
+ :param retries: Override the default retry configuration for this method
167
+ :param server_url: Override the default server URL for this method
168
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
169
+ :param http_headers: Additional headers to set or replace on requests.
170
+ """
171
+ base_url = None
172
+ url_variables = None
173
+ if timeout_ms is None:
174
+ timeout_ms = self.sdk_configuration.timeout_ms
175
+
176
+ if server_url is not None:
177
+ base_url = server_url
178
+ else:
179
+ base_url = self._get_url(base_url, url_variables)
180
+
181
+ request = models.CreatePaymentRequest(
182
+ include=include,
183
+ idempotency_key=idempotency_key,
184
+ payment_request=utils.get_pydantic_model(
185
+ payment_request, Optional[models.PaymentRequest]
186
+ ),
187
+ )
188
+
189
+ req = self._build_request_async(
190
+ method="POST",
191
+ path="/payments",
192
+ base_url=base_url,
193
+ url_variables=url_variables,
194
+ request=request,
195
+ request_body_required=False,
196
+ request_has_path_params=False,
197
+ request_has_query_params=True,
198
+ user_agent_header="user-agent",
199
+ accept_header_value="application/hal+json",
200
+ http_headers=http_headers,
201
+ security=self.sdk_configuration.security,
202
+ get_serialized_body=lambda: utils.serialize_request_body(
203
+ request.payment_request,
204
+ False,
205
+ True,
206
+ "json",
207
+ Optional[models.PaymentRequest],
208
+ ),
209
+ timeout_ms=timeout_ms,
210
+ )
211
+
212
+ if retries == UNSET:
213
+ if self.sdk_configuration.retry_config is not UNSET:
214
+ retries = self.sdk_configuration.retry_config
215
+ else:
216
+ retries = utils.RetryConfig(
217
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
218
+ )
219
+
220
+ retry_config = None
221
+ if isinstance(retries, utils.RetryConfig):
222
+ retry_config = (retries, ["5xx"])
223
+
224
+ http_res = await self.do_request_async(
225
+ hook_ctx=HookContext(
226
+ config=self.sdk_configuration,
227
+ base_url=base_url or "",
228
+ operation_id="create-payment",
229
+ oauth2_scopes=None,
230
+ security_source=get_security_from_env(
231
+ self.sdk_configuration.security, models.Security
232
+ ),
233
+ ),
234
+ request=req,
235
+ error_status_codes=["422", "4XX", "503", "5XX"],
236
+ retry_config=retry_config,
237
+ )
238
+
239
+ response_data: Any = None
240
+ if utils.match_response(http_res, "201", "application/hal+json"):
241
+ return unmarshal_json_response(models.PaymentResponse, http_res)
242
+ if utils.match_response(http_res, "422", "application/hal+json"):
243
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
244
+ raise models.ErrorResponse(response_data, http_res)
245
+ if utils.match_response(http_res, "503", "application/hal+json"):
246
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
247
+ raise models.ErrorResponse(response_data, http_res)
248
+ if utils.match_response(http_res, "4XX", "*"):
249
+ http_res_text = await utils.stream_to_text_async(http_res)
250
+ raise models.APIError("API error occurred", http_res, http_res_text)
251
+ if utils.match_response(http_res, "5XX", "*"):
252
+ http_res_text = await utils.stream_to_text_async(http_res)
253
+ raise models.APIError("API error occurred", http_res, http_res_text)
254
+
255
+ raise models.APIError("Unexpected response received", http_res)
256
+
257
+ def list(
258
+ self,
259
+ *,
260
+ from_: Optional[str] = None,
261
+ limit: OptionalNullable[int] = UNSET,
262
+ sort: Optional[models.Sorting] = None,
263
+ profile_id: Optional[str] = None,
264
+ testmode: Optional[bool] = None,
265
+ idempotency_key: Optional[str] = None,
266
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
267
+ server_url: Optional[str] = None,
268
+ timeout_ms: Optional[int] = None,
269
+ http_headers: Optional[Mapping[str, str]] = None,
270
+ ) -> models.ListPaymentsResponse:
271
+ r"""List payments
272
+
273
+ Retrieve all payments created with the current website profile.
274
+
275
+ The results are paginated.
276
+
277
+ :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.
278
+ :param limit: The maximum number of items to return. Defaults to 50 items.
279
+ :param sort: Used for setting the direction of the result set. Defaults to descending order, meaning the results are ordered from newest to oldest.
280
+ :param profile_id: The identifier referring to the [profile](get-profile) you wish to retrieve the resources for. Most API credentials are linked to a single profile. In these cases the `profileId` can be omitted. For organization-level credentials such as OAuth access tokens however, the `profileId` parameter is required.
281
+ :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.
282
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
283
+ :param retries: Override the default retry configuration for this method
284
+ :param server_url: Override the default server URL for this method
285
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
286
+ :param http_headers: Additional headers to set or replace on requests.
287
+ """
288
+ base_url = None
289
+ url_variables = None
290
+ if timeout_ms is None:
291
+ timeout_ms = self.sdk_configuration.timeout_ms
292
+
293
+ if server_url is not None:
294
+ base_url = server_url
295
+ else:
296
+ base_url = self._get_url(base_url, url_variables)
297
+
298
+ request = models.ListPaymentsRequest(
299
+ from_=from_,
300
+ limit=limit,
301
+ sort=sort,
302
+ profile_id=profile_id,
303
+ testmode=testmode,
304
+ idempotency_key=idempotency_key,
305
+ )
306
+
307
+ req = self._build_request(
308
+ method="GET",
309
+ path="/payments",
310
+ base_url=base_url,
311
+ url_variables=url_variables,
312
+ request=request,
313
+ request_body_required=False,
314
+ request_has_path_params=False,
315
+ request_has_query_params=True,
316
+ user_agent_header="user-agent",
317
+ accept_header_value="application/hal+json",
318
+ http_headers=http_headers,
319
+ _globals=models.ListPaymentsGlobals(
320
+ profile_id=self.sdk_configuration.globals.profile_id,
321
+ testmode=self.sdk_configuration.globals.testmode,
322
+ ),
323
+ security=self.sdk_configuration.security,
324
+ timeout_ms=timeout_ms,
325
+ )
326
+
327
+ if retries == UNSET:
328
+ if self.sdk_configuration.retry_config is not UNSET:
329
+ retries = self.sdk_configuration.retry_config
330
+ else:
331
+ retries = utils.RetryConfig(
332
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
333
+ )
334
+
335
+ retry_config = None
336
+ if isinstance(retries, utils.RetryConfig):
337
+ retry_config = (retries, ["5xx"])
338
+
339
+ http_res = self.do_request(
340
+ hook_ctx=HookContext(
341
+ config=self.sdk_configuration,
342
+ base_url=base_url or "",
343
+ operation_id="list-payments",
344
+ oauth2_scopes=None,
345
+ security_source=get_security_from_env(
346
+ self.sdk_configuration.security, models.Security
347
+ ),
348
+ ),
349
+ request=req,
350
+ error_status_codes=["400", "4XX", "5XX"],
351
+ retry_config=retry_config,
352
+ )
353
+
354
+ response_data: Any = None
355
+ if utils.match_response(http_res, "200", "application/hal+json"):
356
+ return unmarshal_json_response(models.ListPaymentsResponse, http_res)
357
+ if utils.match_response(http_res, "400", "application/hal+json"):
358
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
359
+ raise models.ErrorResponse(response_data, http_res)
360
+ if utils.match_response(http_res, "4XX", "*"):
361
+ http_res_text = utils.stream_to_text(http_res)
362
+ raise models.APIError("API error occurred", http_res, http_res_text)
363
+ if utils.match_response(http_res, "5XX", "*"):
364
+ http_res_text = utils.stream_to_text(http_res)
365
+ raise models.APIError("API error occurred", http_res, http_res_text)
366
+
367
+ raise models.APIError("Unexpected response received", http_res)
368
+
369
+ async def list_async(
370
+ self,
371
+ *,
372
+ from_: Optional[str] = None,
373
+ limit: OptionalNullable[int] = UNSET,
374
+ sort: Optional[models.Sorting] = None,
375
+ profile_id: Optional[str] = None,
376
+ testmode: Optional[bool] = None,
377
+ idempotency_key: Optional[str] = None,
378
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
379
+ server_url: Optional[str] = None,
380
+ timeout_ms: Optional[int] = None,
381
+ http_headers: Optional[Mapping[str, str]] = None,
382
+ ) -> models.ListPaymentsResponse:
383
+ r"""List payments
384
+
385
+ Retrieve all payments created with the current website profile.
386
+
387
+ The results are paginated.
388
+
389
+ :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.
390
+ :param limit: The maximum number of items to return. Defaults to 50 items.
391
+ :param sort: Used for setting the direction of the result set. Defaults to descending order, meaning the results are ordered from newest to oldest.
392
+ :param profile_id: The identifier referring to the [profile](get-profile) you wish to retrieve the resources for. Most API credentials are linked to a single profile. In these cases the `profileId` can be omitted. For organization-level credentials such as OAuth access tokens however, the `profileId` parameter is required.
393
+ :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.
394
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
395
+ :param retries: Override the default retry configuration for this method
396
+ :param server_url: Override the default server URL for this method
397
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
398
+ :param http_headers: Additional headers to set or replace on requests.
399
+ """
400
+ base_url = None
401
+ url_variables = None
402
+ if timeout_ms is None:
403
+ timeout_ms = self.sdk_configuration.timeout_ms
404
+
405
+ if server_url is not None:
406
+ base_url = server_url
407
+ else:
408
+ base_url = self._get_url(base_url, url_variables)
409
+
410
+ request = models.ListPaymentsRequest(
411
+ from_=from_,
412
+ limit=limit,
413
+ sort=sort,
414
+ profile_id=profile_id,
415
+ testmode=testmode,
416
+ idempotency_key=idempotency_key,
417
+ )
418
+
419
+ req = self._build_request_async(
420
+ method="GET",
421
+ path="/payments",
422
+ base_url=base_url,
423
+ url_variables=url_variables,
424
+ request=request,
425
+ request_body_required=False,
426
+ request_has_path_params=False,
427
+ request_has_query_params=True,
428
+ user_agent_header="user-agent",
429
+ accept_header_value="application/hal+json",
430
+ http_headers=http_headers,
431
+ _globals=models.ListPaymentsGlobals(
432
+ profile_id=self.sdk_configuration.globals.profile_id,
433
+ testmode=self.sdk_configuration.globals.testmode,
434
+ ),
435
+ security=self.sdk_configuration.security,
436
+ timeout_ms=timeout_ms,
437
+ )
438
+
439
+ if retries == UNSET:
440
+ if self.sdk_configuration.retry_config is not UNSET:
441
+ retries = self.sdk_configuration.retry_config
442
+ else:
443
+ retries = utils.RetryConfig(
444
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
445
+ )
446
+
447
+ retry_config = None
448
+ if isinstance(retries, utils.RetryConfig):
449
+ retry_config = (retries, ["5xx"])
450
+
451
+ http_res = await self.do_request_async(
452
+ hook_ctx=HookContext(
453
+ config=self.sdk_configuration,
454
+ base_url=base_url or "",
455
+ operation_id="list-payments",
456
+ oauth2_scopes=None,
457
+ security_source=get_security_from_env(
458
+ self.sdk_configuration.security, models.Security
459
+ ),
460
+ ),
461
+ request=req,
462
+ error_status_codes=["400", "4XX", "5XX"],
463
+ retry_config=retry_config,
464
+ )
465
+
466
+ response_data: Any = None
467
+ if utils.match_response(http_res, "200", "application/hal+json"):
468
+ return unmarshal_json_response(models.ListPaymentsResponse, http_res)
469
+ if utils.match_response(http_res, "400", "application/hal+json"):
470
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
471
+ raise models.ErrorResponse(response_data, http_res)
472
+ if utils.match_response(http_res, "4XX", "*"):
473
+ http_res_text = await utils.stream_to_text_async(http_res)
474
+ raise models.APIError("API error occurred", http_res, http_res_text)
475
+ if utils.match_response(http_res, "5XX", "*"):
476
+ http_res_text = await utils.stream_to_text_async(http_res)
477
+ raise models.APIError("API error occurred", http_res, http_res_text)
478
+
479
+ raise models.APIError("Unexpected response received", http_res)
480
+
481
+ def get(
482
+ self,
483
+ *,
484
+ payment_id: str,
485
+ include: OptionalNullable[str] = UNSET,
486
+ embed: OptionalNullable[str] = UNSET,
487
+ testmode: Optional[bool] = None,
488
+ idempotency_key: Optional[str] = None,
489
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
490
+ server_url: Optional[str] = None,
491
+ timeout_ms: Optional[int] = None,
492
+ http_headers: Optional[Mapping[str, str]] = None,
493
+ ) -> models.PaymentResponse:
494
+ r"""Get payment
495
+
496
+ Retrieve a single payment object by its payment ID.
497
+
498
+ :param payment_id: Provide the ID of the related payment.
499
+ :param include: This endpoint allows you to include additional information via the `include` query string parameter.
500
+ :param embed: This endpoint allows embedding related API items by appending the following values via the `embed` query string parameter.
501
+ :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.
502
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
503
+ :param retries: Override the default retry configuration for this method
504
+ :param server_url: Override the default server URL for this method
505
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
506
+ :param http_headers: Additional headers to set or replace on requests.
507
+ """
508
+ base_url = None
509
+ url_variables = None
510
+ if timeout_ms is None:
511
+ timeout_ms = self.sdk_configuration.timeout_ms
512
+
513
+ if server_url is not None:
514
+ base_url = server_url
515
+ else:
516
+ base_url = self._get_url(base_url, url_variables)
517
+
518
+ request = models.GetPaymentRequest(
519
+ payment_id=payment_id,
520
+ include=include,
521
+ embed=embed,
522
+ testmode=testmode,
523
+ idempotency_key=idempotency_key,
524
+ )
525
+
526
+ req = self._build_request(
527
+ method="GET",
528
+ path="/payments/{paymentId}",
529
+ base_url=base_url,
530
+ url_variables=url_variables,
531
+ request=request,
532
+ request_body_required=False,
533
+ request_has_path_params=True,
534
+ request_has_query_params=True,
535
+ user_agent_header="user-agent",
536
+ accept_header_value="application/hal+json",
537
+ http_headers=http_headers,
538
+ _globals=models.GetPaymentGlobals(
539
+ testmode=self.sdk_configuration.globals.testmode,
540
+ ),
541
+ security=self.sdk_configuration.security,
542
+ timeout_ms=timeout_ms,
543
+ )
544
+
545
+ if retries == UNSET:
546
+ if self.sdk_configuration.retry_config is not UNSET:
547
+ retries = self.sdk_configuration.retry_config
548
+ else:
549
+ retries = utils.RetryConfig(
550
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
551
+ )
552
+
553
+ retry_config = None
554
+ if isinstance(retries, utils.RetryConfig):
555
+ retry_config = (retries, ["5xx"])
556
+
557
+ http_res = self.do_request(
558
+ hook_ctx=HookContext(
559
+ config=self.sdk_configuration,
560
+ base_url=base_url or "",
561
+ operation_id="get-payment",
562
+ oauth2_scopes=None,
563
+ security_source=get_security_from_env(
564
+ self.sdk_configuration.security, models.Security
565
+ ),
566
+ ),
567
+ request=req,
568
+ error_status_codes=["404", "4XX", "5XX"],
569
+ retry_config=retry_config,
570
+ )
571
+
572
+ response_data: Any = None
573
+ if utils.match_response(http_res, "200", "application/hal+json"):
574
+ return unmarshal_json_response(models.PaymentResponse, http_res)
575
+ if utils.match_response(http_res, "404", "application/hal+json"):
576
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
577
+ raise models.ErrorResponse(response_data, http_res)
578
+ if utils.match_response(http_res, "4XX", "*"):
579
+ http_res_text = utils.stream_to_text(http_res)
580
+ raise models.APIError("API error occurred", http_res, http_res_text)
581
+ if utils.match_response(http_res, "5XX", "*"):
582
+ http_res_text = utils.stream_to_text(http_res)
583
+ raise models.APIError("API error occurred", http_res, http_res_text)
584
+
585
+ raise models.APIError("Unexpected response received", http_res)
586
+
587
+ async def get_async(
588
+ self,
589
+ *,
590
+ payment_id: str,
591
+ include: OptionalNullable[str] = UNSET,
592
+ embed: OptionalNullable[str] = UNSET,
593
+ testmode: Optional[bool] = None,
594
+ idempotency_key: Optional[str] = None,
595
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
596
+ server_url: Optional[str] = None,
597
+ timeout_ms: Optional[int] = None,
598
+ http_headers: Optional[Mapping[str, str]] = None,
599
+ ) -> models.PaymentResponse:
600
+ r"""Get payment
601
+
602
+ Retrieve a single payment object by its payment ID.
603
+
604
+ :param payment_id: Provide the ID of the related payment.
605
+ :param include: This endpoint allows you to include additional information via the `include` query string parameter.
606
+ :param embed: This endpoint allows embedding related API items by appending the following values via the `embed` query string parameter.
607
+ :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.
608
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
609
+ :param retries: Override the default retry configuration for this method
610
+ :param server_url: Override the default server URL for this method
611
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
612
+ :param http_headers: Additional headers to set or replace on requests.
613
+ """
614
+ base_url = None
615
+ url_variables = None
616
+ if timeout_ms is None:
617
+ timeout_ms = self.sdk_configuration.timeout_ms
618
+
619
+ if server_url is not None:
620
+ base_url = server_url
621
+ else:
622
+ base_url = self._get_url(base_url, url_variables)
623
+
624
+ request = models.GetPaymentRequest(
625
+ payment_id=payment_id,
626
+ include=include,
627
+ embed=embed,
628
+ testmode=testmode,
629
+ idempotency_key=idempotency_key,
630
+ )
631
+
632
+ req = self._build_request_async(
633
+ method="GET",
634
+ path="/payments/{paymentId}",
635
+ base_url=base_url,
636
+ url_variables=url_variables,
637
+ request=request,
638
+ request_body_required=False,
639
+ request_has_path_params=True,
640
+ request_has_query_params=True,
641
+ user_agent_header="user-agent",
642
+ accept_header_value="application/hal+json",
643
+ http_headers=http_headers,
644
+ _globals=models.GetPaymentGlobals(
645
+ testmode=self.sdk_configuration.globals.testmode,
646
+ ),
647
+ security=self.sdk_configuration.security,
648
+ timeout_ms=timeout_ms,
649
+ )
650
+
651
+ if retries == UNSET:
652
+ if self.sdk_configuration.retry_config is not UNSET:
653
+ retries = self.sdk_configuration.retry_config
654
+ else:
655
+ retries = utils.RetryConfig(
656
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
657
+ )
658
+
659
+ retry_config = None
660
+ if isinstance(retries, utils.RetryConfig):
661
+ retry_config = (retries, ["5xx"])
662
+
663
+ http_res = await self.do_request_async(
664
+ hook_ctx=HookContext(
665
+ config=self.sdk_configuration,
666
+ base_url=base_url or "",
667
+ operation_id="get-payment",
668
+ oauth2_scopes=None,
669
+ security_source=get_security_from_env(
670
+ self.sdk_configuration.security, models.Security
671
+ ),
672
+ ),
673
+ request=req,
674
+ error_status_codes=["404", "4XX", "5XX"],
675
+ retry_config=retry_config,
676
+ )
677
+
678
+ response_data: Any = None
679
+ if utils.match_response(http_res, "200", "application/hal+json"):
680
+ return unmarshal_json_response(models.PaymentResponse, http_res)
681
+ if utils.match_response(http_res, "404", "application/hal+json"):
682
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
683
+ raise models.ErrorResponse(response_data, http_res)
684
+ if utils.match_response(http_res, "4XX", "*"):
685
+ http_res_text = await utils.stream_to_text_async(http_res)
686
+ raise models.APIError("API error occurred", http_res, http_res_text)
687
+ if utils.match_response(http_res, "5XX", "*"):
688
+ http_res_text = await utils.stream_to_text_async(http_res)
689
+ raise models.APIError("API error occurred", http_res, http_res_text)
690
+
691
+ raise models.APIError("Unexpected response received", http_res)
692
+
693
+ def update(
694
+ self,
695
+ *,
696
+ payment_id: str,
697
+ idempotency_key: Optional[str] = None,
698
+ request_body: Optional[
699
+ Union[
700
+ models.UpdatePaymentRequestBody,
701
+ models.UpdatePaymentRequestBodyTypedDict,
702
+ ]
703
+ ] = None,
704
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
705
+ server_url: Optional[str] = None,
706
+ timeout_ms: Optional[int] = None,
707
+ http_headers: Optional[Mapping[str, str]] = None,
708
+ ) -> models.PaymentResponse:
709
+ r"""Update payment
710
+
711
+ Certain details of an existing payment can be updated.
712
+
713
+ Updating the payment details will not result in a webhook call.
714
+
715
+ :param payment_id: Provide the ID of the related payment.
716
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
717
+ :param request_body:
718
+ :param retries: Override the default retry configuration for this method
719
+ :param server_url: Override the default server URL for this method
720
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
721
+ :param http_headers: Additional headers to set or replace on requests.
722
+ """
723
+ base_url = None
724
+ url_variables = None
725
+ if timeout_ms is None:
726
+ timeout_ms = self.sdk_configuration.timeout_ms
727
+
728
+ if server_url is not None:
729
+ base_url = server_url
730
+ else:
731
+ base_url = self._get_url(base_url, url_variables)
732
+
733
+ request = models.UpdatePaymentRequest(
734
+ payment_id=payment_id,
735
+ idempotency_key=idempotency_key,
736
+ request_body=utils.get_pydantic_model(
737
+ request_body, Optional[models.UpdatePaymentRequestBody]
738
+ ),
739
+ )
740
+
741
+ req = self._build_request(
742
+ method="PATCH",
743
+ path="/payments/{paymentId}",
744
+ base_url=base_url,
745
+ url_variables=url_variables,
746
+ request=request,
747
+ request_body_required=False,
748
+ request_has_path_params=True,
749
+ request_has_query_params=True,
750
+ user_agent_header="user-agent",
751
+ accept_header_value="application/hal+json",
752
+ http_headers=http_headers,
753
+ security=self.sdk_configuration.security,
754
+ get_serialized_body=lambda: utils.serialize_request_body(
755
+ request.request_body,
756
+ False,
757
+ True,
758
+ "json",
759
+ Optional[models.UpdatePaymentRequestBody],
760
+ ),
761
+ timeout_ms=timeout_ms,
762
+ )
763
+
764
+ if retries == UNSET:
765
+ if self.sdk_configuration.retry_config is not UNSET:
766
+ retries = self.sdk_configuration.retry_config
767
+ else:
768
+ retries = utils.RetryConfig(
769
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
770
+ )
771
+
772
+ retry_config = None
773
+ if isinstance(retries, utils.RetryConfig):
774
+ retry_config = (retries, ["5xx"])
775
+
776
+ http_res = self.do_request(
777
+ hook_ctx=HookContext(
778
+ config=self.sdk_configuration,
779
+ base_url=base_url or "",
780
+ operation_id="update-payment",
781
+ oauth2_scopes=None,
782
+ security_source=get_security_from_env(
783
+ self.sdk_configuration.security, models.Security
784
+ ),
785
+ ),
786
+ request=req,
787
+ error_status_codes=["404", "422", "4XX", "5XX"],
788
+ retry_config=retry_config,
789
+ )
790
+
791
+ response_data: Any = None
792
+ if utils.match_response(http_res, "200", "application/hal+json"):
793
+ return unmarshal_json_response(models.PaymentResponse, http_res)
794
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
795
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
796
+ raise models.ErrorResponse(response_data, http_res)
797
+ if utils.match_response(http_res, "4XX", "*"):
798
+ http_res_text = utils.stream_to_text(http_res)
799
+ raise models.APIError("API error occurred", http_res, http_res_text)
800
+ if utils.match_response(http_res, "5XX", "*"):
801
+ http_res_text = utils.stream_to_text(http_res)
802
+ raise models.APIError("API error occurred", http_res, http_res_text)
803
+
804
+ raise models.APIError("Unexpected response received", http_res)
805
+
806
+ async def update_async(
807
+ self,
808
+ *,
809
+ payment_id: str,
810
+ idempotency_key: Optional[str] = None,
811
+ request_body: Optional[
812
+ Union[
813
+ models.UpdatePaymentRequestBody,
814
+ models.UpdatePaymentRequestBodyTypedDict,
815
+ ]
816
+ ] = None,
817
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
818
+ server_url: Optional[str] = None,
819
+ timeout_ms: Optional[int] = None,
820
+ http_headers: Optional[Mapping[str, str]] = None,
821
+ ) -> models.PaymentResponse:
822
+ r"""Update payment
823
+
824
+ Certain details of an existing payment can be updated.
825
+
826
+ Updating the payment details will not result in a webhook call.
827
+
828
+ :param payment_id: Provide the ID of the related payment.
829
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
830
+ :param request_body:
831
+ :param retries: Override the default retry configuration for this method
832
+ :param server_url: Override the default server URL for this method
833
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
834
+ :param http_headers: Additional headers to set or replace on requests.
835
+ """
836
+ base_url = None
837
+ url_variables = None
838
+ if timeout_ms is None:
839
+ timeout_ms = self.sdk_configuration.timeout_ms
840
+
841
+ if server_url is not None:
842
+ base_url = server_url
843
+ else:
844
+ base_url = self._get_url(base_url, url_variables)
845
+
846
+ request = models.UpdatePaymentRequest(
847
+ payment_id=payment_id,
848
+ idempotency_key=idempotency_key,
849
+ request_body=utils.get_pydantic_model(
850
+ request_body, Optional[models.UpdatePaymentRequestBody]
851
+ ),
852
+ )
853
+
854
+ req = self._build_request_async(
855
+ method="PATCH",
856
+ path="/payments/{paymentId}",
857
+ base_url=base_url,
858
+ url_variables=url_variables,
859
+ request=request,
860
+ request_body_required=False,
861
+ request_has_path_params=True,
862
+ request_has_query_params=True,
863
+ user_agent_header="user-agent",
864
+ accept_header_value="application/hal+json",
865
+ http_headers=http_headers,
866
+ security=self.sdk_configuration.security,
867
+ get_serialized_body=lambda: utils.serialize_request_body(
868
+ request.request_body,
869
+ False,
870
+ True,
871
+ "json",
872
+ Optional[models.UpdatePaymentRequestBody],
873
+ ),
874
+ timeout_ms=timeout_ms,
875
+ )
876
+
877
+ if retries == UNSET:
878
+ if self.sdk_configuration.retry_config is not UNSET:
879
+ retries = self.sdk_configuration.retry_config
880
+ else:
881
+ retries = utils.RetryConfig(
882
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
883
+ )
884
+
885
+ retry_config = None
886
+ if isinstance(retries, utils.RetryConfig):
887
+ retry_config = (retries, ["5xx"])
888
+
889
+ http_res = await self.do_request_async(
890
+ hook_ctx=HookContext(
891
+ config=self.sdk_configuration,
892
+ base_url=base_url or "",
893
+ operation_id="update-payment",
894
+ oauth2_scopes=None,
895
+ security_source=get_security_from_env(
896
+ self.sdk_configuration.security, models.Security
897
+ ),
898
+ ),
899
+ request=req,
900
+ error_status_codes=["404", "422", "4XX", "5XX"],
901
+ retry_config=retry_config,
902
+ )
903
+
904
+ response_data: Any = None
905
+ if utils.match_response(http_res, "200", "application/hal+json"):
906
+ return unmarshal_json_response(models.PaymentResponse, http_res)
907
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
908
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
909
+ raise models.ErrorResponse(response_data, http_res)
910
+ if utils.match_response(http_res, "4XX", "*"):
911
+ http_res_text = await utils.stream_to_text_async(http_res)
912
+ raise models.APIError("API error occurred", http_res, http_res_text)
913
+ if utils.match_response(http_res, "5XX", "*"):
914
+ http_res_text = await utils.stream_to_text_async(http_res)
915
+ raise models.APIError("API error occurred", http_res, http_res_text)
916
+
917
+ raise models.APIError("Unexpected response received", http_res)
918
+
919
+ def cancel(
920
+ self,
921
+ *,
922
+ payment_id: str,
923
+ idempotency_key: Optional[str] = None,
924
+ request_body: Optional[
925
+ Union[
926
+ models.CancelPaymentRequestBody,
927
+ models.CancelPaymentRequestBodyTypedDict,
928
+ ]
929
+ ] = None,
930
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
931
+ server_url: Optional[str] = None,
932
+ timeout_ms: Optional[int] = None,
933
+ http_headers: Optional[Mapping[str, str]] = None,
934
+ ) -> models.PaymentResponse:
935
+ r"""Cancel payment
936
+
937
+ Depending on the payment method, you may be able to cancel a payment for a certain amount of time — usually until
938
+ the next business day or as long as the payment status is open.
939
+
940
+ Payments may also be canceled manually from the Mollie Dashboard.
941
+
942
+ The `isCancelable` property on the [Payment object](get-payment) will indicate if the payment can be canceled.
943
+
944
+ :param payment_id: Provide the ID of the related payment.
945
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
946
+ :param request_body:
947
+ :param retries: Override the default retry configuration for this method
948
+ :param server_url: Override the default server URL for this method
949
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
950
+ :param http_headers: Additional headers to set or replace on requests.
951
+ """
952
+ base_url = None
953
+ url_variables = None
954
+ if timeout_ms is None:
955
+ timeout_ms = self.sdk_configuration.timeout_ms
956
+
957
+ if server_url is not None:
958
+ base_url = server_url
959
+ else:
960
+ base_url = self._get_url(base_url, url_variables)
961
+
962
+ request = models.CancelPaymentRequest(
963
+ payment_id=payment_id,
964
+ idempotency_key=idempotency_key,
965
+ request_body=utils.get_pydantic_model(
966
+ request_body, Optional[models.CancelPaymentRequestBody]
967
+ ),
968
+ )
969
+
970
+ req = self._build_request(
971
+ method="DELETE",
972
+ path="/payments/{paymentId}",
973
+ base_url=base_url,
974
+ url_variables=url_variables,
975
+ request=request,
976
+ request_body_required=False,
977
+ request_has_path_params=True,
978
+ request_has_query_params=True,
979
+ user_agent_header="user-agent",
980
+ accept_header_value="application/hal+json",
981
+ http_headers=http_headers,
982
+ security=self.sdk_configuration.security,
983
+ get_serialized_body=lambda: utils.serialize_request_body(
984
+ request.request_body,
985
+ False,
986
+ True,
987
+ "json",
988
+ Optional[models.CancelPaymentRequestBody],
989
+ ),
990
+ timeout_ms=timeout_ms,
991
+ )
992
+
993
+ if retries == UNSET:
994
+ if self.sdk_configuration.retry_config is not UNSET:
995
+ retries = self.sdk_configuration.retry_config
996
+ else:
997
+ retries = utils.RetryConfig(
998
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
999
+ )
1000
+
1001
+ retry_config = None
1002
+ if isinstance(retries, utils.RetryConfig):
1003
+ retry_config = (retries, ["5xx"])
1004
+
1005
+ http_res = self.do_request(
1006
+ hook_ctx=HookContext(
1007
+ config=self.sdk_configuration,
1008
+ base_url=base_url or "",
1009
+ operation_id="cancel-payment",
1010
+ oauth2_scopes=None,
1011
+ security_source=get_security_from_env(
1012
+ self.sdk_configuration.security, models.Security
1013
+ ),
1014
+ ),
1015
+ request=req,
1016
+ error_status_codes=["404", "422", "4XX", "5XX"],
1017
+ retry_config=retry_config,
1018
+ )
1019
+
1020
+ response_data: Any = None
1021
+ if utils.match_response(http_res, "200", "application/hal+json"):
1022
+ return unmarshal_json_response(models.PaymentResponse, http_res)
1023
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
1024
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
1025
+ raise models.ErrorResponse(response_data, http_res)
1026
+ if utils.match_response(http_res, "4XX", "*"):
1027
+ http_res_text = utils.stream_to_text(http_res)
1028
+ raise models.APIError("API error occurred", http_res, http_res_text)
1029
+ if utils.match_response(http_res, "5XX", "*"):
1030
+ http_res_text = utils.stream_to_text(http_res)
1031
+ raise models.APIError("API error occurred", http_res, http_res_text)
1032
+
1033
+ raise models.APIError("Unexpected response received", http_res)
1034
+
1035
+ async def cancel_async(
1036
+ self,
1037
+ *,
1038
+ payment_id: str,
1039
+ idempotency_key: Optional[str] = None,
1040
+ request_body: Optional[
1041
+ Union[
1042
+ models.CancelPaymentRequestBody,
1043
+ models.CancelPaymentRequestBodyTypedDict,
1044
+ ]
1045
+ ] = None,
1046
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1047
+ server_url: Optional[str] = None,
1048
+ timeout_ms: Optional[int] = None,
1049
+ http_headers: Optional[Mapping[str, str]] = None,
1050
+ ) -> models.PaymentResponse:
1051
+ r"""Cancel payment
1052
+
1053
+ Depending on the payment method, you may be able to cancel a payment for a certain amount of time — usually until
1054
+ the next business day or as long as the payment status is open.
1055
+
1056
+ Payments may also be canceled manually from the Mollie Dashboard.
1057
+
1058
+ The `isCancelable` property on the [Payment object](get-payment) will indicate if the payment can be canceled.
1059
+
1060
+ :param payment_id: Provide the ID of the related payment.
1061
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
1062
+ :param request_body:
1063
+ :param retries: Override the default retry configuration for this method
1064
+ :param server_url: Override the default server URL for this method
1065
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1066
+ :param http_headers: Additional headers to set or replace on requests.
1067
+ """
1068
+ base_url = None
1069
+ url_variables = None
1070
+ if timeout_ms is None:
1071
+ timeout_ms = self.sdk_configuration.timeout_ms
1072
+
1073
+ if server_url is not None:
1074
+ base_url = server_url
1075
+ else:
1076
+ base_url = self._get_url(base_url, url_variables)
1077
+
1078
+ request = models.CancelPaymentRequest(
1079
+ payment_id=payment_id,
1080
+ idempotency_key=idempotency_key,
1081
+ request_body=utils.get_pydantic_model(
1082
+ request_body, Optional[models.CancelPaymentRequestBody]
1083
+ ),
1084
+ )
1085
+
1086
+ req = self._build_request_async(
1087
+ method="DELETE",
1088
+ path="/payments/{paymentId}",
1089
+ base_url=base_url,
1090
+ url_variables=url_variables,
1091
+ request=request,
1092
+ request_body_required=False,
1093
+ request_has_path_params=True,
1094
+ request_has_query_params=True,
1095
+ user_agent_header="user-agent",
1096
+ accept_header_value="application/hal+json",
1097
+ http_headers=http_headers,
1098
+ security=self.sdk_configuration.security,
1099
+ get_serialized_body=lambda: utils.serialize_request_body(
1100
+ request.request_body,
1101
+ False,
1102
+ True,
1103
+ "json",
1104
+ Optional[models.CancelPaymentRequestBody],
1105
+ ),
1106
+ timeout_ms=timeout_ms,
1107
+ )
1108
+
1109
+ if retries == UNSET:
1110
+ if self.sdk_configuration.retry_config is not UNSET:
1111
+ retries = self.sdk_configuration.retry_config
1112
+ else:
1113
+ retries = utils.RetryConfig(
1114
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
1115
+ )
1116
+
1117
+ retry_config = None
1118
+ if isinstance(retries, utils.RetryConfig):
1119
+ retry_config = (retries, ["5xx"])
1120
+
1121
+ http_res = await self.do_request_async(
1122
+ hook_ctx=HookContext(
1123
+ config=self.sdk_configuration,
1124
+ base_url=base_url or "",
1125
+ operation_id="cancel-payment",
1126
+ oauth2_scopes=None,
1127
+ security_source=get_security_from_env(
1128
+ self.sdk_configuration.security, models.Security
1129
+ ),
1130
+ ),
1131
+ request=req,
1132
+ error_status_codes=["404", "422", "4XX", "5XX"],
1133
+ retry_config=retry_config,
1134
+ )
1135
+
1136
+ response_data: Any = None
1137
+ if utils.match_response(http_res, "200", "application/hal+json"):
1138
+ return unmarshal_json_response(models.PaymentResponse, http_res)
1139
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
1140
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
1141
+ raise models.ErrorResponse(response_data, http_res)
1142
+ if utils.match_response(http_res, "4XX", "*"):
1143
+ http_res_text = await utils.stream_to_text_async(http_res)
1144
+ raise models.APIError("API error occurred", http_res, http_res_text)
1145
+ if utils.match_response(http_res, "5XX", "*"):
1146
+ http_res_text = await utils.stream_to_text_async(http_res)
1147
+ raise models.APIError("API error occurred", http_res, http_res_text)
1148
+
1149
+ raise models.APIError("Unexpected response received", http_res)
1150
+
1151
+ def release_authorization(
1152
+ self,
1153
+ *,
1154
+ payment_id: str,
1155
+ idempotency_key: Optional[str] = None,
1156
+ request_body: Optional[
1157
+ Union[
1158
+ models.ReleaseAuthorizationRequestBody,
1159
+ models.ReleaseAuthorizationRequestBodyTypedDict,
1160
+ ]
1161
+ ] = None,
1162
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1163
+ server_url: Optional[str] = None,
1164
+ timeout_ms: Optional[int] = None,
1165
+ http_headers: Optional[Mapping[str, str]] = None,
1166
+ ):
1167
+ r"""Release payment authorization
1168
+
1169
+ Releases the full remaining authorized amount. Call this endpoint when you will not be making any additional
1170
+ captures. Payment authorizations may also be released manually from the Mollie Dashboard.
1171
+
1172
+ Mollie will do its best to process release requests, but it is not guaranteed that it will succeed. It is up to
1173
+ the issuing bank if and when the hold will be released.
1174
+
1175
+ If the request does succeed, the payment status will change to `canceled` for payments without captures.
1176
+ If there is a successful capture, the payment will transition to `paid`.
1177
+
1178
+ :param payment_id: Provide the ID of the related payment.
1179
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
1180
+ :param request_body:
1181
+ :param retries: Override the default retry configuration for this method
1182
+ :param server_url: Override the default server URL for this method
1183
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1184
+ :param http_headers: Additional headers to set or replace on requests.
1185
+ """
1186
+ base_url = None
1187
+ url_variables = None
1188
+ if timeout_ms is None:
1189
+ timeout_ms = self.sdk_configuration.timeout_ms
1190
+
1191
+ if server_url is not None:
1192
+ base_url = server_url
1193
+ else:
1194
+ base_url = self._get_url(base_url, url_variables)
1195
+
1196
+ request = models.ReleaseAuthorizationRequest(
1197
+ payment_id=payment_id,
1198
+ idempotency_key=idempotency_key,
1199
+ request_body=utils.get_pydantic_model(
1200
+ request_body, Optional[models.ReleaseAuthorizationRequestBody]
1201
+ ),
1202
+ )
1203
+
1204
+ req = self._build_request(
1205
+ method="POST",
1206
+ path="/payments/{paymentId}/release-authorization",
1207
+ base_url=base_url,
1208
+ url_variables=url_variables,
1209
+ request=request,
1210
+ request_body_required=False,
1211
+ request_has_path_params=True,
1212
+ request_has_query_params=True,
1213
+ user_agent_header="user-agent",
1214
+ accept_header_value="application/hal+json",
1215
+ http_headers=http_headers,
1216
+ security=self.sdk_configuration.security,
1217
+ get_serialized_body=lambda: utils.serialize_request_body(
1218
+ request.request_body,
1219
+ False,
1220
+ True,
1221
+ "json",
1222
+ Optional[models.ReleaseAuthorizationRequestBody],
1223
+ ),
1224
+ timeout_ms=timeout_ms,
1225
+ )
1226
+
1227
+ if retries == UNSET:
1228
+ if self.sdk_configuration.retry_config is not UNSET:
1229
+ retries = self.sdk_configuration.retry_config
1230
+ else:
1231
+ retries = utils.RetryConfig(
1232
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
1233
+ )
1234
+
1235
+ retry_config = None
1236
+ if isinstance(retries, utils.RetryConfig):
1237
+ retry_config = (retries, ["5xx"])
1238
+
1239
+ http_res = self.do_request(
1240
+ hook_ctx=HookContext(
1241
+ config=self.sdk_configuration,
1242
+ base_url=base_url or "",
1243
+ operation_id="release-authorization",
1244
+ oauth2_scopes=None,
1245
+ security_source=get_security_from_env(
1246
+ self.sdk_configuration.security, models.Security
1247
+ ),
1248
+ ),
1249
+ request=req,
1250
+ error_status_codes=["404", "422", "4XX", "5XX"],
1251
+ retry_config=retry_config,
1252
+ )
1253
+
1254
+ response_data: Any = None
1255
+ if utils.match_response(http_res, "202", "*"):
1256
+ return
1257
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
1258
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
1259
+ raise models.ErrorResponse(response_data, http_res)
1260
+ if utils.match_response(http_res, "4XX", "*"):
1261
+ http_res_text = utils.stream_to_text(http_res)
1262
+ raise models.APIError("API error occurred", http_res, http_res_text)
1263
+ if utils.match_response(http_res, "5XX", "*"):
1264
+ http_res_text = utils.stream_to_text(http_res)
1265
+ raise models.APIError("API error occurred", http_res, http_res_text)
1266
+
1267
+ raise models.APIError("Unexpected response received", http_res)
1268
+
1269
+ async def release_authorization_async(
1270
+ self,
1271
+ *,
1272
+ payment_id: str,
1273
+ idempotency_key: Optional[str] = None,
1274
+ request_body: Optional[
1275
+ Union[
1276
+ models.ReleaseAuthorizationRequestBody,
1277
+ models.ReleaseAuthorizationRequestBodyTypedDict,
1278
+ ]
1279
+ ] = None,
1280
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1281
+ server_url: Optional[str] = None,
1282
+ timeout_ms: Optional[int] = None,
1283
+ http_headers: Optional[Mapping[str, str]] = None,
1284
+ ):
1285
+ r"""Release payment authorization
1286
+
1287
+ Releases the full remaining authorized amount. Call this endpoint when you will not be making any additional
1288
+ captures. Payment authorizations may also be released manually from the Mollie Dashboard.
1289
+
1290
+ Mollie will do its best to process release requests, but it is not guaranteed that it will succeed. It is up to
1291
+ the issuing bank if and when the hold will be released.
1292
+
1293
+ If the request does succeed, the payment status will change to `canceled` for payments without captures.
1294
+ If there is a successful capture, the payment will transition to `paid`.
1295
+
1296
+ :param payment_id: Provide the ID of the related payment.
1297
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
1298
+ :param request_body:
1299
+ :param retries: Override the default retry configuration for this method
1300
+ :param server_url: Override the default server URL for this method
1301
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1302
+ :param http_headers: Additional headers to set or replace on requests.
1303
+ """
1304
+ base_url = None
1305
+ url_variables = None
1306
+ if timeout_ms is None:
1307
+ timeout_ms = self.sdk_configuration.timeout_ms
1308
+
1309
+ if server_url is not None:
1310
+ base_url = server_url
1311
+ else:
1312
+ base_url = self._get_url(base_url, url_variables)
1313
+
1314
+ request = models.ReleaseAuthorizationRequest(
1315
+ payment_id=payment_id,
1316
+ idempotency_key=idempotency_key,
1317
+ request_body=utils.get_pydantic_model(
1318
+ request_body, Optional[models.ReleaseAuthorizationRequestBody]
1319
+ ),
1320
+ )
1321
+
1322
+ req = self._build_request_async(
1323
+ method="POST",
1324
+ path="/payments/{paymentId}/release-authorization",
1325
+ base_url=base_url,
1326
+ url_variables=url_variables,
1327
+ request=request,
1328
+ request_body_required=False,
1329
+ request_has_path_params=True,
1330
+ request_has_query_params=True,
1331
+ user_agent_header="user-agent",
1332
+ accept_header_value="application/hal+json",
1333
+ http_headers=http_headers,
1334
+ security=self.sdk_configuration.security,
1335
+ get_serialized_body=lambda: utils.serialize_request_body(
1336
+ request.request_body,
1337
+ False,
1338
+ True,
1339
+ "json",
1340
+ Optional[models.ReleaseAuthorizationRequestBody],
1341
+ ),
1342
+ timeout_ms=timeout_ms,
1343
+ )
1344
+
1345
+ if retries == UNSET:
1346
+ if self.sdk_configuration.retry_config is not UNSET:
1347
+ retries = self.sdk_configuration.retry_config
1348
+ else:
1349
+ retries = utils.RetryConfig(
1350
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
1351
+ )
1352
+
1353
+ retry_config = None
1354
+ if isinstance(retries, utils.RetryConfig):
1355
+ retry_config = (retries, ["5xx"])
1356
+
1357
+ http_res = await self.do_request_async(
1358
+ hook_ctx=HookContext(
1359
+ config=self.sdk_configuration,
1360
+ base_url=base_url or "",
1361
+ operation_id="release-authorization",
1362
+ oauth2_scopes=None,
1363
+ security_source=get_security_from_env(
1364
+ self.sdk_configuration.security, models.Security
1365
+ ),
1366
+ ),
1367
+ request=req,
1368
+ error_status_codes=["404", "422", "4XX", "5XX"],
1369
+ retry_config=retry_config,
1370
+ )
1371
+
1372
+ response_data: Any = None
1373
+ if utils.match_response(http_res, "202", "*"):
1374
+ return
1375
+ if utils.match_response(http_res, ["404", "422"], "application/hal+json"):
1376
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
1377
+ raise models.ErrorResponse(response_data, http_res)
1378
+ if utils.match_response(http_res, "4XX", "*"):
1379
+ http_res_text = await utils.stream_to_text_async(http_res)
1380
+ raise models.APIError("API error occurred", http_res, http_res_text)
1381
+ if utils.match_response(http_res, "5XX", "*"):
1382
+ http_res_text = await utils.stream_to_text_async(http_res)
1383
+ raise models.APIError("API error occurred", http_res, http_res_text)
1384
+
1385
+ raise models.APIError("Unexpected response received", http_res)