Skip to main content
Upcoming features

Card packages, Belgian IBANs, and more! Check out Swan's public roadmap to see what's in the works. ๐Ÿš€

โš ๏ธ Upcoming breaking changes

๐ŸŒ On March 31, 2026, accountId becomes mandatory in internationalBeneficiaryDynamicForms and internationalCreditTransferTransactionDetailsDynamicForm. It's available now as optional; update your integration before this date.

๐Ÿ“† On April 1, 2026, the following fields will be removed from accountStatement, Account.statements, and generateAccountStatement:

  • fees: replaced by feeCredits and feeDebits.
  • status: replaced by statusInfo.
  • url in type: moved to statusInfo.

โš ๏ธ On April 2, 2026, the following CloseAccountReasonType values will be deprecated to provide more granular reason codes for account opening refusals, capital deposit cancellations, and retroactive account closures:

  • PartnerReason: use RequestedByHolder instead.
  • Inactivity: use DormantAccount instead.
  • CapitalDepositReason: use any of the new specific reason codes instead.

ยท 2 min read

New featuresโ€‹

๐Ÿงญ The new Onboarding API is now live in beta. It improves data collection for better risk assessment and regulatory compliance, and delivers a cleaner developer experience with structured inputs, typed responses, and updated mutations and queries. Documentation is updated to reflect all new validations.

Improvementsโ€‹

๐Ÿ”Ž CapitalDepositDocumentRefusedStatusInfo now includes an optional reason string field with a free-text explanation of why a document was refused. You can view the exact explanation on your Dashboard, alongside the existing reasonCode value.

๐Ÿ” Account holders can now be filtered by their Know Your Customer (KYC) verification requirements, both in the Dashboard and through the API. Supported filters include FirstTransferRequired, SupportingDocumentsRequired, UboDetailsRequired, LegalRepresentativeDetailsRequired, OrganizationDetailsRequired, TaxIdRequired, and Other.

๐Ÿ‘€ Starting April 2, CapitalDepositCaseCanceledStatusInfo gains a cancellation reason code when the case status is Canceled. You can also subscribe to the CapitalDepositCaseEvent.Canceled webhook to receive notifications when a capital deposit case is canceled.

Capital deposit cases canceled before April 2 have a null cancellation reason at the capital deposit level; for those cases, refer to the account-level deprecated closure reason CapitalDepositReason.

API updatesโ€‹

โš ๏ธ Starting April 2, three CloseAccountReasonType values are replaced with more granular codes. The deprecated values are PartnerReason, Inactivity, and CapitalDepositReason, previously used for account opening refusals, capital deposit cancellations, and account closures.

Accounts closed before April 2 keep their original reason codes. Refer to the deprecated reason codes for the full mapping.

Remindersโ€‹

๐Ÿ“ฉ Our new white-labelled email notifications are now live in Production Live. If you have automations in place, check your KYC operations now in Production Sandbox. Affected notifications:

  • Your account terms and conditions
  • First transfer
  • Request supporting documents
  • Request supporting documents reminders
  • Your account is opened
  • Join your banking space

Coming upโ€‹

๐Ÿ›๏ธ In April, weโ€™re rolling out a new whiteโ€‘labelled portal for periodic KYC reviews (โ€œreโ€‘KYCโ€). It lets account admins confirm or update customer details in a multilingual interface, with pre-filled information and automated email reminders.

๐Ÿ’ป A new desktop sign-up flow for Web Banking is coming soon. Authentication and personal information will be completed on desktop: users receive a 6-digit verification code by SMS, enter the code, create a passcode, then enter personal information before switching to mobile to complete identification. This keeps authentication on a single device, reducing exposure to phishing and social engineering attacks. No changes are required on your side.

ยท 2 min read

New featuresโ€‹

๐Ÿ“ฉ Following the December 18 postponement, the new white-labelled email notifications will be activated in Production Live starting March 12. They're now available for testing in Production Sandbox, so you can assess the impact on your KYC operations if you have automations in place.

Our new white-labelled email notifications:

  • Your account terms and conditions
  • First transfer
  • Request supporting documents
  • Request supporting documents reminders
  • Your account is opened
  • Join your banking space

Improvementsโ€‹

