Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.

Skip to main content
Upcoming features

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

โš ๏ธ Upcoming breaking changes

โœ”๏ธ Starting October 31st, the beneficiaryVerification query will be deprecated. Use the verifyBeneficiary mutation instead to ensure uninterrupted service.

โš–๏ธ Starting October 31st, 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.

๐Ÿ“„ On November 12th:

๐Ÿ“ Starting November 12th, the onboarding(id: ID!) query may return null when no onboarding exists for the given ID, instead of always returning an Onboarding object.

๐Ÿงน On December 1st, the deprecated totalCapitalDepositAmount field will be removed from the CreateCapitalDepositCaseInput object. The total is now computed automatically from shareholder contribution amounts. It remains available in responses.

โš ๏ธ Starting January 23rd, 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.

ยท 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 1st, 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 23rd, 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 12th:

๐Ÿ’ธ On October 19th, 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 31st, 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.

ยท 3 min read

New featuresโ€‹

๐Ÿฆ With Multiple Accounts, company account holders can create additional accounts without repeating onboarding or Know Your Business (KYB) processes.

Improvementsโ€‹

๐Ÿšš We've added LaPosteTracked as a new shipping method for international card deliveries. This gives cardholders outside of France a reliable way to track their card's delivery from our printing hub.

๐Ÿ“„ We've made it easier to reconcile payments by allowing you to use structured and unstructured formats for invoice references in transactions. For SEPA Credit Transfers, use the labelType field to choose the reference standard and the label field for the value. When you retrieve transaction data, this value will be in the transaction.label. You can also specify the ogmVcs type for Belgian OGM VCS references.

Verification of Payee (VoP) updatesโ€‹

โš ๏ธ The following updates are currently available in our Sandbox environment and will be released to the Live environment on October 9th.

๐Ÿ’ธ initiateCreditTransfers endpoint updatesโ€‹

๐Ÿ“… scheduleStandingOrder endpoint updatesโ€‹

  • When calling the scheduleStandingOrder mutation, we'll automatically verify the beneficiary's details and display the results in the consent screen.
  • A new beneficiaryVerificationResult field has been added to the ScheduleStandingOrderSuccessPayload.

๐Ÿ“’ You can now retrieve the beneficiaryVerificationResult using the transaction, transactions, standingOrder, and TrustedBeneficiary queries.

VoP rolloutโ€‹

๐Ÿ“ฅ Starting October 5th, we'll automatically handle all incoming VoP requests from other Payment Service Providers (PSPs). Beneficiary details will be verified, and the result will be returned to the PSP before funds are transferred into a Swan account. No action is required from you.

๐Ÿƒ On October 9th, company accounts will be opted out of VoP for bulk credit transfers by default, while individual accounts will be opted in. You can change the setting for bulk transfers with the updateAccountSettings mutation, once the verifyBeneficiary mutation is implemented.

๐Ÿ“ก On October 9th, the verifyBeneficiary mutation will be available to verify beneficiary details before initiating credit transfers. Use the save parameter to add a trusted beneficiary when the returned token successfully initiates the credit transfer.

๐Ÿ“ฉ On October 19th, the save parameter of the verifyBeneficiary mutation will default to false.

Upcoming breaking changesโ€‹

๐Ÿ›‘ Starting October 9th, the initiateCreditTransfers mutation will return a new rejection reason if the BeneficiaryVerificationToken was already used to initiate another credit transfer.

โœ”๏ธ Starting October 31st, the beneficiaryVerification query will be deprecated. Use the verifyBeneficiary mutation instead to ensure uninterrupted service.

ยท 3 min read

Improvementsโ€‹

๐Ÿ›’ Improvements to merchant profiles and merchant payment methods, and the requestMerchantProfile and requestMerchantProfileUpdate mutations:

  • The Testing APIs simulateMerchantProfileRequestOutcome and simulateMerchantPaymentMethodRequestOutcome mutations now support the new WaitingForInformation status and return a list of verificationRequirements.

  • A new optional field expectedMerchantProfileAdditionalInformation is now available at the projectInfo level. This field allows you to customize information collected for merchant profiles when configured as part of your merchant feature approval process.

    The information can then be provided using the additionalInformation field in merchant profiles and in the requestMerchantProfile and requestMerchantProfileUpdate mutations.

  • The invoiceExample field has been deprecated.

  • The expectedMonthlyPaymentVolume, merchantWebsite, socialNetwork, supportWebsite, and termsAndConditions fields are being deprecated.

  • We've deprecated the rejectReasons field and replaced it with rejectionReasons.

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿ“ก Starting October 9th, bulk SEPA Credit Transfers from individual account holders will be rejected if verification tokens aren't included in the payment initiation. You must either implement the verifyBeneficiary mutation (recommended) or restrict bulk credit transfer access to company accounts only. This change applies to both Live and Sandbox environments.

