SEPA direct debits

SEPA direct debits (SDDs) enable companies and governments (referred to as creditors) to collect payments from companies and individuals (referred to as debtors) by pulling payments from their accounts using a mandate. SDDs can be of type core (between companies and individuals or between companies) or B2B (between companies exclusively).

SEPA creditor identifier

A creditor identifier is required to collect payments through SDD. Companies can request their creditor identifier to their bank or country’s central bank. Your creditor identifier will be added to your Numeral account.

Managing SEPA direct debit mandates

A mandate is required to collect a payment through SDD. The mandate needs to include information about the creditor, creditor identifier, debtor, mandate type, and payment collection schedule as well as a unique reference mandate (URM).

One-off mandates can be used only once. Recurring mandates can be used multiple times and are valid until they are revoked or expire after 36 months without being used.

Mandates will only be managed in a future version. Until then, companies should manage their mandates outside of Numeral and pass mandate information when creating payment orders.

Creating a payment order for a SEPA direct debit

SEPA direct debit payments can be created using the Create a payment order API endpoint, with sepa as type, debit as direction, and the following direct_debit_mandate object with:

  • The reference (URM) of the mandate
  • The signature date of the mandate as signature_date
  • The type of the mandate:
    • core for a core mandate
    • b2b for a B2B mandate
  • The sequence of the mandate:
    • one_off for a one-off direct debit
    • first for the first direct debit of a mandate
    • final for the final direct debit of a mandate
    • recurring for all the direct debits of a mandate occurring between the first and the final
curl --request POST \
     --url https://sandbox.numeral.io/v1/payment_orders \
     --header 'Accept: application/json' \
     --header 'Content-Type: application/json' \
     --header 'X-API-Key: Your_API_Key'
     --data '
{
	"id": "3dfebc2a-8022-448b-a031-2b453c84df5f",
	"object": "payment_order",
	"type": "sepa",
	"direction": "debit",
	"amount": 1000,
	"currency": "EUR",
	"direct_debit_mandate": {
		"type": "core",
		"reference": "REF#36327372323",
		"signature_date": "2022-02-18",
		"sequence": "recurring",
	},
	"status": "pending_approval"
	/* fields omitted for simplicity */
}

SDD payment orders approved will be batched into a payment file and sent to the bank. The collection date will be the earliest date possible, depending on the mandate type and sequence.

Tracking a SEPA direct debit

After a SDD payment order has been approved, its status is updated as it is sent to and processed by the bank. The payment order can either be:

  • executed, when it has been executed by the creditor's bank
  • rejected, if it has been rejected by the creditor’s bank
  • returned, if it has been rejected, returned, refunded, or reversed by the debtor's bank

Status updates are notified by events that can be retrieved using the API or received through webhooks.

SEPA direct debit returns

As described previously, a SDD can be returned by the debtor's bank. This can happen if the account has been closed or does not have sufficient funds, the mandate has been blacklisted or has not been registered (in the case of a B2B SDD), or the debtor disputes the SDD.

When a SDD is returned by the debtor's bank, a return is automatically created. It is linked to the original payment order through the related_payment attribute for end-to-end traceability and also includes a standard SEPA error code as the return_reason. It is notified by a return.received event.

curl --request POST \
     --url https://sandbox.numeral.io/v1/returns \
     --header 'Accept: application/json' \
     --header 'Content-Type: application/json' \
     --header 'X-API-Key: Your_API_Key'
     --data '
{
  "id": "b6ab2878-c5ce-4b49-99ce-54da0e26d5ec",
  "object": "return",
  "type": "sepa",
  "related_payment": "3cc4a9d8-b2d5-11ed-afa1-0242ac120002",
  "value_date": "2023-02-15",
  "returned_amount": 1000,
  "currency": "EUR",
  "return_reason": "RR04",
  "status": "received",
  "reconciliation_status": "reconciled"
  /* fields omitted for simplicity */
}

SDD returns will typically result in two transactions booked on the corresponding connected account:

  • One credit transaction, automatically reconciled with the original payment order
  • One debit transaction, automatically reconciled with the return