diff --git a/Adyen/services/balancePlatform/__init__.py b/Adyen/services/balancePlatform/__init__.py index 3a131648..1882f011 100644 --- a/Adyen/services/balancePlatform/__init__.py +++ b/Adyen/services/balancePlatform/__init__.py @@ -5,15 +5,18 @@ from .balances_api import BalancesApi from .bank_account_validation_api import BankAccountValidationApi from .card_orders_api import CardOrdersApi +from .custom_payout_schedules_sweeps_api import CustomPayoutSchedulesSweepsApi from .direct_debit_mandates_api import DirectDebitMandatesApi from .grant_accounts_api import GrantAccountsApi from .grant_offers_api import GrantOffersApi from .manage_card_pin_api import ManageCardPINApi from .manage_sca_devices_api import ManageSCADevicesApi +from .managed_payout_schedules_api import ManagedPayoutSchedulesApi from .network_tokens_api import NetworkTokensApi from .payment_instrument_groups_api import PaymentInstrumentGroupsApi from .payment_instruments_api import PaymentInstrumentsApi from .platform_api import PlatformApi +from .recurring_top_ups_api import RecurringTopUpsApi from .sca_association_management_api import SCAAssociationManagementApi from .sca_device_management_api import SCADeviceManagementApi from .transaction_rules_api import TransactionRulesApi @@ -37,15 +40,18 @@ def __init__(self, client=None): self.balances_api = BalancesApi(client=client) self.bank_account_validation_api = BankAccountValidationApi(client=client) self.card_orders_api = CardOrdersApi(client=client) + self.custom_payout_schedules_sweeps_api = CustomPayoutSchedulesSweepsApi(client=client) self.direct_debit_mandates_api = DirectDebitMandatesApi(client=client) self.grant_accounts_api = GrantAccountsApi(client=client) self.grant_offers_api = GrantOffersApi(client=client) self.manage_sca_devices_api = ManageSCADevicesApi(client=client) self.manage_card_pin_api = ManageCardPINApi(client=client) + self.managed_payout_schedules_api = ManagedPayoutSchedulesApi(client=client) self.network_tokens_api = NetworkTokensApi(client=client) self.payment_instrument_groups_api = PaymentInstrumentGroupsApi(client=client) self.payment_instruments_api = PaymentInstrumentsApi(client=client) self.platform_api = PlatformApi(client=client) + self.recurring_top_ups_api = RecurringTopUpsApi(client=client) self.sca_association_management_api = SCAAssociationManagementApi(client=client) self.sca_device_management_api = SCADeviceManagementApi(client=client) self.transaction_rules_api = TransactionRulesApi(client=client) diff --git a/Adyen/services/balancePlatform/balance_accounts_api.py b/Adyen/services/balancePlatform/balance_accounts_api.py index 7dc10a56..379349bc 100644 --- a/Adyen/services/balancePlatform/balance_accounts_api.py +++ b/Adyen/services/balancePlatform/balance_accounts_api.py @@ -23,36 +23,6 @@ def create_balance_account(self, request, idempotency_key=None, **kwargs): request, self.service, method, endpoint, idempotency_key, **kwargs ) - def create_sweep(self, request, balanceAccountId, idempotency_key=None, **kwargs): - """ - Create a sweep - """ - endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps" - method = "POST" - return self.client.call_adyen_api( - request, self.service, method, endpoint, idempotency_key, **kwargs - ) - - def delete_sweep(self, balanceAccountId, sweepId, idempotency_key=None, **kwargs): - """ - Delete a sweep - """ - endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps/{sweepId}" - method = "DELETE" - return self.client.call_adyen_api( - None, self.service, method, endpoint, idempotency_key, **kwargs - ) - - def get_all_sweeps_for_balance_account(self, balanceAccountId, idempotency_key=None, **kwargs): - """ - Get all sweeps for a balance account - """ - endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps" - method = "GET" - return self.client.call_adyen_api( - None, self.service, method, endpoint, idempotency_key, **kwargs - ) - def get_all_transaction_rules_for_balance_account(self, id, idempotency_key=None, **kwargs): """ Get all transaction rules for a balance account @@ -83,16 +53,6 @@ def get_payment_instruments_linked_to_balance_account(self, id, idempotency_key= None, self.service, method, endpoint, idempotency_key, **kwargs ) - def get_sweep(self, balanceAccountId, sweepId, idempotency_key=None, **kwargs): - """ - Get a sweep - """ - endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps/{sweepId}" - method = "GET" - return self.client.call_adyen_api( - None, self.service, method, endpoint, idempotency_key, **kwargs - ) - def update_balance_account(self, request, id, idempotency_key=None, **kwargs): """ Update a balance account @@ -102,13 +62,3 @@ def update_balance_account(self, request, id, idempotency_key=None, **kwargs): return self.client.call_adyen_api( request, self.service, method, endpoint, idempotency_key, **kwargs ) - - def update_sweep(self, request, balanceAccountId, sweepId, idempotency_key=None, **kwargs): - """ - Update a sweep - """ - endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps/{sweepId}" - method = "PATCH" - return self.client.call_adyen_api( - request, self.service, method, endpoint, idempotency_key, **kwargs - ) diff --git a/Adyen/services/balancePlatform/custom_payout_schedules_sweeps_api.py b/Adyen/services/balancePlatform/custom_payout_schedules_sweeps_api.py new file mode 100644 index 00000000..cdaf72c7 --- /dev/null +++ b/Adyen/services/balancePlatform/custom_payout_schedules_sweeps_api.py @@ -0,0 +1,64 @@ +from ..base import AdyenServiceBase + + +class CustomPayoutSchedulesSweepsApi(AdyenServiceBase): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, client=None): + super().__init__(client=client) + self.service = "balancePlatform" + self.baseUrl = "https://balanceplatform-api-test.adyen.com/bcl/v2" + + def create_sweep(self, request, balanceAccountId, idempotency_key=None, **kwargs): + """ + Create a sweep + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps" + method = "POST" + return self.client.call_adyen_api( + request, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def delete_sweep(self, balanceAccountId, sweepId, idempotency_key=None, **kwargs): + """ + Delete a sweep + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps/{sweepId}" + method = "DELETE" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def get_all_sweeps_for_balance_account(self, balanceAccountId, idempotency_key=None, **kwargs): + """ + Get all sweeps for a balance account + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps" + method = "GET" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def get_sweep(self, balanceAccountId, sweepId, idempotency_key=None, **kwargs): + """ + Get a sweep + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps/{sweepId}" + method = "GET" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def update_sweep(self, request, balanceAccountId, sweepId, idempotency_key=None, **kwargs): + """ + Update a sweep + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/sweeps/{sweepId}" + method = "PATCH" + return self.client.call_adyen_api( + request, self.service, method, endpoint, idempotency_key, **kwargs + ) diff --git a/Adyen/services/balancePlatform/managed_payout_schedules_api.py b/Adyen/services/balancePlatform/managed_payout_schedules_api.py new file mode 100644 index 00000000..e61e3803 --- /dev/null +++ b/Adyen/services/balancePlatform/managed_payout_schedules_api.py @@ -0,0 +1,108 @@ +from ..base import AdyenServiceBase + + +class ManagedPayoutSchedulesApi(AdyenServiceBase): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, client=None): + super().__init__(client=client) + self.service = "balancePlatform" + self.baseUrl = "https://balanceplatform-api-test.adyen.com/bcl/v2" + + def apply_managed_schedule(self, request, balanceAccountId, idempotency_key=None, **kwargs): + """ + Apply a managed payout schedule to a balance account + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/payoutSchedules" + method = "POST" + return self.client.call_adyen_api( + request, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def delete_balance_account_managed_schedule( + self, balanceAccountId, id, idempotency_key=None, **kwargs + ): + """ + Delete a managed payout schedule on a balance account + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/payoutSchedules/{id}" + method = "DELETE" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def get_balance_account_managed_schedule_by_id( + self, balanceAccountId, id, idempotency_key=None, **kwargs + ): + """ + Get a specific managed payout schedule on a balance account + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/payoutSchedules/{id}" + method = "GET" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def get_balance_account_managed_schedules( + self, balanceAccountId, idempotency_key=None, **kwargs + ): + """ + Get all managed payout schedules on a balance account + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/payoutSchedules" + method = "GET" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def get_balance_platform_managed_schedule_by_id( + self, balancePlatformId, id, idempotency_key=None, **kwargs + ): + """ + Get a specific managed payout schedule on your balance platform + """ + endpoint = self.baseUrl + f"/balancePlatforms/{balancePlatformId}/payoutSchedules/{id}" + method = "GET" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def get_balance_platform_managed_schedules( + self, balancePlatformId, idempotency_key=None, **kwargs + ): + """ + Get all managed payout schedules on your balance platform + """ + endpoint = self.baseUrl + f"/balancePlatforms/{balancePlatformId}/payoutSchedules" + method = "GET" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def get_payout_schedule_executions(self, balanceAccountId, id, idempotency_key=None, **kwargs): + """ + View executions of a managed payout schedule + """ + endpoint = ( + self.baseUrl + f"/balanceAccounts/{balanceAccountId}/payoutSchedules/{id}/executions" + ) + method = "GET" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def update_balance_account_managed_schedule( + self, request, balanceAccountId, id, idempotency_key=None, **kwargs + ): + """ + Update a managed payout schedule on a balance account + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/payoutSchedules/{id}" + method = "PATCH" + return self.client.call_adyen_api( + request, self.service, method, endpoint, idempotency_key, **kwargs + ) diff --git a/Adyen/services/balancePlatform/recurring_top_ups_api.py b/Adyen/services/balancePlatform/recurring_top_ups_api.py new file mode 100644 index 00000000..34a0fd7a --- /dev/null +++ b/Adyen/services/balancePlatform/recurring_top_ups_api.py @@ -0,0 +1,56 @@ +from ..base import AdyenServiceBase + + +class RecurringTopUpsApi(AdyenServiceBase): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, client=None): + super().__init__(client=client) + self.service = "balancePlatform" + self.baseUrl = "https://balanceplatform-api-test.adyen.com/bcl/v2" + + def create_recurring_top_up(self, request, balanceAccountId, idempotency_key=None, **kwargs): + """ + Create recurring top up + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/recurringTopUps" + method = "POST" + return self.client.call_adyen_api( + request, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def delete_recurring_top_up(self, balanceAccountId, topUpId, idempotency_key=None, **kwargs): + """ + Delete a recurring top up + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/recurringTopUps/{topUpId}" + method = "DELETE" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def get_recurring_top_ups(self, balanceAccountId, idempotency_key=None, **kwargs): + """ + Get recurring top ups for a specific balanceAccountId + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/recurringTopUps" + method = "GET" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + + def update_recurring_top_ups( + self, request, balanceAccountId, topUpId, idempotency_key=None, **kwargs + ): + """ + Update a RecurringTopUp + """ + endpoint = self.baseUrl + f"/balanceAccounts/{balanceAccountId}/recurringTopUps/{topUpId}" + method = "PATCH" + return self.client.call_adyen_api( + request, self.service, method, endpoint, idempotency_key, **kwargs + ) diff --git a/Adyen/services/balancePlatform/sca_device_management_api.py b/Adyen/services/balancePlatform/sca_device_management_api.py index c43bd777..934821b0 100644 --- a/Adyen/services/balancePlatform/sca_device_management_api.py +++ b/Adyen/services/balancePlatform/sca_device_management_api.py @@ -23,6 +23,16 @@ def begin_sca_device_registration(self, request, idempotency_key=None, **kwargs) request, self.service, method, endpoint, idempotency_key, **kwargs ) + def delete_sca_device(self, deviceId, idempotency_key=None, **kwargs): + """ + Delete an SCA device + """ + endpoint = self.baseUrl + f"/scaDevices/{deviceId}" + method = "DELETE" + return self.client.call_adyen_api( + None, self.service, method, endpoint, idempotency_key, **kwargs + ) + def finish_sca_device_registration(self, request, deviceId, idempotency_key=None, **kwargs): """ Finish registration process for a SCA device diff --git a/sdk-generation-log/balanceplatform.json b/sdk-generation-log/balanceplatform.json new file mode 100644 index 00000000..8cf06e83 --- /dev/null +++ b/sdk-generation-log/balanceplatform.json @@ -0,0 +1,8 @@ +{ + "service": "balanceplatform", + "project": "python", + "generatedAt": "2026-09-10T20:56:09Z", + "openapiCommitSha": "c4e0d44cf6c0f3dcdff65be8e250fdbfa9da1076", + "automationCommitSha": "d34376385296d6c542a454096b5081b467e00415", + "libraryCommitSha": "b6f49792b79c23e2674b35c04dd045aa07daf599" +} diff --git a/test/BalancePlatformTest.py b/test/BalancePlatformTest.py index fbb30d85..5b4f86b1 100644 --- a/test/BalancePlatformTest.py +++ b/test/BalancePlatformTest.py @@ -150,7 +150,7 @@ def test_create_sweep(self): self.adyen.client = self.test.create_client_from_file( 200, request, "test/mocks/configuration/sweep-created.json" ) - result = self.adyen.balancePlatform.balance_accounts_api.create_sweep( + result = self.adyen.balancePlatform.custom_payout_schedules_sweeps_api.create_sweep( request, balance_account_id ) self.assertEqual("SWPC4227C224555B5FTD2NT2JV4WN5", result.message["id"]) @@ -169,7 +169,7 @@ def test_get_sweep(self): self.adyen.client = self.test.create_client_from_file( 200, None, "test/mocks/configuration/sweep-created.json" ) - result = self.adyen.balancePlatform.balance_accounts_api.get_sweep( + result = self.adyen.balancePlatform.custom_payout_schedules_sweeps_api.get_sweep( balance_account_id, sweep_id ) self.assertEqual(sweep_id, result.message["id"]) @@ -192,7 +192,7 @@ def test_update_sweep(self): self.adyen.client = self.test.create_client_from_file( 200, request, "test/mocks/configuration/sweep-updated.json" ) - result = self.adyen.balancePlatform.balance_accounts_api.update_sweep( + result = self.adyen.balancePlatform.custom_payout_schedules_sweeps_api.update_sweep( request, balance_account_id, sweep_id ) self.assertEqual(sweep_id, result.message["id"]) @@ -209,7 +209,7 @@ def test_delete_sweep(self): balance_account_id = "BA32272223222B59CZ3T52DKZ" sweep_id = "SWPC4227C224555B5FTD2NT2JV4WN5" self.adyen.client = self.test.create_client_from_file(204, None) - result = self.adyen.balancePlatform.balance_accounts_api.delete_sweep( + result = self.adyen.balancePlatform.custom_payout_schedules_sweeps_api.delete_sweep( balance_account_id, sweep_id ) self.assertEqual(204, result.status_code) @@ -226,7 +226,7 @@ def test_get_all_sweeps_for_balance_account(self): self.adyen.client = self.test.create_client_from_file( 200, None, "test/mocks/configuration/sweeps-list.json" ) - result = self.adyen.balancePlatform.balance_accounts_api.get_all_sweeps_for_balance_account( + result = self.adyen.balancePlatform.custom_payout_schedules_sweeps_api.get_all_sweeps_for_balance_account( balance_account_id ) self.assertEqual(1, len(result.message["sweeps"])) @@ -481,3 +481,158 @@ def test_get_tax_form_summary(self): json=None, xapikey="YourXapikey", ) + + def test_managed_payout_schedules(self): + balance_account_id = "BA32272223222B59CZ3T52DKZ" + balance_platform_id = "YOUR_BALANCE_PLATFORM" + schedule_id = "MPS00000000000000000000000001" + request = {"schedule": {"type": "daily"}} + api = self.adyen.balancePlatform.managed_payout_schedules_api + test_cases = [ + ( + "apply managed schedule", + api.apply_managed_schedule, + (request, balance_account_id), + "POST", + f"/balanceAccounts/{balance_account_id}/payoutSchedules", + request, + ), + ( + "delete balance account managed schedule", + api.delete_balance_account_managed_schedule, + (balance_account_id, schedule_id), + "DELETE", + f"/balanceAccounts/{balance_account_id}/payoutSchedules/{schedule_id}", + None, + ), + ( + "get balance account managed schedule", + api.get_balance_account_managed_schedule_by_id, + (balance_account_id, schedule_id), + "GET", + f"/balanceAccounts/{balance_account_id}/payoutSchedules/{schedule_id}", + None, + ), + ( + "get balance account managed schedules", + api.get_balance_account_managed_schedules, + (balance_account_id,), + "GET", + f"/balanceAccounts/{balance_account_id}/payoutSchedules", + None, + ), + ( + "get balance platform managed schedule", + api.get_balance_platform_managed_schedule_by_id, + (balance_platform_id, schedule_id), + "GET", + f"/balancePlatforms/{balance_platform_id}/payoutSchedules/{schedule_id}", + None, + ), + ( + "get balance platform managed schedules", + api.get_balance_platform_managed_schedules, + (balance_platform_id,), + "GET", + f"/balancePlatforms/{balance_platform_id}/payoutSchedules", + None, + ), + ( + "get payout schedule executions", + api.get_payout_schedule_executions, + (balance_account_id, schedule_id), + "GET", + f"/balanceAccounts/{balance_account_id}/payoutSchedules/{schedule_id}/executions", + None, + ), + ( + "update balance account managed schedule", + api.update_balance_account_managed_schedule, + (request, balance_account_id, schedule_id), + "PATCH", + f"/balanceAccounts/{balance_account_id}/payoutSchedules/{schedule_id}", + request, + ), + ] + + for name, method, arguments, http_method, path, payload in test_cases: + with self.subTest(name=name): + self.adyen.client = self.test.create_client_from_file(200, payload) + method(*arguments) + self.adyen.client.http_client.request.assert_called_once_with( + http_method, + f"{self.balance_platform_url}{path}", + headers=self.expected_headers, + json=payload, + xapikey="YourXapikey", + ) + + def test_recurring_top_ups(self): + balance_account_id = "BA32272223222B59CZ3T52DKZ" + top_up_id = "RTU00000000000000000000000001" + request = { + "amount": {"currency": "EUR", "value": 1000}, + "frequency": "monthly", + } + api = self.adyen.balancePlatform.recurring_top_ups_api + test_cases = [ + ( + "create recurring top up", + api.create_recurring_top_up, + (request, balance_account_id), + "POST", + f"/balanceAccounts/{balance_account_id}/recurringTopUps", + request, + ), + ( + "delete recurring top up", + api.delete_recurring_top_up, + (balance_account_id, top_up_id), + "DELETE", + f"/balanceAccounts/{balance_account_id}/recurringTopUps/{top_up_id}", + None, + ), + ( + "get recurring top ups", + api.get_recurring_top_ups, + (balance_account_id,), + "GET", + f"/balanceAccounts/{balance_account_id}/recurringTopUps", + None, + ), + ( + "update recurring top up", + api.update_recurring_top_ups, + (request, balance_account_id, top_up_id), + "PATCH", + f"/balanceAccounts/{balance_account_id}/recurringTopUps/{top_up_id}", + request, + ), + ] + + for name, method, arguments, http_method, path, payload in test_cases: + with self.subTest(name=name): + self.adyen.client = self.test.create_client_from_file(200, payload) + method(*arguments) + self.adyen.client.http_client.request.assert_called_once_with( + http_method, + f"{self.balance_platform_url}{path}", + headers=self.expected_headers, + json=payload, + xapikey="YourXapikey", + ) + + def test_delete_sca_device(self): + device_id = "SCA00000000000000000000000001" + self.adyen.client = self.test.create_client_from_file(204, None) + + result = self.adyen.balancePlatform.sca_device_management_api.delete_sca_device(device_id) + + self.assertEqual(204, result.status_code) + self.adyen.client.http_client.request.assert_called_once_with( + "DELETE", + f"{self.balance_platform_url}/scaDevices/{device_id}", + headers=self.expected_headers, + json=None, + xapikey="YourXapikey", + )