๐Ÿ’ณ On October 16th, the CardUrl field will be removed. Use cardMaskedNumber, expiryDate, and cardDesignUrl instead.

๐Ÿ›’ On October 16th, the following merchant onboarding and payment methods breaking changes will take effect:

  • A new WaitingForInformation status and verificationRequirements list will be available to show missing information on merchant profiles and payment methods. Submit the required information using the requestMerchantProfile or requestMerchantProfileUpdate mutations.
  • A new supportingDocumentCollections field will also be available at the merchant profile level for providing required documents.
  • The invoiceExample, expectedMonthlyPaymentVolume, merchantWebsite, socialNetwork, supportWebsite, termsAndConditions will be removed. Use expectedMonthlyMerchantProcessingVolume, merchantWebsiteUrl, socialNetworkUrl, supportWebsiteUrl, and termsAndConditionsUrl instead.
  • rejectReasons will be removed for card payment methods.
  • rejectionReasons for Rejected merchant profiles and merchant payment methods will become mandatory in Testing APIs simulateMerchantProfileRequestOutcome and simulateMerchantPaymentMethodRequestOutcome.
  • Dynamic rolling reserve changes and maximum payment amount limits will be introduced at the merchant payment method level to mitigate risk. Subscribe to the MerchantPaymentMethod.Created and MerchantPaymentMethod.Updated webhooks for these updates.

๐Ÿ’ธ Effective October 19th, we're introducing updates to the initiateCreditTransfers endpoint to improve its usability and clarity:

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

Updateโ€‹

๐Ÿงญ Starting October 21st, card-issuing spending limits will be aggregated at the hour level. To calculate card spending limits, each payment is recorded at the start of the hour. The rolling period resets every hour. This change applies to cards with daily, weekly, and monthly spending limit periods.

ยท One min read

New featuresโ€‹

๐Ÿ“– Get a head start on what's next. We've added a Preview section to our documentation, giving you early access to our features. Use these previews to plan your future roadmap. Note that functionality may change before the official release.

Improvementsโ€‹

โน๏ธ You can now cancel merchant SEPA Direct Debit payments using the cancelMerchantPayment mutation. Refer to the availableToCancel balance to check if a specific payment can be canceled.

๐Ÿ” Use the isCancelable field to verify whether scheduled account funding transactions are eligible for cancellation.

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿ”„ Starting October 1st, we're removing the paymentId field from the initiateSepaDirectDebitMerchantPayment mutation. Instead, retrieve the ID from the merchantPayment field, which now returns the Merchant Payment object. We're also deprecating the paymentId field.

โš–๏ธ Starting October 31st, 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. For example, Spanish residents opening French accounts will need to provide their tax identification number.

ยท One min read

New featuresโ€‹

๐Ÿ’ณ Payment Control now supports โ‚ฌ0 authorizations and credit authorizations, identifiable with TransactionSide! as Credit. Activate this feature from your Dashboard > Developers > Payment control.

๐Ÿ”‘ Idempotency is now available for initiateCreditTransfers. Add an idempotency key to your transfer queries to improve reliability and prevent duplicate transactions.

๐Ÿ“ฅ You can now export transaction data in .csv format from your Dashboard or with the API by calling the exportTransactionData mutation.

Improvementsโ€‹

๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ Server-to-server consent is now available for all account membership mutations, enabling you to reduce manual operations and scale more easily.

๐Ÿ”ข A new Service section is now available in your Dashboard > Insights. This section provides essential data on your KYC and Transaction Monitoring operations, including processing volumes and SLA performance. Related metrics have been moved from the Onboarding section to centralize this information.

ยท One min read

New featuresโ€‹

๐Ÿ“– Learn about the new Verification of Payee regulation, its impact on your users, and how you can update your Swan integration to improve your payment experience.

Improvementsโ€‹

