Skip to content

The public C ABI uses typed C structs for backend configuration, operation requests, continuation input, errors, interrupts, provider status rows, and typed result views. Include the installed header and treat it as the binding contract:

#include <galanthus/c_api/gln_capi.h>

Struct Conventions

Every public fixed-size input struct that has a struct_size field has a matching gln_default_* helper. Always call the helper and then fill the fields the operation needs. Batch submissions are constructed through their request builder: call gln_create_*_request_builder, populate the shared header with gln_default_*_request_header plus caller fills and apply it through gln_set_*_request_header, size the builder with gln_set_*_request_item_capacity, and append each row by initializing it with the matching gln_default_*_item helper, filling the per-item fields, and calling gln_add_*_request_item (or gln_add_direct_debit_batch_request_amended_item for amended SEPA direct debits). Submit the builder with gln_submit_batch_transfer or gln_submit_direct_debit_batch, then release it with the matching gln_destroy_*_request_builder and free the returned envelope with gln_destroy_backend_result.

gln_submit_transfer_request_t request = {0};
gln_default_submit_transfer_request(&request);
request.source_iban          = "DE02120300000000202051";
request.source_bic           = "BYLADEM1001";
request.source_name          = "Example GmbH";
request.recipient_iban       = "DE89370400440532013000";
request.recipient_bic        = "COBADEFFXXX";
request.recipient_name       = "Supplier GmbH";
request.amount               = "125.40";
request.purpose              = "Invoice 2026-05";
request.end_to_end_reference_or_null = "INV-2026-05";
RuleContract
StringsUTF-8 const char*; inputs are borrowed for the duration of the call.
AmountsDecimal strings, not floating point values.
DatesISO 8601 calendar dates, YYYY-MM-DD.
CurrencyISO 4217 string; request initializers use "EUR" where the ABI has a default.
Optional fieldsField names ending in _or_null accept NULL; count fields use zero for empty.
Result stringsAccessor returns are borrowed from their containing result envelope.

Payment request semantics follow the relevant EPC SEPA scheme material for credit transfers and direct debits.

Backend Config Structs

StructOpen functionRequired handles
gln_fints_config_tgln_open_fints_backendgln_state_store_t*, optional gln_continuation_store_t*, gln_secret_t* PIN
gln_ebics_config_tgln_open_ebics_backendgln_key_store_t*
gln_revolut_config_tgln_open_revolut_backendclient assertion gln_secret_t*, gln_state_store_t*, gln_revolut_token_store_t*
gln_wise_config_tgln_open_wise_backendgln_state_store_t*, gln_wise_token_store_t*

FinTS Config

FieldRequiredMeaning
endpointyesFinTS HTTPS endpoint URL.
bank_codeyesEight-digit German bank code.
user_idyesFinTS login/user identifier.
customer_id_or_nullnoCustomer id when the bank distinguishes it from user_id.
product_idyesBank-issued product id.
product_version_or_nullnoProduct version string.
dump_dir_or_nullnoDiagnostic dump directory.
security_referencenoGLN_FINTS_SECURITY_REFERENCE_NONE unless the caller overrides it.
security_profile_version_or_nullnoSecurity profile version override.
timeout_secondsno0.0f uses the library default.

EBICS Config

FieldRequiredMeaning
endpointyesEBICS HTTPS endpoint URL.
host_idyesBank host id.
partner_idyesPartner/customer id assigned by the bank.
user_idyesEBICS subscriber id.
product_idyesProduct id sent to the bank.
product_language_or_nullnoISO language code for bank-side text.
security_medium_or_nullnoEBICS security medium code.
dump_dir_or_nullnoDiagnostic dump directory.
tls_pinned_public_key_or_nullnoTLS SubjectPublicKeyInfo SHA-256 pin.
timeout_secondsno0.0f uses the library default.

The TLS public-key pin accepts the same sha256//... form used by libcurl's CURLOPT_PINNEDPUBLICKEY option.

Revolut Config

FieldRequiredMeaning
client_idyesRevolut application client id.
redirect_uriyesRegistered OAuth redirect URI.
client_assertion_kidyesKey id for the assertion-signing key.
environment_or_nullnoProvider environment string, for example sandbox or production.
dump_dir_or_nullnoDiagnostic dump directory.
timeout_secondsno0.0f uses the library default.
profile_name_or_nullnoLocal profile name for state/token scoping.
plugin_dll_path_or_nullnoExplicit plugin path.

