payf
FinTS CLI for SEPA instant transfers
Summary
| Latest Version | 0.1.0 |
|---|---|
| License | MIT |
| CI Status | Failing |
| Downloads | 0 |
| Last Indexed | 2026-09-04 07:26 |
Tags
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
- payf connects to your bank's FinTS server
- Verifies the payee name (Verification of Payee / Namensabgleich)
- Submits the transfer
- Your bank sends an approval request to your phone (SecureGo plus / decoupled TAN)
- 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