๐Ÿ‘ฅ Get more balance information for booked transactions using BookedTransactionStatusInfo.balanceAfter. This object provides:

  • amount - replaces the existing BookedBalanceAfter.amount (see upcoming breaking changes).
  • sequenceNumber - new account-level transaction counter for new transactions (historical transactions show null).

๐Ÿงญ Customize column width on all Dashboard pages to make the data easier to read.

๐Ÿช Two new webhooks are now available to update you on rolling reserve changes. TransactionRollingReserve.Updated is triggered when the release date is changed, and TransactionRollingReserve.Released will indicate that the reserved funds are now available.

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿ“„ Starting August 28th, we'll start using these new, already available enum variables: USPersonStatusDeclaration and ProofOfBusinessActivity for SupportingDocumentPurpose, and W9, W8, and CertificateOfLossOfNationality for SupportingDocumentType.

๐Ÿ‘ฅ Starting December 31st, the bookedBalanceAfter field will be removed from the transaction query. Please use the balanceAfter.amount on BookedTransactionStatusInfo.

ยท 2 min read

New featuresโ€‹

๐Ÿ”— Send a SEPA Direct Debit B2B mandate registration link to users with the canInitiatePayments permission. Get the link from your Dashboard > Data > Accounts page.

Improvementsโ€‹

๐Ÿ’ณ One-off single use virtual cards now default to expiring 30 days after creation. This applies when SpendingLimitPeriod is set to Always in the addSingleUseVirtualCard and addSingleUseVirtualCards mutations. You can change this by setting a custom cardContractExpiryDate.

๐Ÿงญ Transaction confirmation documents now follow a new, more readable naming convention that includes the document language. The new format is: TransactionConfirmation_[transactionId]_[documentLanguage].

Updatesโ€‹

๐Ÿชช Starting August 7th, we'll recommend QES as the identification method for German accounts, replacing the current Expert level. If you use Auto, no action is needed. This change will apply automatically.

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿ›‘ Starting August 18th, the initiateCheckMerchantPayment mutation will return a new rejection: MerchantPaymentAlreadyExistsRejection. This occurs when you try to create a merchant payment, but the CMC7 value is already used by an existing payment that hasn't been Rejected or Canceled. If the existing payment with the same CMC7 was Rejected or Canceled, your mutation will still succeed.

๐Ÿ’ณ Starting August 21st, refund transactions will be linked to the paymentId of their original debit authorization when referenced by merchants. This change affects you only if you expect debit clearing transactions on a debit authorization.

ยท One min read

API updatesโ€‹

Upcoming breaking changesโ€‹

๐Ÿ” Starting July 10th, failed consent attempts will trigger the Consent.Failed webhook. Previously, failed consents triggered Consent.Granted, due to a bug. The new webhook is already available in your Dashboard.

โœ‰๏ธ Starting July 21st, the shippingProvider field in PhysicalCardToActivateStatusInfo and PhysicalCardRenewedStatusInfo will be migrated from a String to an ENUM. On the same day, the shipping provider values La Poste and CORREOS will be removed.

ยท One min read

Improvementsโ€‹

๐Ÿงญ Account statement documents now follow a new, more readable naming convention that includes the document language. The new format is: AccountStatement_[ProjectName]_[AccountNumber]_[period]_[documentLanguage].

๐Ÿ‘ซ Account member invitations with a ConsentPending status will now expire if the inviter doesn't provide consent before the consent period ends. This automatically changes the account membership status to Disabled, allowing you to inform the user to send a new invitation.

  • If you're subscribed to the AccountMembership.Updated webhook, you'll receive a notification when the membership is Disabled.
  • When querying AccountMembershipDisabledStatusInfo, you'll see the reason InvitationExpired.

โœ๏ธ You can now use CheckMerchantPayment to track the statuses and balances of French check payments.

API updatesโ€‹

Upcoming breaking changesโ€‹

โš ๏ธ Starting July 1st, the shippingProvider field in PhysicalCardToActivateStatusInfo and PhysicalCardRenewedStatusInfo will be migrated from a String to an ENUM. Please note that the shipping providers La Poste and CORREOS will soon be deprecated.

๐Ÿ’ถ On August 1st, we're removing the merchantPayment field in the InitiateCheckMerchantPaymentSuccessPayload, use checkMerchantPayment instead. We're also deprecating merchantPayment.