Skip to content

The C ABI exposes SEPA direct-debit submission through single and batch backend operations.

Scheme references:

Operations

OperationRequestResult accessor
gln_submit_direct_debitgln_submit_direct_debit_request_tgln_get_backend_result_direct_debit_submission
gln_submit_direct_debit_batchgln_direct_debit_batch_request_builder_tgln_get_backend_result_direct_debit_submission

Backend Support

OperationSupported backends
submit_direct_debitFinTS, EBICS
submit_direct_debit_batchFinTS, EBICS

Probe support at runtime with gln_check_backend_operation_support before enabling a command against an arbitrary backend handle.

Single Direct Debit

gln_submit_direct_debit_request_t request = {0};
gln_default_submit_direct_debit_request(&request);
request.creditor_iban = "DE02120300000000202051";
request.creditor_bic = "BYLADEM1001";
request.creditor_name = "Example GmbH";
request.creditor_id = "DE98ZZZ00000000001";
request.debtor_iban = "DE89370400440532013000";
request.debtor_bic = "COBADEFFXXX";
request.debtor_name = "Example Customer";
request.amount = "39.90";
request.purpose = "Subscription 2026-05";
request.mandate_id = "MANDATE-2026-05";
request.mandate_date = "2026-04-20";
request.collection_date_or_null = "2026-05-20";
Field groupRequiredMeaning
Creditor identityyescreditor_iban, creditor_bic, creditor_name, creditor_id.
Debtor identityyesdebtor_iban, debtor_bic, debtor_name.
Collection detailyesamount, currency, purpose, local_instrument.
Mandate detailyesmandate_id, mandate_date, sequence_type.
Optional fieldsnoEnd-to-end reference, collection date, mandate amendment.

gln_default_submit_direct_debit_request sets currency to "EUR", sequence_type to "OOFF", and local_instrument to "CORE".

Mandate Amendments

Use gln_mandate_amendment_t when the SEPA mandate has changed.

FieldMeaning
original_mandate_id_or_nullPrevious mandate id.
original_creditor_id_or_nullPrevious creditor id.
original_debtor_iban_or_nullPrevious debtor IBAN.
debtor_changed_bankNon-zero when the debtor moved banks.

Batch Direct Debit

gln_direct_debit_batch_request_header_t contains the shared creditor fields. The builder is the public request object for batch submissions. Use gln_add_direct_debit_batch_request_item for ordinary batch items and gln_add_direct_debit_batch_request_amended_item for amended batch items.

gln_direct_debit_batch_request_builder_t* builder = NULL;
gln_error_t error;
(void)gln_default_error(&error);
gln_create_direct_debit_batch_request_builder(&builder, &error);

gln_direct_debit_batch_request_header_t header;
gln_default_direct_debit_batch_request_header(&header);
header.creditor_iban = "DE02120300000000202051";
header.creditor_bic = "BYLADEM1001";
header.creditor_name = "Example GmbH";
header.creditor_id = "DE98ZZZ00000000001";
header.collection_date_or_null = "2026-05-20";
gln_set_direct_debit_batch_request_header(builder, &header, &error);

gln_batch_direct_debit_item_t item;
(void)gln_default_batch_direct_debit_item(&item);
item.debtor_iban = "DE89370400440532013000";
item.debtor_bic = "COBADEFFXXX";
item.debtor_name = "Example Customer";
item.amount = "39.90";
item.purpose = "Subscription 2026-05";
item.mandate_id = "MANDATE-2026-05";
item.mandate_date = "2026-04-20";
gln_add_direct_debit_batch_request_item(builder, &item, &error);

gln_mandate_amendment_t amendment;
(void)gln_default_mandate_amendment(&amendment);
amendment.original_mandate_id_or_null = "MANDATE-2025-05";
gln_add_direct_debit_batch_request_amended_item(builder, &item, &amendment, &error);

gln_backend_result_t* result = NULL;
gln_submit_direct_debit_batch(backend, builder, &result);

gln_destroy_backend_result(result);
gln_destroy_direct_debit_batch_request_builder(builder);
gln_release_error(&error);

Header, item, and amendment values are copied into the builder when they are set or added.

Result Handle

Both operations return gln_direct_debit_submission_t.

AccessorFinTSEBICS
gln_get_direct_debit_submission_statusSummary status.Summary status.
gln_get_direct_debit_submission_idNULL.EBICS order id.
gln_get_direct_debit_submission_provider_status_count / _atCount zero.EBICS provider-status rows when present.

FinTS direct-debit submissions can pause for TAN or decoupled approval. Direct debits do not use VoP confirmation in this ABI.