Payments
Saved cards and auto-charge
Let clients save a card at Stripe with their consent, then charge recurring invoices and instalments automatically on their due date.
Coming March 2027
This feature ships in March 2027. This page describes how it will work; details can change before release.
Auto-charge gets you paid on time without asking every month. When a client pays by card through Stripe, they can choose to save the card for future invoices from your business. Recurring invoices and instalments can then be charged to that card automatically on their due date. The card stays at Stripe, on your own connected account: we never see the card number, and we keep only what is needed to show it and prove the client agreed.
How saving a card works
- A client pays an invoice through Stripe Checkout.
- On Checkout they can tick Save this card for future invoices from followed by your business name.
- Stripe saves the card on your connected Stripe account.
- We store only:
- the Stripe customer id and payment-method id,
- the card brand and last 4 digits, for display,
- the client's consent record: the exact consent text shown, the time, and the client's IP address and browser.
There is no place in our database for a card number, expiry date or security code. You see "card on file" with the brand and last 4, and nothing more.
Saving a card is the client's choice, on Stripe's own page. You cannot add a client's card yourself, and you can never see the full card.
How auto-charge works
Turn on auto-charge for a recurring invoice schedule or for an instalment whose client has a saved card with consent. Then, on each due date:
- The auto-charge job creates an off-session payment on your connected Stripe account for the amount due.
- Stripe processes it.
- The invoice is marked paid only when Stripe's verified webhook confirms the payment. The charge being sent is not enough.
When a charge does not go through
- The bank asks the client to authenticate, or the charge fails: the client gets the normal pay link, and the reminder sequence runs as for any unpaid invoice.
- Retries follow a setting: by default 3 tries over 7 days.
- After the last try, the invoice stays open with its pay link and reminders until it is paid another way.
| Event | Webhook event to your systems |
|---|---|
| Charge confirmed by Stripe | auto_charge.succeeded, then document.paid |
| Charge failed | auto_charge.failed |
| Client removed the card | saved_payment_method.removed |
See Webhook events.
Turn on auto-charge in the app
Check the client has a card on file
Open the client under Clients. A saved card shows as "card on file" with its brand and last 4 digits.
Open the recurring schedule or the instalment
Auto-charge is set on a recurring invoice schedule, or on an instalment of an invoice's payment schedule.
Turn on auto-charge
Choose the client's saved card and turn auto-charge on.
Confirm
Auto-charge moves money from your client's card, so you confirm the change before it is saved. It is recorded in the audit log.
What the client sees
- The Save this card option on Stripe Checkout, with your business name in the consent text.
- The invoice shown as paid on its pay page once the charge is confirmed.
- If a charge fails, the usual pay link and reminders.
- Their saved card in the client portal, shown by brand and last 4, with a Remove button. Removing it detaches the card at Stripe and removes it from our records. Future auto-charges then fall back to the pay link.
Through the API
| Action | REST | Permission |
|---|---|---|
| List a client's saved cards | GET /v1/clients/{id}/saved-payment-methods | payments.view |
| Set auto-charge | PUT /v1/recurring-schedules/{id}/auto-charge or PUT /v1/schedule-installments/{id}/auto-charge | payments.auto_charge |
| Remove a saved card (client, in the portal) | DELETE /v1/portal/saved-payment-methods/{id} | portal session |
Setting auto-charge is a destructive, money-moving action: the call must include "confirm": true, otherwise it returns confirmation_required with a preview of what would be charged and when. It is not on the MCP tool list; and if an AI assistant or integration reaches it through the API, it still needs a person's confirmation.
curl -X PUT "https://api.freeinvoiceautomation.com/v1/recurring-schedules/0193f2e1-6c7d-7e8f-9a0b-1c2d3e4f5a6b/auto-charge" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: autocharge-retainer-acme" \
-d '{
"auto_charge": true,
"saved_payment_method_id": "0193f2e0-1a2b-7c3d-8e4f-5a6b7c8d9e0f",
"confirm": true
}'{
"data": [
{
"id": "0193f2e0-1a2b-7c3d-8e4f-5a6b7c8d9e0f",
"client_id": "0193f2a1-0c11-7d2e-9a40-1b2c3d4e5f60",
"card_brand": "visa",
"card_last4": "4242",
"consent_at": "2027-03-08T14:02:11Z",
"status": "active"
}
],
"next_cursor": null,
"has_more": false
}Rules
- No consent, no charge. Auto-charge can only point to an active saved card of the same client with a consent record. Without one, the call fails with
consent_requiredand nothing is charged. - Only what the client agreed to. Auto-charge runs only for the recurring schedule or instalment it is set on. A change to the amount after consent needs new consent (proposed).
- Paid only from Stripe's webhook. A pending charge never marks an invoice paid.
- Every off-session charge is audited with the schedule, amount, consent record and Stripe payment id, so you can answer a client's question or a dispute.
- Removed cards stop all future auto-charges for that card; those invoices fall back to the pay link.
- Stripe only. Saved cards and auto-charge are part of the Stripe rail. Other rails have no saved cards.
- Offering the option. The Save this card option is offered on Checkout when your business has a Stripe connection; you can turn the offer off for a business.
Permissions
| Key | Needed for | Default roles |
|---|---|---|
payments.auto_charge | Turning auto-charge on or off | Owner, Admin |
payments.view | Seeing saved cards (brand and last 4) | Owner, Admin, Editor, Viewer, Accountant |
documents.create | Managing the recurring schedule itself | Owner, Admin, Editor |
Errors
| Code | When |
|---|---|
consent_required | The client has no active saved card with consent |
confirmation_required | The call did not include "confirm": true |
rail_not_connected | The business's Stripe connection is not active |
upstream_error | Stripe returned an error |
permission_denied | Your role lacks payments.auto_charge |