Add a SEPA Direct Debit B2B funding source
Add a SEPA Direct Debit B2B funding source with the API.
Prerequisites
- The funding source is a non-Swan account belonging to the Swan account holder.
- The user adding the funding source is either an account member with the
canManageAccountMembership
andcanViewAccount
permissions, or the account holder. - Call the mutation with a user access token associated with the account holder. The account holder needs to sign the direct debit mandate by consenting to the sensitive operation of adding a funding source.
Step 1: Add the funding source​
- Call the
addDirectDebitFundingSource
mutation. - Choose the
SepaDirectDebitB2b
scheme.- Though
Core
is an option in the API, it's not actually available for account funding.
- Though
- Add your
accountId
,iban
,consentRedirectUrl
, and aname
for your funding source (name is primarily for your reference). - Add the success payload:
AddDirectDebitFundingSourceSuccessPayload
. - Add the consent URL to the success payload:
fundingSource
>DirectDebitFundingSource
>paymentMandate
>SEPAPaymentDirectDebitMandate
>statusInfo
>PaymentMandateConsentPendingStatusInfo
>consent
>consentUrl
. - Add rejections (not shown).
🔎 Open the mutation in API Explorer
mutation AddSddB2b {
addDirectDebitFundingSource(
input: {
scheme: SepaDirectDebitB2b
accountId: "$YOUR_ACCOUNT_ID"
iban: "$YOUR_IBAN"
consentRedirectUrl: "$YOUR_REDIRECT_URL"
name: "Your funding source name"
}
) {
... on AddDirectDebitFundingSourceSuccessPayload {
__typename
fundingSource {
... on DirectDebitFundingSource {
id
name
paymentMandate {
... on SEPAPaymentDirectDebitMandate {
id
name
statusInfo {
... on PaymentMandateConsentPendingStatusInfo {
__typename
consent {
consentUrl
}
}
}
}
}
}
}
}
}
}
Step 2: Consent to adding the funding source​
- Send the
consentUrl
(line 14) with your Swan account holder. - Instruct them to consent to adding the funding source.
Note you also receive a funding source ID (line 6) and a payment mandate ID (line 9).
{
"data": {
"addDirectDebitFundingSource": {
"__typename": "AddDirectDebitFundingSourceSuccessPayload",
"fundingSource": {
"id": "$YOUR_FUNDING_SOURCE_ID",
"name": "Your funding source name",
"paymentMandate": {
"id": "$YOUR_PAYMENT_MANDATE_ID",
"name": null,
"statusInfo": {
"__typename": "PaymentMandateConsentPendingStatusInfo",
"consent": {
"consentUrl": "https://identity.swan.io/consent?consentId=$CONSENT_ID&env=Sandbox"
}
},
"mandateDocumentUrl": ""
}
}
}
}
}
Funding source and mandate
Enabled
After the account holder consents to the adding the funding source, the statuses for both the funding source and the direct debit mandate change to Enabled
, and funds can be pulled into the Swan account.
However, the account holder still needs to declare their payment mandate.
Step 3: Get the payment mandate​
Get the mandateDocumentUrl
to download the payment mandate.
- Call the
fundingSource
query. - Add the funding source ID (provided in the step 2 payload, line 6)
- Add the
mandateDocumentUrl
to the payload (line 10).
🔎 Open the query in API Explorer
query GetMandateUrl {
fundingSource(id: "$YOUR_FUNDING_SOURCE_ID") {
... on DirectDebitFundingSource {
id
name
paymentMandate {
... on SEPAPaymentDirectDebitMandate {
id
name
mandateDocumentUrl
}
}
}
}
}
Step 4: Declare the mandate to the external account provider​
The account holder must declare the payment mandate to the provider of their non-Swan account.
- Open the
mandateDocumentUrl
provided in the payload (line 9), which automatically triggers the download of the SEPA Direct Debit payment mandate PDF document. - Provide the payment mandate document to the account holder.
- Instruct the account holder to declare the payment mandate to the provider of their non-Swan account.
{
"data": {
"fundingSource": {
"id": "$YOUR_FUNDING_SOURCE_ID",
"name": "Your funding source name",
"paymentMandate": {
"id": "$YOUR_PAYMENT_MANDATE_ID",
"name": "Your mandate name",
"mandateDocumentUrl": "https://mandate.swan.io/$YOUR_FUNDING_SOURCE_ID/SANDBOX/FR23ZZZ87D106/UkdSRjJCVUJSSkpXR05EVkY=.pdf?Expires=1734430612&Signature=$SIGNATURE"
}
}
}
}