Links

Fund an account

Learn how to fund a Swan account using push or pull payments.
Swan provides 2 ways to fund an account:
  • Push payments: send money to your Swan account from an external source. Swan lets you do this with a credit transfer.
  • Pull payments: use a Swan account to pull money from an external source. Swan lets you do this with methods like Sepa Direct Debit.

Push payments

Funding a live account is easy. Just use your primary bank account to transfer money toward your Swan account; the IBAN is the identifier. Once Swan receives the money, we instantly credit your account and the money is available.
In sandbox, you can practice funding an account using the Event Simulator and a fake IBAN: Event Simulator > SEPA Credit Transfers > Receive an incoming transfer. Select the desired amount, and it will be instantly credited to the account of your choice.
A new payment associated with the account is created, along with one transactionwith SepaCreditTransferIn type in the Booked state. The payment is instantly available through the web banking interface or the API. The money is directly available to make payments, the Booked balance being impacted as soon as the transaction is processed.

Pull payments

Add a funding source

To add a direct debit funding source via the API, use the addDirectDebitFundingSource mutation. To call this mutation, you need to use a User Access Token. Replace {{YOUR_ACCOUNT_ID}} with the concerned account ID and fill {{YOUR_REDIRECT_URL}}with the URL you want the user to be redirected to after they've consented to the direct debit payment mandate. In this guide, the FundingSource is an external account and we will use the SEPA Direct Debit B2B scheme to pull money from it. For more information about SEPA Direct Debit, read the documentation here.
Request
Response
mutation MyMutation {
addDirectDebitFundingSource(
input: {
scheme: SepaDirectDebitB2b
accountId: "{{YOUR_ACCOUNT_ID}}"
iban: "{{YOUR_IBAN}}"
consentRedirectUrl: "{{YOUR_REDIRECT_URL}}"
name: "{{YOUR_FUNDING_SOURCE_NAME}}"
}
) {
... on AddDirectDebitFundingSourceSuccessPayload {
__typename
fundingSource {
id
name
createdAt
... on DirectDebitFundingSource {
paymentMandate {
... on SEPAPaymentDirectDebitMandate {
statusInfo {
... on PaymentMandateConsentPendingStatusInfo {
__typename
consent {
consentUrl
}
}
}
mandateDocumentUrl
}
}
}
}
}
}
}
{
"data": {
"addDirectDebitFundingSource": {
"__typename": "AddDirectDebitFundingSourceSuccessPayload",
"fundingSource": {
"createdAt": "2022-07-04T09:10:23.472Z",
"id": "{{YOUR_FUNDING_SOURCE_ID}}",
"name": null,
"statusInfo": {
"status": "Pending"
},
"paymentMandate": {
"id": "{{YOUR_PAYMENT_MANDATE_ID}}",
"statusInfo": {
"status": "ConsentPending",
"__typename": "PaymentMandateConsentPendingStatusInfo",
"consent": {
"consentUrl": "{{YOUR_CONSENT_URL}}"
}
},
"mandateDocumentUrl": "{{YOUR_MANDATE_DOCUMENT_URL}}"
}
}
}
}
}
To validate the funding source, you will need to:
  • Get the user to consent to the payment mandate. To do so, you must display the consentUrl to the end-user. Once the payment mandate is consented to, it will be moved from ConsentPending to Enabled status.
Once the payment mandate is in the Enabled status, the funding source is moved to the Enabled status and can be used. You can check the funding source status using a query on the fundingSource.
Request
query MyQuery {
fundingSource(id: "{{YOUR_FUNDING_SOURCE_ID}}") {
id
statusInfo {
status
}
name
createdAt
... on DirectDebitFundingSource {
id
name
iban
}
}
}

Initiating a funding request

To pull money from the external account onto the concerned Swan account, you must use the initiateFundingRequest mutation. To call this mutation, you need to use a User Access Token. Replace {{YOUR_FUNDING_SOURCE_ID}} with the funding source ID which has been previously created and fill {{YOUR_REDIRECT_URL}} with the URL you want the user to be redirected to after they've consented to the funding request.
Request
Response
mutation MyMutation {
initiateFundingRequest(
input: {
fundingSourceId: "{{YOUR_FUNDING_SOURCE_ID}}"
amount: { value: "100", currency: "EUR" }
label: "{{YOUR_FUNDING_REQUEST_LABEL}}"
reference: "{{YOUR_FUNDING_REQUEST_REFERENCE}}"
requestedExecutionAt: "2022-10-05T15:08:02.395335Z"
consentRedirectUrl: "{{YOUR_CONSENT_REDIRECT_URL}}"
}
) {
... on InitiateFundingRequestSuccessPayload {
__typename
payment {
statusInfo {
... on PaymentConsentPending {
__typename
consent {
consentUrl
}
}
}
}
}
}
}
{
"data": {
"initiateFundingRequest": {
"__typename": "InitiateFundingRequestSuccessPayload",
"payment": {
"statusInfo": {
"__typename": "PaymentConsentPending",
"consent": {
"consentUrl": "{{YOUR_CONSENT_URL}}"
}
}
}
}
}
}
If the FundingSource is in Enabled status and the requested amount does not exceed the remaining funding limit amount, a transaction with SepaDirectDebitIn type is created with Upcoming status. Learn more about the Account Funding Limit.
If initiated before 11:30AM Paris Time, the SepaDirectDebitIn with B2B scheme instruction will be Booked the next inter-bank business day at 8PM (every day except Saturdays, Sundays, and other Target 2 bank holidays). Otherwise, it will be Booked within 2 inter-bank business day, at 8PM.
Once Booked, the money may go into the balance.reserved of the concerned account. Learn more about the Account Funding Rolling Reserve.
A funding request can be scheduled up to 1 year ahead, and at least 2 inter-bank Business day ahead using the requestedExecutionAt input.
To learn more about the different ways to fund a Swan account, please read :