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/mandates.py ADDED
@@ -0,0 +1,895 @@
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 Mandates(BaseSDK):
13
+ def create(
14
+ self,
15
+ *,
16
+ customer_id: str,
17
+ idempotency_key: Optional[str] = None,
18
+ mandate_request: Optional[
19
+ Union[models.MandateRequest, models.MandateRequestTypedDict]
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.MandateResponse:
26
+ r"""Create mandate
27
+
28
+ Create a mandate for a specific customer. Mandates allow you to charge a customer's card, PayPal account or bank
29
+ account recurrently.
30
+
31
+ It is only possible to create mandates for IBANs and PayPal billing agreements with this endpoint. To create
32
+ mandates for cards, your customers need to perform a 'first payment' with their card.
33
+
34
+ :param customer_id: Provide the ID of the related customer.
35
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
36
+ :param mandate_request:
37
+ :param retries: Override the default retry configuration for this method
38
+ :param server_url: Override the default server URL for this method
39
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
40
+ :param http_headers: Additional headers to set or replace on requests.
41
+ """
42
+ base_url = None
43
+ url_variables = None
44
+ if timeout_ms is None:
45
+ timeout_ms = self.sdk_configuration.timeout_ms
46
+
47
+ if server_url is not None:
48
+ base_url = server_url
49
+ else:
50
+ base_url = self._get_url(base_url, url_variables)
51
+
52
+ request = models.CreateMandateRequest(
53
+ customer_id=customer_id,
54
+ idempotency_key=idempotency_key,
55
+ mandate_request=utils.get_pydantic_model(
56
+ mandate_request, Optional[models.MandateRequest]
57
+ ),
58
+ )
59
+
60
+ req = self._build_request(
61
+ method="POST",
62
+ path="/customers/{customerId}/mandates",
63
+ base_url=base_url,
64
+ url_variables=url_variables,
65
+ request=request,
66
+ request_body_required=False,
67
+ request_has_path_params=True,
68
+ request_has_query_params=True,
69
+ user_agent_header="user-agent",
70
+ accept_header_value="application/hal+json",
71
+ http_headers=http_headers,
72
+ security=self.sdk_configuration.security,
73
+ get_serialized_body=lambda: utils.serialize_request_body(
74
+ request.mandate_request,
75
+ False,
76
+ True,
77
+ "json",
78
+ Optional[models.MandateRequest],
79
+ ),
80
+ timeout_ms=timeout_ms,
81
+ )
82
+
83
+ if retries == UNSET:
84
+ if self.sdk_configuration.retry_config is not UNSET:
85
+ retries = self.sdk_configuration.retry_config
86
+ else:
87
+ retries = utils.RetryConfig(
88
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
89
+ )
90
+
91
+ retry_config = None
92
+ if isinstance(retries, utils.RetryConfig):
93
+ retry_config = (retries, ["5xx"])
94
+
95
+ http_res = self.do_request(
96
+ hook_ctx=HookContext(
97
+ config=self.sdk_configuration,
98
+ base_url=base_url or "",
99
+ operation_id="create-mandate",
100
+ oauth2_scopes=None,
101
+ security_source=get_security_from_env(
102
+ self.sdk_configuration.security, models.Security
103
+ ),
104
+ ),
105
+ request=req,
106
+ error_status_codes=["404", "4XX", "5XX"],
107
+ retry_config=retry_config,
108
+ )
109
+
110
+ response_data: Any = None
111
+ if utils.match_response(http_res, "201", "application/hal+json"):
112
+ return unmarshal_json_response(models.MandateResponse, http_res)
113
+ if utils.match_response(http_res, "404", "application/hal+json"):
114
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
115
+ raise models.ErrorResponse(response_data, http_res)
116
+ if utils.match_response(http_res, "4XX", "*"):
117
+ http_res_text = utils.stream_to_text(http_res)
118
+ raise models.APIError("API error occurred", http_res, http_res_text)
119
+ if utils.match_response(http_res, "5XX", "*"):
120
+ http_res_text = utils.stream_to_text(http_res)
121
+ raise models.APIError("API error occurred", http_res, http_res_text)
122
+
123
+ raise models.APIError("Unexpected response received", http_res)
124
+
125
+ async def create_async(
126
+ self,
127
+ *,
128
+ customer_id: str,
129
+ idempotency_key: Optional[str] = None,
130
+ mandate_request: Optional[
131
+ Union[models.MandateRequest, models.MandateRequestTypedDict]
132
+ ] = None,
133
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
134
+ server_url: Optional[str] = None,
135
+ timeout_ms: Optional[int] = None,
136
+ http_headers: Optional[Mapping[str, str]] = None,
137
+ ) -> models.MandateResponse:
138
+ r"""Create mandate
139
+
140
+ Create a mandate for a specific customer. Mandates allow you to charge a customer's card, PayPal account or bank
141
+ account recurrently.
142
+
143
+ It is only possible to create mandates for IBANs and PayPal billing agreements with this endpoint. To create
144
+ mandates for cards, your customers need to perform a 'first payment' with their card.
145
+
146
+ :param customer_id: Provide the ID of the related customer.
147
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
148
+ :param mandate_request:
149
+ :param retries: Override the default retry configuration for this method
150
+ :param server_url: Override the default server URL for this method
151
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
152
+ :param http_headers: Additional headers to set or replace on requests.
153
+ """
154
+ base_url = None
155
+ url_variables = None
156
+ if timeout_ms is None:
157
+ timeout_ms = self.sdk_configuration.timeout_ms
158
+
159
+ if server_url is not None:
160
+ base_url = server_url
161
+ else:
162
+ base_url = self._get_url(base_url, url_variables)
163
+
164
+ request = models.CreateMandateRequest(
165
+ customer_id=customer_id,
166
+ idempotency_key=idempotency_key,
167
+ mandate_request=utils.get_pydantic_model(
168
+ mandate_request, Optional[models.MandateRequest]
169
+ ),
170
+ )
171
+
172
+ req = self._build_request_async(
173
+ method="POST",
174
+ path="/customers/{customerId}/mandates",
175
+ base_url=base_url,
176
+ url_variables=url_variables,
177
+ request=request,
178
+ request_body_required=False,
179
+ request_has_path_params=True,
180
+ request_has_query_params=True,
181
+ user_agent_header="user-agent",
182
+ accept_header_value="application/hal+json",
183
+ http_headers=http_headers,
184
+ security=self.sdk_configuration.security,
185
+ get_serialized_body=lambda: utils.serialize_request_body(
186
+ request.mandate_request,
187
+ False,
188
+ True,
189
+ "json",
190
+ Optional[models.MandateRequest],
191
+ ),
192
+ timeout_ms=timeout_ms,
193
+ )
194
+
195
+ if retries == UNSET:
196
+ if self.sdk_configuration.retry_config is not UNSET:
197
+ retries = self.sdk_configuration.retry_config
198
+ else:
199
+ retries = utils.RetryConfig(
200
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
201
+ )
202
+
203
+ retry_config = None
204
+ if isinstance(retries, utils.RetryConfig):
205
+ retry_config = (retries, ["5xx"])
206
+
207
+ http_res = await self.do_request_async(
208
+ hook_ctx=HookContext(
209
+ config=self.sdk_configuration,
210
+ base_url=base_url or "",
211
+ operation_id="create-mandate",
212
+ oauth2_scopes=None,
213
+ security_source=get_security_from_env(
214
+ self.sdk_configuration.security, models.Security
215
+ ),
216
+ ),
217
+ request=req,
218
+ error_status_codes=["404", "4XX", "5XX"],
219
+ retry_config=retry_config,
220
+ )
221
+
222
+ response_data: Any = None
223
+ if utils.match_response(http_res, "201", "application/hal+json"):
224
+ return unmarshal_json_response(models.MandateResponse, http_res)
225
+ if utils.match_response(http_res, "404", "application/hal+json"):
226
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
227
+ raise models.ErrorResponse(response_data, http_res)
228
+ if utils.match_response(http_res, "4XX", "*"):
229
+ http_res_text = await utils.stream_to_text_async(http_res)
230
+ raise models.APIError("API error occurred", http_res, http_res_text)
231
+ if utils.match_response(http_res, "5XX", "*"):
232
+ http_res_text = await utils.stream_to_text_async(http_res)
233
+ raise models.APIError("API error occurred", http_res, http_res_text)
234
+
235
+ raise models.APIError("Unexpected response received", http_res)
236
+
237
+ def list(
238
+ self,
239
+ *,
240
+ customer_id: str,
241
+ from_: Optional[str] = None,
242
+ limit: OptionalNullable[int] = UNSET,
243
+ sort: Optional[models.Sorting] = None,
244
+ testmode: Optional[bool] = None,
245
+ idempotency_key: Optional[str] = None,
246
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
247
+ server_url: Optional[str] = None,
248
+ timeout_ms: Optional[int] = None,
249
+ http_headers: Optional[Mapping[str, str]] = None,
250
+ ) -> models.ListMandatesResponse:
251
+ r"""List mandates
252
+
253
+ Retrieve a list of all mandates.
254
+
255
+ The results are paginated.
256
+
257
+ :param customer_id: Provide the ID of the related customer.
258
+ :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.
259
+ :param limit: The maximum number of items to return. Defaults to 50 items.
260
+ :param sort: Used for setting the direction of the result set. Defaults to descending order, meaning the results are ordered from newest to oldest.
261
+ :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.
262
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
263
+ :param retries: Override the default retry configuration for this method
264
+ :param server_url: Override the default server URL for this method
265
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
266
+ :param http_headers: Additional headers to set or replace on requests.
267
+ """
268
+ base_url = None
269
+ url_variables = None
270
+ if timeout_ms is None:
271
+ timeout_ms = self.sdk_configuration.timeout_ms
272
+
273
+ if server_url is not None:
274
+ base_url = server_url
275
+ else:
276
+ base_url = self._get_url(base_url, url_variables)
277
+
278
+ request = models.ListMandatesRequest(
279
+ customer_id=customer_id,
280
+ from_=from_,
281
+ limit=limit,
282
+ sort=sort,
283
+ testmode=testmode,
284
+ idempotency_key=idempotency_key,
285
+ )
286
+
287
+ req = self._build_request(
288
+ method="GET",
289
+ path="/customers/{customerId}/mandates",
290
+ base_url=base_url,
291
+ url_variables=url_variables,
292
+ request=request,
293
+ request_body_required=False,
294
+ request_has_path_params=True,
295
+ request_has_query_params=True,
296
+ user_agent_header="user-agent",
297
+ accept_header_value="application/hal+json",
298
+ http_headers=http_headers,
299
+ _globals=models.ListMandatesGlobals(
300
+ testmode=self.sdk_configuration.globals.testmode,
301
+ ),
302
+ security=self.sdk_configuration.security,
303
+ timeout_ms=timeout_ms,
304
+ )
305
+
306
+ if retries == UNSET:
307
+ if self.sdk_configuration.retry_config is not UNSET:
308
+ retries = self.sdk_configuration.retry_config
309
+ else:
310
+ retries = utils.RetryConfig(
311
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
312
+ )
313
+
314
+ retry_config = None
315
+ if isinstance(retries, utils.RetryConfig):
316
+ retry_config = (retries, ["5xx"])
317
+
318
+ http_res = self.do_request(
319
+ hook_ctx=HookContext(
320
+ config=self.sdk_configuration,
321
+ base_url=base_url or "",
322
+ operation_id="list-mandates",
323
+ oauth2_scopes=None,
324
+ security_source=get_security_from_env(
325
+ self.sdk_configuration.security, models.Security
326
+ ),
327
+ ),
328
+ request=req,
329
+ error_status_codes=["400", "404", "4XX", "5XX"],
330
+ retry_config=retry_config,
331
+ )
332
+
333
+ response_data: Any = None
334
+ if utils.match_response(http_res, "200", "application/hal+json"):
335
+ return unmarshal_json_response(models.ListMandatesResponse, http_res)
336
+ if utils.match_response(http_res, ["400", "404"], "application/hal+json"):
337
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
338
+ raise models.ErrorResponse(response_data, http_res)
339
+ if utils.match_response(http_res, "4XX", "*"):
340
+ http_res_text = utils.stream_to_text(http_res)
341
+ raise models.APIError("API error occurred", http_res, http_res_text)
342
+ if utils.match_response(http_res, "5XX", "*"):
343
+ http_res_text = utils.stream_to_text(http_res)
344
+ raise models.APIError("API error occurred", http_res, http_res_text)
345
+
346
+ raise models.APIError("Unexpected response received", http_res)
347
+
348
+ async def list_async(
349
+ self,
350
+ *,
351
+ customer_id: str,
352
+ from_: Optional[str] = None,
353
+ limit: OptionalNullable[int] = UNSET,
354
+ sort: Optional[models.Sorting] = None,
355
+ testmode: Optional[bool] = None,
356
+ idempotency_key: Optional[str] = None,
357
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
358
+ server_url: Optional[str] = None,
359
+ timeout_ms: Optional[int] = None,
360
+ http_headers: Optional[Mapping[str, str]] = None,
361
+ ) -> models.ListMandatesResponse:
362
+ r"""List mandates
363
+
364
+ Retrieve a list of all mandates.
365
+
366
+ The results are paginated.
367
+
368
+ :param customer_id: Provide the ID of the related customer.
369
+ :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.
370
+ :param limit: The maximum number of items to return. Defaults to 50 items.
371
+ :param sort: Used for setting the direction of the result set. Defaults to descending order, meaning the results are ordered from newest to oldest.
372
+ :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.
373
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
374
+ :param retries: Override the default retry configuration for this method
375
+ :param server_url: Override the default server URL for this method
376
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
377
+ :param http_headers: Additional headers to set or replace on requests.
378
+ """
379
+ base_url = None
380
+ url_variables = None
381
+ if timeout_ms is None:
382
+ timeout_ms = self.sdk_configuration.timeout_ms
383
+
384
+ if server_url is not None:
385
+ base_url = server_url
386
+ else:
387
+ base_url = self._get_url(base_url, url_variables)
388
+
389
+ request = models.ListMandatesRequest(
390
+ customer_id=customer_id,
391
+ from_=from_,
392
+ limit=limit,
393
+ sort=sort,
394
+ testmode=testmode,
395
+ idempotency_key=idempotency_key,
396
+ )
397
+
398
+ req = self._build_request_async(
399
+ method="GET",
400
+ path="/customers/{customerId}/mandates",
401
+ base_url=base_url,
402
+ url_variables=url_variables,
403
+ request=request,
404
+ request_body_required=False,
405
+ request_has_path_params=True,
406
+ request_has_query_params=True,
407
+ user_agent_header="user-agent",
408
+ accept_header_value="application/hal+json",
409
+ http_headers=http_headers,
410
+ _globals=models.ListMandatesGlobals(
411
+ testmode=self.sdk_configuration.globals.testmode,
412
+ ),
413
+ security=self.sdk_configuration.security,
414
+ timeout_ms=timeout_ms,
415
+ )
416
+
417
+ if retries == UNSET:
418
+ if self.sdk_configuration.retry_config is not UNSET:
419
+ retries = self.sdk_configuration.retry_config
420
+ else:
421
+ retries = utils.RetryConfig(
422
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
423
+ )
424
+
425
+ retry_config = None
426
+ if isinstance(retries, utils.RetryConfig):
427
+ retry_config = (retries, ["5xx"])
428
+
429
+ http_res = await self.do_request_async(
430
+ hook_ctx=HookContext(
431
+ config=self.sdk_configuration,
432
+ base_url=base_url or "",
433
+ operation_id="list-mandates",
434
+ oauth2_scopes=None,
435
+ security_source=get_security_from_env(
436
+ self.sdk_configuration.security, models.Security
437
+ ),
438
+ ),
439
+ request=req,
440
+ error_status_codes=["400", "404", "4XX", "5XX"],
441
+ retry_config=retry_config,
442
+ )
443
+
444
+ response_data: Any = None
445
+ if utils.match_response(http_res, "200", "application/hal+json"):
446
+ return unmarshal_json_response(models.ListMandatesResponse, http_res)
447
+ if utils.match_response(http_res, ["400", "404"], "application/hal+json"):
448
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
449
+ raise models.ErrorResponse(response_data, http_res)
450
+ if utils.match_response(http_res, "4XX", "*"):
451
+ http_res_text = await utils.stream_to_text_async(http_res)
452
+ raise models.APIError("API error occurred", http_res, http_res_text)
453
+ if utils.match_response(http_res, "5XX", "*"):
454
+ http_res_text = await utils.stream_to_text_async(http_res)
455
+ raise models.APIError("API error occurred", http_res, http_res_text)
456
+
457
+ raise models.APIError("Unexpected response received", http_res)
458
+
459
+ def get(
460
+ self,
461
+ *,
462
+ customer_id: str,
463
+ mandate_id: str,
464
+ testmode: Optional[bool] = None,
465
+ idempotency_key: Optional[str] = None,
466
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
467
+ server_url: Optional[str] = None,
468
+ timeout_ms: Optional[int] = None,
469
+ http_headers: Optional[Mapping[str, str]] = None,
470
+ ) -> models.MandateResponse:
471
+ r"""Get mandate
472
+
473
+ Retrieve a single mandate by its ID. Depending on the type of mandate, the object will contain the customer's bank
474
+ account details, card details, or PayPal account details.
475
+
476
+ :param customer_id: Provide the ID of the related customer.
477
+ :param mandate_id: Provide the ID of the related mandate.
478
+ :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.
479
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
480
+ :param retries: Override the default retry configuration for this method
481
+ :param server_url: Override the default server URL for this method
482
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
483
+ :param http_headers: Additional headers to set or replace on requests.
484
+ """
485
+ base_url = None
486
+ url_variables = None
487
+ if timeout_ms is None:
488
+ timeout_ms = self.sdk_configuration.timeout_ms
489
+
490
+ if server_url is not None:
491
+ base_url = server_url
492
+ else:
493
+ base_url = self._get_url(base_url, url_variables)
494
+
495
+ request = models.GetMandateRequest(
496
+ customer_id=customer_id,
497
+ mandate_id=mandate_id,
498
+ testmode=testmode,
499
+ idempotency_key=idempotency_key,
500
+ )
501
+
502
+ req = self._build_request(
503
+ method="GET",
504
+ path="/customers/{customerId}/mandates/{mandateId}",
505
+ base_url=base_url,
506
+ url_variables=url_variables,
507
+ request=request,
508
+ request_body_required=False,
509
+ request_has_path_params=True,
510
+ request_has_query_params=True,
511
+ user_agent_header="user-agent",
512
+ accept_header_value="application/hal+json",
513
+ http_headers=http_headers,
514
+ _globals=models.GetMandateGlobals(
515
+ testmode=self.sdk_configuration.globals.testmode,
516
+ ),
517
+ security=self.sdk_configuration.security,
518
+ timeout_ms=timeout_ms,
519
+ )
520
+
521
+ if retries == UNSET:
522
+ if self.sdk_configuration.retry_config is not UNSET:
523
+ retries = self.sdk_configuration.retry_config
524
+ else:
525
+ retries = utils.RetryConfig(
526
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
527
+ )
528
+
529
+ retry_config = None
530
+ if isinstance(retries, utils.RetryConfig):
531
+ retry_config = (retries, ["5xx"])
532
+
533
+ http_res = self.do_request(
534
+ hook_ctx=HookContext(
535
+ config=self.sdk_configuration,
536
+ base_url=base_url or "",
537
+ operation_id="get-mandate",
538
+ oauth2_scopes=None,
539
+ security_source=get_security_from_env(
540
+ self.sdk_configuration.security, models.Security
541
+ ),
542
+ ),
543
+ request=req,
544
+ error_status_codes=["404", "4XX", "5XX"],
545
+ retry_config=retry_config,
546
+ )
547
+
548
+ response_data: Any = None
549
+ if utils.match_response(http_res, "200", "application/hal+json"):
550
+ return unmarshal_json_response(models.MandateResponse, http_res)
551
+ if utils.match_response(http_res, "404", "application/hal+json"):
552
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
553
+ raise models.ErrorResponse(response_data, http_res)
554
+ if utils.match_response(http_res, "4XX", "*"):
555
+ http_res_text = utils.stream_to_text(http_res)
556
+ raise models.APIError("API error occurred", http_res, http_res_text)
557
+ if utils.match_response(http_res, "5XX", "*"):
558
+ http_res_text = utils.stream_to_text(http_res)
559
+ raise models.APIError("API error occurred", http_res, http_res_text)
560
+
561
+ raise models.APIError("Unexpected response received", http_res)
562
+
563
+ async def get_async(
564
+ self,
565
+ *,
566
+ customer_id: str,
567
+ mandate_id: str,
568
+ testmode: Optional[bool] = None,
569
+ idempotency_key: Optional[str] = None,
570
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
571
+ server_url: Optional[str] = None,
572
+ timeout_ms: Optional[int] = None,
573
+ http_headers: Optional[Mapping[str, str]] = None,
574
+ ) -> models.MandateResponse:
575
+ r"""Get mandate
576
+
577
+ Retrieve a single mandate by its ID. Depending on the type of mandate, the object will contain the customer's bank
578
+ account details, card details, or PayPal account details.
579
+
580
+ :param customer_id: Provide the ID of the related customer.
581
+ :param mandate_id: Provide the ID of the related mandate.
582
+ :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.
583
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
584
+ :param retries: Override the default retry configuration for this method
585
+ :param server_url: Override the default server URL for this method
586
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
587
+ :param http_headers: Additional headers to set or replace on requests.
588
+ """
589
+ base_url = None
590
+ url_variables = None
591
+ if timeout_ms is None:
592
+ timeout_ms = self.sdk_configuration.timeout_ms
593
+
594
+ if server_url is not None:
595
+ base_url = server_url
596
+ else:
597
+ base_url = self._get_url(base_url, url_variables)
598
+
599
+ request = models.GetMandateRequest(
600
+ customer_id=customer_id,
601
+ mandate_id=mandate_id,
602
+ testmode=testmode,
603
+ idempotency_key=idempotency_key,
604
+ )
605
+
606
+ req = self._build_request_async(
607
+ method="GET",
608
+ path="/customers/{customerId}/mandates/{mandateId}",
609
+ base_url=base_url,
610
+ url_variables=url_variables,
611
+ request=request,
612
+ request_body_required=False,
613
+ request_has_path_params=True,
614
+ request_has_query_params=True,
615
+ user_agent_header="user-agent",
616
+ accept_header_value="application/hal+json",
617
+ http_headers=http_headers,
618
+ _globals=models.GetMandateGlobals(
619
+ testmode=self.sdk_configuration.globals.testmode,
620
+ ),
621
+ security=self.sdk_configuration.security,
622
+ timeout_ms=timeout_ms,
623
+ )
624
+
625
+ if retries == UNSET:
626
+ if self.sdk_configuration.retry_config is not UNSET:
627
+ retries = self.sdk_configuration.retry_config
628
+ else:
629
+ retries = utils.RetryConfig(
630
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
631
+ )
632
+
633
+ retry_config = None
634
+ if isinstance(retries, utils.RetryConfig):
635
+ retry_config = (retries, ["5xx"])
636
+
637
+ http_res = await self.do_request_async(
638
+ hook_ctx=HookContext(
639
+ config=self.sdk_configuration,
640
+ base_url=base_url or "",
641
+ operation_id="get-mandate",
642
+ oauth2_scopes=None,
643
+ security_source=get_security_from_env(
644
+ self.sdk_configuration.security, models.Security
645
+ ),
646
+ ),
647
+ request=req,
648
+ error_status_codes=["404", "4XX", "5XX"],
649
+ retry_config=retry_config,
650
+ )
651
+
652
+ response_data: Any = None
653
+ if utils.match_response(http_res, "200", "application/hal+json"):
654
+ return unmarshal_json_response(models.MandateResponse, http_res)
655
+ if utils.match_response(http_res, "404", "application/hal+json"):
656
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
657
+ raise models.ErrorResponse(response_data, http_res)
658
+ if utils.match_response(http_res, "4XX", "*"):
659
+ http_res_text = await utils.stream_to_text_async(http_res)
660
+ raise models.APIError("API error occurred", http_res, http_res_text)
661
+ if utils.match_response(http_res, "5XX", "*"):
662
+ http_res_text = await utils.stream_to_text_async(http_res)
663
+ raise models.APIError("API error occurred", http_res, http_res_text)
664
+
665
+ raise models.APIError("Unexpected response received", http_res)
666
+
667
+ def revoke(
668
+ self,
669
+ *,
670
+ customer_id: str,
671
+ mandate_id: str,
672
+ idempotency_key: Optional[str] = None,
673
+ request_body: Optional[
674
+ Union[
675
+ models.RevokeMandateRequestBody,
676
+ models.RevokeMandateRequestBodyTypedDict,
677
+ ]
678
+ ] = None,
679
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
680
+ server_url: Optional[str] = None,
681
+ timeout_ms: Optional[int] = None,
682
+ http_headers: Optional[Mapping[str, str]] = None,
683
+ ):
684
+ r"""Revoke mandate
685
+
686
+ Revoke a customer's mandate. You will no longer be able to charge the customer's bank account or card with this
687
+ mandate, and all connected subscriptions will be canceled.
688
+
689
+ :param customer_id: Provide the ID of the related customer.
690
+ :param mandate_id: Provide the ID of the related mandate.
691
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
692
+ :param request_body:
693
+ :param retries: Override the default retry configuration for this method
694
+ :param server_url: Override the default server URL for this method
695
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
696
+ :param http_headers: Additional headers to set or replace on requests.
697
+ """
698
+ base_url = None
699
+ url_variables = None
700
+ if timeout_ms is None:
701
+ timeout_ms = self.sdk_configuration.timeout_ms
702
+
703
+ if server_url is not None:
704
+ base_url = server_url
705
+ else:
706
+ base_url = self._get_url(base_url, url_variables)
707
+
708
+ request = models.RevokeMandateRequest(
709
+ customer_id=customer_id,
710
+ mandate_id=mandate_id,
711
+ idempotency_key=idempotency_key,
712
+ request_body=utils.get_pydantic_model(
713
+ request_body, Optional[models.RevokeMandateRequestBody]
714
+ ),
715
+ )
716
+
717
+ req = self._build_request(
718
+ method="DELETE",
719
+ path="/customers/{customerId}/mandates/{mandateId}",
720
+ base_url=base_url,
721
+ url_variables=url_variables,
722
+ request=request,
723
+ request_body_required=False,
724
+ request_has_path_params=True,
725
+ request_has_query_params=True,
726
+ user_agent_header="user-agent",
727
+ accept_header_value="application/hal+json",
728
+ http_headers=http_headers,
729
+ security=self.sdk_configuration.security,
730
+ get_serialized_body=lambda: utils.serialize_request_body(
731
+ request.request_body,
732
+ False,
733
+ True,
734
+ "json",
735
+ Optional[models.RevokeMandateRequestBody],
736
+ ),
737
+ timeout_ms=timeout_ms,
738
+ )
739
+
740
+ if retries == UNSET:
741
+ if self.sdk_configuration.retry_config is not UNSET:
742
+ retries = self.sdk_configuration.retry_config
743
+ else:
744
+ retries = utils.RetryConfig(
745
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
746
+ )
747
+
748
+ retry_config = None
749
+ if isinstance(retries, utils.RetryConfig):
750
+ retry_config = (retries, ["5xx"])
751
+
752
+ http_res = self.do_request(
753
+ hook_ctx=HookContext(
754
+ config=self.sdk_configuration,
755
+ base_url=base_url or "",
756
+ operation_id="revoke-mandate",
757
+ oauth2_scopes=None,
758
+ security_source=get_security_from_env(
759
+ self.sdk_configuration.security, models.Security
760
+ ),
761
+ ),
762
+ request=req,
763
+ error_status_codes=["404", "4XX", "5XX"],
764
+ retry_config=retry_config,
765
+ )
766
+
767
+ response_data: Any = None
768
+ if utils.match_response(http_res, "204", "*"):
769
+ return
770
+ if utils.match_response(http_res, "404", "application/hal+json"):
771
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
772
+ raise models.ErrorResponse(response_data, http_res)
773
+ if utils.match_response(http_res, "4XX", "*"):
774
+ http_res_text = utils.stream_to_text(http_res)
775
+ raise models.APIError("API error occurred", http_res, http_res_text)
776
+ if utils.match_response(http_res, "5XX", "*"):
777
+ http_res_text = utils.stream_to_text(http_res)
778
+ raise models.APIError("API error occurred", http_res, http_res_text)
779
+
780
+ raise models.APIError("Unexpected response received", http_res)
781
+
782
+ async def revoke_async(
783
+ self,
784
+ *,
785
+ customer_id: str,
786
+ mandate_id: str,
787
+ idempotency_key: Optional[str] = None,
788
+ request_body: Optional[
789
+ Union[
790
+ models.RevokeMandateRequestBody,
791
+ models.RevokeMandateRequestBodyTypedDict,
792
+ ]
793
+ ] = None,
794
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
795
+ server_url: Optional[str] = None,
796
+ timeout_ms: Optional[int] = None,
797
+ http_headers: Optional[Mapping[str, str]] = None,
798
+ ):
799
+ r"""Revoke mandate
800
+
801
+ Revoke a customer's mandate. You will no longer be able to charge the customer's bank account or card with this
802
+ mandate, and all connected subscriptions will be canceled.
803
+
804
+ :param customer_id: Provide the ID of the related customer.
805
+ :param mandate_id: Provide the ID of the related mandate.
806
+ :param idempotency_key: A unique key to ensure idempotent requests. This key should be a UUID v4 string.
807
+ :param request_body:
808
+ :param retries: Override the default retry configuration for this method
809
+ :param server_url: Override the default server URL for this method
810
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
811
+ :param http_headers: Additional headers to set or replace on requests.
812
+ """
813
+ base_url = None
814
+ url_variables = None
815
+ if timeout_ms is None:
816
+ timeout_ms = self.sdk_configuration.timeout_ms
817
+
818
+ if server_url is not None:
819
+ base_url = server_url
820
+ else:
821
+ base_url = self._get_url(base_url, url_variables)
822
+
823
+ request = models.RevokeMandateRequest(
824
+ customer_id=customer_id,
825
+ mandate_id=mandate_id,
826
+ idempotency_key=idempotency_key,
827
+ request_body=utils.get_pydantic_model(
828
+ request_body, Optional[models.RevokeMandateRequestBody]
829
+ ),
830
+ )
831
+
832
+ req = self._build_request_async(
833
+ method="DELETE",
834
+ path="/customers/{customerId}/mandates/{mandateId}",
835
+ base_url=base_url,
836
+ url_variables=url_variables,
837
+ request=request,
838
+ request_body_required=False,
839
+ request_has_path_params=True,
840
+ request_has_query_params=True,
841
+ user_agent_header="user-agent",
842
+ accept_header_value="application/hal+json",
843
+ http_headers=http_headers,
844
+ security=self.sdk_configuration.security,
845
+ get_serialized_body=lambda: utils.serialize_request_body(
846
+ request.request_body,
847
+ False,
848
+ True,
849
+ "json",
850
+ Optional[models.RevokeMandateRequestBody],
851
+ ),
852
+ timeout_ms=timeout_ms,
853
+ )
854
+
855
+ if retries == UNSET:
856
+ if self.sdk_configuration.retry_config is not UNSET:
857
+ retries = self.sdk_configuration.retry_config
858
+ else:
859
+ retries = utils.RetryConfig(
860
+ "backoff", utils.BackoffStrategy(500, 5000, 2, 7500), True
861
+ )
862
+
863
+ retry_config = None
864
+ if isinstance(retries, utils.RetryConfig):
865
+ retry_config = (retries, ["5xx"])
866
+
867
+ http_res = await self.do_request_async(
868
+ hook_ctx=HookContext(
869
+ config=self.sdk_configuration,
870
+ base_url=base_url or "",
871
+ operation_id="revoke-mandate",
872
+ oauth2_scopes=None,
873
+ security_source=get_security_from_env(
874
+ self.sdk_configuration.security, models.Security
875
+ ),
876
+ ),
877
+ request=req,
878
+ error_status_codes=["404", "4XX", "5XX"],
879
+ retry_config=retry_config,
880
+ )
881
+
882
+ response_data: Any = None
883
+ if utils.match_response(http_res, "204", "*"):
884
+ return
885
+ if utils.match_response(http_res, "404", "application/hal+json"):
886
+ response_data = unmarshal_json_response(models.ErrorResponseData, http_res)
887
+ raise models.ErrorResponse(response_data, http_res)
888
+ if utils.match_response(http_res, "4XX", "*"):
889
+ http_res_text = await utils.stream_to_text_async(http_res)
890
+ raise models.APIError("API error occurred", http_res, http_res_text)
891
+ if utils.match_response(http_res, "5XX", "*"):
892
+ http_res_text = await utils.stream_to_text_async(http_res)
893
+ raise models.APIError("API error occurred", http_res, http_res_text)
894
+
895
+ raise models.APIError("Unexpected response received", http_res)