payf

FinTS CLI for SEPA instant transfers

Pure Nim score 15/100 · tests present · no docs generated

Summary

Latest Version 0.1.0
License MIT
CI Status Failing
Downloads 0
Last Indexed 2026-09-04 07:26

Authors

  • payf

Installation

nimble install payf
choosenim install payf
git clone https://github.com/capocasa/payf

OS Compatibility

Platform Linux macOS Windows FreeBSD OpenBSD NetBSD Android iOS WASM Embedded
payf - - - - - - -

Dependencies

Package Version Optional
nim >= 2.0.0 No
cligen >= 1.6.0 No
dotenv >= 2.0.0 No

Source

Repository https://github.com/capocasa/payf
Homepage https://github.com/capocasa/payf
Registry Source nimble_official

README

payf

SEPA instant transfer from the command line.

payf connects to your German bank via FinTS 3.0 and sends SEPA instant payments. No web browser, no app — just a command.

payf transfer --to DE89370400440532013000 --name "Max Mustermann" --amount 25.00 --ref "Invoice 123"

Why

Bank transfers should be easy to make and easy to automate. payf removes the friction of logging into a web interface while keeping the security of your bank's TAN confirmation — every transfer is approved on your phone via SecureGo plus or similar.

Status

payf works. Transfers have been tested with real money on Atruvia/VR bank servers. That said, this is new software and has only been tested against one bank server so far. Other FinTS 3.0 servers should work but may need adjustments. Bank onboarding (getting your FinTS server URL, registering a product ID) still requires some manual effort.

How it works

  1. payf connects to your bank's FinTS server
  2. Verifies the payee name (Verification of Payee / Namensabgleich)
  3. Submits the transfer
  4. Your bank sends an approval request to your phone (SecureGo plus / decoupled TAN)
  5. You approve, payf confirms success

For small or repeat transfers, the bank may skip the TAN step entirely.

Building

Requires Nim >= 2.0 and nimble.

nimble build

Configuration

Copy .env.example to .env and fill in your bank details:

cp .env.example .env

You need: - FINTS_URL — your bank's FinTS server URL (ask your bank or check their website) - FINTS_BLZ — your bank's routing number (Bankleitzahl) - FINTS_USER — your online banking username - FINTS_PIN or FINTS_PIN_CMD — your PIN, or a command to retrieve it (e.g. pass bankname) - IBAN — your account IBAN - BIC — your account BIC - ACCOUNT_HOLDER — your name as registered with the bank

Usage

# Instant transfer (default)
payf transfer --to IBAN --name "Recipient" --amount 10.00 --ref "Payment"

# Standard (non-instant) transfer
payf transfer --to IBAN --name "Recipient" --amount 10.00 --instant=false

# Dry run
payf transfer --to IBAN --name "Recipient" --amount 10.00 --dry-run

# Debug mode (show FinTS protocol messages)
payf transfer --to IBAN --name "Recipient" --amount 10.00 --debug

FinTS Product ID

This software uses registered FinTS product ID 5D8519C8F4024026D066D6661.

If you fork this project, you should register your own product ID with Deutsche Kreditwirtschaft.

License

MIT