Payments
Bank transfer
Show your bank details on every invoice, let clients tell you when they have paid, and record the transfer yourself.
Bank transfer works in every country and every currency. You add your bank details to a business once, and the pay page of every invoice shows them. The client pays from their own bank, clicks I have paid, and can upload a proof. You check your bank, record the payment, and the invoice moves to paid. No payment provider sits in between, so there is nothing to connect and no fee from us.
How it works
Bank transfer is an instruction rail: we show your details, but the money moves outside our system, from your client's bank to yours. Because we cannot see that money arrive, a person on your team confirms it:
- The pay page shows your bank details and the amount due.
- The client pays by bank transfer.
- The client clicks I have paid and may upload a proof, such as a transfer receipt.
- You are notified. You check your bank account.
- You record the payment with the amount, date and reference. The invoice moves to paid or partially paid, and an audit entry records who confirmed it.
I have paid never marks an invoice paid on its own. A client's claim, even with a proof attached, is only a notice to you. The invoice changes only when you record the payment. This protects you from forged receipts.
What you can enter
Bank details are flexible because banking differs between countries:
| Field type | Examples |
|---|---|
| Structured fields | IBAN, SWIFT/BIC, and local fields for your country |
| Free text | Anything else your clients need: account name, bank address, a reference to quote, instructions in your own words |
These details are not secret: they are shown on pay pages to anyone who has the pay link, just as they would be printed on a paper invoice. Do not put passwords or private notes in them.
Set up bank transfer
Open Settings > Payment methods
Choose the business that should receive transfers. Each business has its own bank details.
Add bank transfer
Add a bank transfer method and fill in the structured fields and free text. Give it a clear label, for example "EUR account" or "Local bank".
Confirm with a fresh sign-in
Adding or changing a payment method asks you to sign in again, because it decides where clients send money.
Turn it on
Enable the method and set its position on the pay page. New invoices for this business now show your bank details.
You can add more than one bank transfer method, for example one account per currency. Use per-client or per-invoice accepted methods so each client sees only the account that fits them.
What the client sees
On the pay page, the client sees your bank details as you entered them, with the amount due and the invoice number. Below them is an I have paid button. When they click it they can:
- enter the amount they paid and the date they paid it,
- add a short note,
- upload a proof of payment (PDF, PNG or JPEG).
We then notify the business. The invoice stays unpaid until you record the payment. See Payment proofs for what happens to the proof.
Through the API
Create the bank transfer connection with the rail's connection schema, then enable it as a payment method:
| Action | REST | Permission |
|---|---|---|
| List rails (see the bank transfer fields) | GET /v1/rails | rails.manage |
| Create a connection | POST /v1/connections | rails.manage (fresh sign-in) |
| Update a connection | PATCH /v1/connections/{id} | rails.manage |
| Set payment methods | PUT /v1/businesses/{id}/payment-methods | rails.manage |
| Record a payment | POST /v1/payments | payments.record |
| Accept a payment proof | POST /v1/payment-proofs/{id}/accept | payments.record |
Because creating a rail connection needs a fresh sign-in, set up bank transfer in the app. Recording payments works with an API key or over MCP:
curl -X POST "https://api.freeinvoiceautomation.com/v1/payments" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pay-inv-0042-transfer" \
-d '{
"document_id": "0193f2b4-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
"amount_minor": "120000",
"currency": "EUR",
"received_at": "2027-01-18T00:00:00Z",
"reference": "SEPA 7781-2201"
}'Rules and edge cases
- Any country, any currency. Bank transfer has no currency restriction.
- Partial transfers. Record exactly what arrived. The invoice shows partially paid until the balance reaches zero.
- Refunds. Bank transfer cannot send money back for you. If you refund a client, pay them from your bank and record the refund manually. See Refunds.
- Voided invoices. Voiding cancels the pay link, so the bank details are no longer shown for that invoice.
- Reminders. From January 2027, reminder sequences stop when the client reports payment with a proof, so they are not chased while you check your bank. See Reminders.
Permissions
| Key | Needed for | Default roles |
|---|---|---|
rails.manage | Adding or changing bank details | Owner, Admin |
payments.record | Recording payments, accepting or rejecting proofs | Owner, Admin, Editor |
payments.view | Seeing payments and proofs | Owner, Admin, Editor, Viewer, Accountant |
Errors
| Code | When |
|---|---|
fresh_signin_required | Adding or changing bank details without a recent sign-in |
validation_failed | A bank field is invalid |
rail_capability_missing | Asking the rail to refund; record the refund manually instead |
document_voided | Recording a payment on a void invoice |