๐Ÿ” The sign-in flow for Web Banking on desktop was updated on February 18. Users now receive a 6-digit verification code by SMS, and enter both the code and their passcode on desktop, instead of clicking a link and entering their passcode on mobile. This update improves security by making it harder for unauthorized users to access accounts.

๐Ÿ”‘ We've added idempotency to several mutations, so you can more safely accept payments and fund accounts without risking duplicates:

API updatesโ€‹

Upcoming breaking changesโ€‹

โš ๏ธ Starting April 2, the following CloseAccountReasonType values will be deprecated to provide more granular reason codes for account opening refusals, capital deposit cancellations, and account closures:

  • PartnerReason: use RequestedByHolder instead.
  • Inactivity: use DormantAccount instead.
  • CapitalDepositReason: use any of the new specific reason codes instead.

Remindersโ€‹

๐ŸŒ On March 31, accountId becomes mandatory in internationalBeneficiaryDynamicForms and internationalCreditTransferTransactionDetailsDynamicForm. It's available now as optional; update your integration before this date.

๐Ÿ“† On April 1, the following fields will be removed from accountStatement, Account.statements, and generateAccountStatement:

  • fees: replaced by feeCredits and feeDebits.
  • status: replaced by statusInfo.
  • url in type: moved to statusInfo.

ยท One min read

Improvementsโ€‹

๐Ÿ“„ Starting February 26, B2B received direct debit mandates will return to ConsentInitiationPending status instead of Canceled when consent is refused or expires. This will allow end users to retry activating the mandate using the enableReceivedDirectDebitMandate mutation.

ยท 2 min read

Important updateโ€‹

๐Ÿ“Ž Swan is regenerating all bank details PDFs created before November 4, 2025, to reflect Swan SAS's new address. Bank details generated after this date already contain the new address.

This applies to both main and virtual IBANs. Subscribe to the Account.Updated webhook to synchronize your system. This webhook is triggered only when main IBAN bank details are regenerated. Query your virtual IBANs separately to synchronize them as well.

The process happens in two stages:

  • Starting Friday, January 30, regeneration begins in Production Sandbox.
  • Starting Monday, February 2, regeneration begins in Production Live, pending successful completion of Production Sandbox. It should take one week to complete.

Improvementsโ€‹

๐Ÿงญ SEPA Credit Transfers received without a customer-provided reference now display as empty strings in Web Banking and the API, instead of showing NotProvided.

๐Ÿ“– Identify which user initiated a credit transfer by querying the payment before consent is granted, or by storing user details at the time of initiation.