Wise Config

FieldRequiredMeaning
endpointyesWise API endpoint URL.
profile_id_or_nullnoWise profile/account id.
dump_dir_or_nullnoDiagnostic dump directory.
timeout_secondsno0.0f uses the library default.
profile_name_or_nullnoLocal profile name for state/token scoping.
plugin_dll_path_or_nullnoExplicit plugin path.

Operation Request Structs

OperationRequest structDefault helperResult kind
gln_retrieve_accountsnonenoneGLN_BACKEND_RESULT_KIND_ACCOUNTS
gln_retrieve_balancesgln_list_balances_request_tgln_default_list_balances_requestGLN_BACKEND_RESULT_KIND_BALANCES
gln_retrieve_transactionsgln_list_transactions_request_tgln_default_list_transactions_requestGLN_BACKEND_RESULT_KIND_TRANSACTIONS
gln_retrieve_tan_modesnonenoneGLN_BACKEND_RESULT_KIND_TAN_MODES
gln_set_tan_modegln_set_tan_mode_request_tgln_default_set_tan_mode_requestGLN_BACKEND_RESULT_KIND_TAN_MODE_SELECTION
gln_retrieve_tan_medianonenoneGLN_BACKEND_RESULT_KIND_TAN_MEDIA
gln_retrieve_bank_infononenoneGLN_BACKEND_RESULT_KIND_BANK_INFO
gln_retrieve_holdingsgln_list_holdings_request_tgln_default_list_holdings_requestGLN_BACKEND_RESULT_KIND_HOLDINGS
gln_retrieve_standing_ordersgln_list_standing_orders_request_tgln_default_list_standing_orders_requestGLN_BACKEND_RESULT_KIND_STANDING_ORDERS
gln_add_standing_ordergln_add_standing_order_request_tgln_default_add_standing_order_requestGLN_BACKEND_RESULT_KIND_STANDING_ORDER_SUBMISSION
gln_modify_standing_ordergln_modify_standing_order_request_tgln_default_modify_standing_order_requestGLN_BACKEND_RESULT_KIND_STANDING_ORDER_SUBMISSION
gln_delete_standing_ordergln_delete_standing_order_request_tgln_default_delete_standing_order_requestGLN_BACKEND_RESULT_KIND_STANDING_ORDER_SUBMISSION
gln_submit_prepaid_topupgln_submit_prepaid_topup_request_tgln_default_submit_prepaid_topup_requestGLN_BACKEND_RESULT_KIND_PREPAID_TOPUP_SUBMISSION
gln_submit_transfergln_submit_transfer_request_tgln_default_submit_transfer_requestGLN_BACKEND_RESULT_KIND_TRANSFER_SUBMISSION
gln_submit_instant_transfergln_submit_instant_transfer_request_tgln_default_submit_instant_transfer_requestGLN_BACKEND_RESULT_KIND_TRANSFER_SUBMISSION
gln_submit_batch_transfergln_batch_transfer_request_builder_t with gln_batch_transfer_request_header_t plus added gln_batch_transfer_item_t rowsgln_default_batch_transfer_request_headerGLN_BACKEND_RESULT_KIND_BATCH_TRANSFER_SUBMISSION
gln_submit_direct_debitgln_submit_direct_debit_request_tgln_default_submit_direct_debit_requestGLN_BACKEND_RESULT_KIND_DIRECT_DEBIT_SUBMISSION
gln_submit_direct_debit_batchgln_direct_debit_batch_request_builder_t with gln_direct_debit_batch_request_header_t plus added gln_batch_direct_debit_item_t rowsgln_default_direct_debit_batch_request_headerGLN_BACKEND_RESULT_KIND_DIRECT_DEBIT_SUBMISSION

Read Requests

gln_list_balances_request_t:

FieldRequiredMeaning
ibanyesAccount IBAN whose balance should be listed.

gln_list_transactions_request_t:

FieldRequiredMeaning
ibanyesAccount IBAN.
from_date_or_nullnoInclusive start date.
to_date_or_nullnoInclusive end date.
limit_or_zeronoMaximum rows; zero leaves the limit to the backend.
page_token_or_nullnoOpaque continuation token from gln_get_transactions_next_page_token.

