Search…
Fund an account
Accounts and payment services are only useful if you have money to actively use them. To fund a Swan account, we provide 2 ways:
  • Push payments: from an external source, you "send" money to your Swan account. At the moment, the only way to do that is through a Credit Transfer.
  • Pull payments: from the Swan account, you pull money from an external source.

Push payments

Funding an account in live environment is easy. You just need to use your account's IBAN and make a transfer from your primary bank account. Once Swan receives the money, we will instantly credit your account and the money will be available.
In sandbox, the Event Simulator lets you credit an account using 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 Core scheme to pull money from it. For more information about SEPA Direct Debit, read the documentation here.
Request
Response
1
mutation MyMutation {
2
addDirectDebitFundingSource(
3
input: {
4
scheme: SepaDirectDebitCore
5
accountId: "{{YOUR_ACCOUNT_ID}}"
6
iban: "FR7630001007941234567890185"
7
consentRedirectUrl: "{{YOUR_REDIRECT_URL}}"
8
name: "My funding source"
9
}
10
) {
11
... on AddDirectDebitFundingSourceSuccessPayload {
12
__typename
13
fundingSource {
14
id
15
name
16
createdAt
17
... on DirectDebitFundingSource {
18
paymentMandate {
19
... on SEPAPaymentDirectDebitMandate {
20
statusInfo {
21
... on PaymentMandateConsentPendingStatusInfo {
22
__typename
23
consent {
24
consentUrl
25
}
26
}
27
}
28
}
29
}
30
}
31
}
32
}
33
}
34
}
35
​
Copied!
1
{
2
"data": {
3
"addDirectDebitFundingSource": {
4
"__typename": "AddDirectDebitFundingSourceSuccessPayload",
5
"fundingSource": {
6
"id": "e8fcac8b-6448-4239-afd5-6543c68e06ed",
7
"name": "My funding source",
8
"createdAt": "2022-04-20T15:12:50.446Z",
9
"paymentMandate": {
10
"statusInfo": {
11
"__typename": "PaymentMandateConsentPendingStatusInfo",
12
"consent": {
13
"consentUrl": "https://identity.swan.io/consent?consentId=e17242b5-7a11-401a-909b-5cd165341519&env=Sandbox"
14
}
15
}
16
}
17
}
18
}
19
}
20
}
Copied!
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, it will be moved from the ConsentPending to the Enabled status.
  • Since the scheme is SepaDirectDebitCore, Swan must verify that the external IBAN used as the funding source does belong to the same account holder as the Swan account. This verification process is managed with the account verification object. To simulate a transaction in the sandbox to go through the account verification process, you can use the Testing API:
Request
Second Tab
1
mutation MyMutation {
2
simulateIncomingSepaCreditTransferReception(
3
input: {
4
amount: { value: "10", currency: "EUR" }
5
creditorIban: "{{SWAN_IBAN}}"
6
creditorName: "{{ACCOUNT_HOLDER_NAME}}"
7
debtorIban: "{{FUNDINGSOURCE_IBAN}}"
8
debtorName: "{{ACCOUNT_HOLDER_NAME}}"
9
}
10
) {
11
... on SimulateIncomingSepaCreditTransferReceptionSuccessPayload {
12
__typename
13
transactionId
14
}
15
... on ForbiddenRejection {
16
__typename
17
message
18
}
19
}
20
}
Copied!
1
{
2
"data": {
3
"simulateIncomingSepaCreditTransferReception": {
4
"__typename": "SimulateIncomingSepaCreditTransferReceptionSuccessPayload",
5
"transactionId": "bosci_7fc99e725bc3949bde0049616171adf1"
6
}
7
}
8
}
Copied!
Once the payment mandate is in the Enabled status and the account verification is in the Verified 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
1
query MyQuery {
2
fundingSource(id: "{{YOUR_FUNDING_SOURCE_ID}}") {
3
id
4
statusInfo {
5
status
6
}
7
name
8
createdAt
9
... on DirectDebitFundingSource {
10
id
11
name
12
iban
13
}
14
}
15
}
16
​
Copied!

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.
Request
Response
1
mutation MyMutation {
2
initiateFundingRequest(
3
input: {
4
fundingSourceId: "{{YOUR_FUNDING_SOURCE_ID}}"
5
amount: { value: "100", currency: "EUR" }
6
consentRedirectUrl: "https://swan.io/"
7
}
8
) {
9
... on InitiateFundingRequestSuccessPayload {
10
__typename
11
payment {
12
statusInfo {
13
... on PaymentConsentPending {
14
__typename
15
consent {
16
consentUrl
17
}
18
}
19
}
20
}
21
}
22
}
23
}
Copied!
1
{
2
"data": {
3
"initiateFundingRequest": {
4
"__typename": "InitiateFundingRequestSuccessPayload",
5
"payment": {
6
"statusInfo": {
7
"__typename": "PaymentConsentPending",
8
"consent": {
9
"consentUrl": "https://identity.swan.io/consent?consentId=cf17524b-ada2-41e0-b3cf-908069a09e38&env=Sandbox"
10
}
11
}
12
}
13
}
14
}
15
}
Copied!
If the FundingSource is in the Enabled status and if the requested amount does not exceed the remaining funding limit amount, a transaction with the SepaDirectDebitIn type is created in the Upcoming status. Learn more about the Account Funding Funding Limit​
The transaction is moved to the Booked status maximum 2 inter-bank business days following the funding request initiation, and the money might go into the balance.reserved of the concerned account. Learn more about the Account Funding Rolling Reserve​
​
To learn more about the different ways to fund a Swan account, please read :