๐Ÿ”ง The reference field for standing orders has been updated to align with SEPA scheme requirements: the underscore character (_) is no longer accepted. New regex pattern: ^[A-Za-z0-9-?.+\/:,'() ]{1,35}$.

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿ‘ฎ Starting February 5, new rejections apply to the openAccount mutation to prevent fraud patterns involving successive opening and closing of multiple accounts to bypass the account creation limit:

  • All accounts now count toward the maximum limit regardless of status (Opened, Suspended, Closing, or Closed). Previously, only Opened accounts counted. This change affects the existing AccountHolderAccountsCreationLimitRejection.
  • If one or more of the account holder's accounts is Suspended, Swan rejects opening multiple accounts with AccountHolderAccountsSuspendedStatusNotEligibleRejection.

๐Ÿšซ Starting February 26, the following rules apply to limited accounts:

  • Incoming SEPA Credit Transfers (instant or regular) exceeding โ‚ฌ50 are automatically rejected.
  • The maximum cumulative balance is โ‚ฌ150.
  • Any incoming SEPA Credit Transfer, regardless of amount, that would cause the balance to exceed this limit is also rejected.
  • Any incoming SWIFT transfer, regardless of amount, is automatically rejected.

This change mainly affects the first incoming transfer made while the account holder is still completing verification. During verification, the account remains limited, and any transfer exceeding these limits is automatically rejected.

Capital deposit accounts are unaffected, except that all transfers sent on SWIFT are now rejected for these accounts as well.

ยท One min read

New featuresโ€‹

๐Ÿ“– You can now subscribe to email notifications directly from the Changelog. Subscribe to receive regular updates about new features, API improvements, and upcoming breaking changes.

Improvementsโ€‹

๐Ÿ“„ The generateTransactionStatement mutation now works for incoming and outgoing Booked International Credit Transfers. Use it to prove a transaction was executed by Swan.

API updatesโ€‹

Upcoming breaking changesโ€‹

๐ŸŒ Starting January 19, a new accountId field is available as an optional parameter in internationalBeneficiaryDynamicForms and internationalCreditTransferTransactionDetailsDynamicForm. This field becomes mandatory on March 31, 2026. Update your integration before this date to ensure continued support for international credit transfer queries.

Remindersโ€‹

๐Ÿ“† On April 1, the following fields will be removed from the accountStatement and Account.statements queries and from the generateAccountStatement mutation response:

  • fees will be replaced by feeCredits and feeDebits.
  • status will be replaced by the statusInfo object.
  • The statement download url, previously in the type object, will only be available in statusInfo.

ยท One min read

New featuresโ€‹

๐Ÿงญ We're releasing a preview of the documentation for our new onboarding API. Built to strengthen risk assessment and regulatory compliance through improved data collection, it also delivers a better developer experience with cleaner mutations and queries, structured inputs, and typed responses. Full launch is planned for Q1 2026.

Improvementsโ€‹

๐Ÿ“ˆ The Insights tab on your Dashboard now includes new visualizations:

  • Capital deposits: New data improving visibility on iteration time for internal reviews.
  • Support: New dedicated section tracking support tickets, categorization, and SLAs.

Important updateโ€‹

๐Ÿ“ฉ Following an incident during activation of the new white-labelled email notifications announced on December 4, we rolled back to the previous account opening notifications within an hour. The December 18 breaking change for account membership invitations is also postponed.

We plan to activate all new white-labelled notifications in January 2026 with two weeks' notice. You'll be able to test them in Production Sandbox beforehand.

Affected notifications:

  • Your account terms and conditions.
  • First transfer.
  • Request supporting documents.
  • Request supporting documents reminders.
  • Your account is opened.
  • Join your banking space.

ยท 2 min read

New featuresโ€‹

๐Ÿค– Swan's new MCP (Model Context Protocol) servers give AI assistants direct access to Swan's GraphQL schema and documentation. Use them with Claude Desktop, Claude Code, or Cursor to generate accurate queries and get answers about the API.

Improvementsโ€‹

๐Ÿ”— Your users can now upload merchant profile supporting documents directly in Web Banking. Retrieve the upload link from supportingDocumentCollectionUrl in the SupportingDocumentCollection object and share it with them.

๐Ÿ“ฉ Account opening email notifications have been rebranded to support your project's branding (logo, accent colors):

Your current configuration has been applied automatically to avoid disruptions. Swan can configure some of these notifications on your behalf; submit a request if you're interested.

๐Ÿ“ˆ The Insights tab on your Dashboard now includes new visualizations:

  • Capital deposits: New section tracking deposit status, total lead time, and step duration.
  • KYC multi-touch lead time: New graph tracking total verification time for complex cases. The "One-touch vs. multi-touch" graph now focuses on completed processes, with iterations simplified to match service level agreements ("Within 9 hours" vs. "More than 9 hours").

Coming soon: Support operations graphs.

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿ›ก๏ธ Starting December 18, we're introducing stricter input validation for several mutations to improve security and error handling. The following fields now enforce specific formats, returning a ValidationRejection for invalid values:

MutationFieldRequired format
addVirtualIbanEntryaccountIdValid UUID
disableAccountMembershipaccountMembershipIdValid UUID
resumeAccountMembershipaccountMembershipIdValid UUID
resumeAccountMembershipconsentRedirectUrlValid URL

๐Ÿ“ฉ Starting December 18, the account membership invitation notification will be rebranded with your project's branding (logo, accent colors). If you use a forked version of Web Banking, fetch and deploy the latest version from Swan's repository to continue receiving Swan-sent invitation emails.

ยท One min read

Improvementsโ€‹

โœ… The beneficiary name field in the verifyBeneficiary mutation now enforces a maximum length of 70 characters for SEPA beneficiaries and Swan accounts. This matches the maximum length supported for SEPA Credit Transfer initiations, preventing rejections during the payment flow.

๐Ÿ’ณ Recurring SingleUseVirtualCard instances now remain active when their cardholder's account membership is disabled. When that happens, the card automatically reassigns to the account's legal representative, ensuring uninterrupted recurring expenses.

Updatesโ€‹

๐Ÿ“ Starting December 1, Swan Support will no longer manually register SEPA Direct Debit B2B mandates. You can now:

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿงน Starting December 1, the deprecated companyInfoBySiren query will be removed. Company information can now be retrieved directly during onboarding creation and updates, eliminating the need for separate queries.

๐Ÿงน On February 5, 2026, the deprecated status field will be removed from the CapitalDepositCase object. Migrate to the statusInfo field, which was introduced on October 23. This provides more granular status updates, including WaitingForInitialRequirements, PendingInternalReview, and WaitingForAdditionalInformation.

ยท 3 min read

Improvementsโ€‹

We've made improvements to capital deposits to give you better visibility into case progress and more flexibility to correct information without restarting the process.

๐Ÿ” We improved granular status tracking for capital deposit cases by introducing the statusInfo field in the CapitalDepositCase object. This field provides more detailed status updates and replaces the generic WaitingForRequirements status with three clear stages:

  • WaitingForInitialRequirements: Shareholder verification, fund transfers, document uploads, and company onboarding are pending.
  • PendingInternalReview: Swan is reviewing submitted information and documents.
  • WaitingForAdditionalInformation: Swan has requested corrections or additional details.

The existing status field remains available but is deprecated. We recommend migrating to statusInfo for more detailed status information, though you can adopt it at your own pace without breaking your integration. The Dashboard continues to display the status label.

๐Ÿ’ฐ You can now correct shareholder deposit amounts with the updateCapitalDepositShareholderAmount mutation. Requirements:

  • Capital deposit case status is WaitingForInitialRequirements, PendingInternalReview, or WaitingForAdditionalInformation. Also supports the deprecated WaitingForRequirements status.
  • Shareholder status is PendingOnboarding, WaitingForVerification, or WaitingForTransfer.

Updating an amount automatically recalculates the total capital deposit.

๐Ÿฌ You can now correct company details linked to capital deposits with the updateCapitalDepositCompany mutation. This lets you update the company name and postal address. Requirements:

  • Capital deposit case status is WaitingForInitialRequirements, PendingInternalReview, or WaitingForAdditionalInformation. Also supports the deprecated WaitingForRequirements status.
  • Company onboarding is Finalized.

Updates sync automatically across both the capital deposit case and the associated account holder.

๐Ÿ“„ Account statements now feature a more refined structure, clearer field names, and precise status tracking.

  • New Voided status: We've added the Voided status to mark incorrect statements. When a statement is voided, a corrected version automatically regenerates with identical characteristics (format, language, dates). The statusInfo object reflects this new status.
  • Refined fee fields: The fees field is now split into feeCredits (sum of credit fee transactions) and feeDebits (sum of debit fee transactions).
  • Clearer format naming: The type field is now renamed to format.
  • New webhook: AccountStatement.Voided now triggers when a statement is marked asVoided.

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿงน On December 1, the deprecated totalCapitalDepositAmount field will be removed from the CreateCapitalDepositCaseInput object. Instead, specify each shareholder's deposit amount in the individualShareholders and companyShareholders arrays. Swan automatically calculates the total. The calculated total remains available in the CapitalDepositCase response.

โš ๏ธ Starting January 23, 2026, the following fields will be removed from the accountStatement and accountStatements queries and from the generateAccountStatement mutation response:

  • fees is replaced by feeCredits and feeDebits.
  • status is replaced by the statusInfo object.
  • The statement download url, previously in the type object, is now only in statusInfo.

ยท 2 min read

Improvementsโ€‹

๐Ÿ“ญ To improve data quality for physical card orders, we now use a regex to enforce better formatting of the postalCode field in physical addresses.

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿ” Starting November 12:

๐Ÿ’ธ On October 19, we will introduce the following updates to the initiateCreditTransfers endpoint to improve its usability and clarity:

  • The save parameter now defaults to false.
  • The mode parameter is now a required field. The default value is set to Regular.
  • The isMyOwnIban and beneficiaryId input fields have been removed.
  • The API now returns a ValidationRejection error instead of ForbiddenRejection when an input contains invalid data.

Updatesโ€‹

โš–๏ธ Starting October 31, the taxIdentificationNumber will be a mandatory field at onboarding when an account holder's residency country does not match the accountCountry. This is to comply with CRS (Common Reporting Standard) regulations.