gln_list_holdings_request_t:

FieldRequiredMeaning
account_numberyesSecurities account number.
iban_or_nullnoIBAN when the bank identifies the holdings account by IBAN.
subaccount_number_or_nullnoSecurities subaccount qualifier.
bank_code_or_nullnoBank code override.

Payment Requests

gln_submit_transfer_request_t is used for normal transfers.

FieldRequiredMeaning
source_iban, source_bic, source_nameyesOriginating account identity.
recipient_iban, recipient_bic, recipient_nameyesBeneficiary identity.
amountyesDecimal amount string.
currencyyesCurrency, initialized to "EUR".
purposeyesPayment purpose.
end_to_end_reference_or_nullnoCaller-chosen reference.
requested_execution_date_or_nullnoRequested execution date.

gln_submit_instant_transfer_request_t is used for instant transfers.

FieldRequiredMeaning
source_iban, source_bic, source_nameyesOriginating account identity.
recipient_iban, recipient_bic, recipient_nameyesBeneficiary identity.
amountyesDecimal amount string.
currencyyesCurrency, initialized to "EUR".
purposeyesPayment purpose.
end_to_end_reference_or_nullnoCaller-chosen reference.

gln_submit_batch_transfer takes a gln_batch_transfer_request_builder_t. Set shared source fields through gln_batch_transfer_request_header_t, then add each gln_batch_transfer_item_t row to the builder.

FieldRequiredMeaning
source_iban, source_bic, source_nameyesOriginating account identity shared by every item.
requested_execution_date_or_nullnoRequested execution date shared by every item.
single_bookingnoNon-zero requests one statement booking where supported.

Each gln_batch_transfer_item_t contains recipient IBAN/BIC/name, amount, currency, purpose, and optional end-to-end reference.

Direct Debit Requests

gln_submit_direct_debit_request_t submits one SEPA direct debit.

FieldRequiredMeaning
creditor_iban, creditor_bic, creditor_name, creditor_idyesCreditor identity.
debtor_iban, debtor_bic, debtor_nameyesDebtor identity.
amount, currency, purposeyesCollection amount and purpose.
end_to_end_reference_or_nullnoCaller-chosen reference.
mandate_id, mandate_dateyesSEPA mandate data.
sequence_typeyesOOFF, FRST, RCUR, or FNAL; initialized to OOFF.
collection_date_or_nullnoRequested collection date.
local_instrumentyesCORE or B2B; initialized to CORE.
amendment_or_nullnoOptional gln_mandate_amendment_t.

gln_submit_direct_debit_batch takes a gln_direct_debit_batch_request_builder_t. Creditor identity, collection date, and local instrument live on the batch header; debtor identity, amount, mandate, and sequence data live on each item. Add ordinary rows with gln_add_direct_debit_batch_request_item and amended rows with gln_add_direct_debit_batch_request_amended_item.

Standing Order and TAN Requests

gln_add_standing_order_request_t, gln_modify_standing_order_request_t, and gln_delete_standing_order_request_t share the standing-order payment fields. Modify and delete also require order_reference.

Field groupMeaning
Source fieldssource_iban, source_bic, source_name.
Recipient fieldsrecipient_iban, recipient_bic, recipient_name.
Payment fieldsamount, currency, purpose, optional end-to-end reference.
Schedule fieldsfirst_execution, interval, execution_day, optional last_execution_or_null.

gln_set_tan_mode_request_t has one required field: security_function, copied from a row returned by gln_retrieve_tan_modes.

Continuation Input

Resume uses gln_continuation_input_t.

kindAdditional input
GLN_CONTINUATION_INPUT_KIND_NONENo additional typed payload.
GLN_CONTINUATION_INPUT_KIND_DECOUPLED_POLLOptional hhduc_response_or_null.
GLN_CONTINUATION_INPUT_KIND_HHDUC_RESPONSEOptional hhduc_response_or_null, with TAN supplied as the gln_resume_continuation interactive secret when needed.
GLN_CONTINUATION_INPUT_KIND_VOP_CONFIRMConfirms the VoP id stored in the continuation on supported VoP confirmation resume paths. Unsupported VoP confirmation resume paths return GLN_ERR_NOT_SUPPORTED / unsupported_vop_confirmation_backend.

See Also