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.
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 transaction
with 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.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 fromConsentPending
toEnabled
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
}
}
}
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 :
Last modified 2mo ago