Getting Paid on Time
Recurring invoices
Create invoices automatically on a schedule from a template, as drafts for you to send or sent for you.
Coming the week of 11 January 2027
This feature ships in the week of 11 January 2027. This page describes how it will work; details can change before release.
Recurring invoices bill your regular clients on time without you remembering. You set up a schedule once (for example every month for a retainer) based on a template invoice, and on each date a new invoice is created from that template. By default the new invoice is a draft that you check and send; you can choose to have it sent automatically. From March 2027 it can also be charged to the client's saved card.
How recurring works
A recurring schedule belongs to a business and one client, and has:
| Part | What it is |
|---|---|
| Template | A draft invoice whose lines, taxes, notes and terms are copied into each new invoice |
| Interval | How often: a number of weeks, months or years (proposed units), for example every 1 month or every 3 months |
| Next run date | When the next invoice will be created |
| End | Optional: an end date, or a number of invoices after which the schedule ends |
| Auto-send | Off by default: new invoices are drafts. On: each invoice is sent when it is created |
| Auto-charge | From March 2027: charge the client's saved card on the due date |
| Status | active, paused or ended |
On each run date:
- A new invoice is created by copying the template.
- It is numbered from the business's own gap-free sequence, exactly like every other invoice.
- If auto-send is off, it waits as a draft for you to review and send. If auto-send is on, it is sent to the client.
- The next run date moves forward by the interval. When the end date or the number of invoices is reached, the schedule ends.
A schedule never creates two invoices for the same date, even if the job runs twice. Invoices made by a schedule are marked as coming from it, and the recurring.document_created webhook event is sent for each one.
Recurring invoices are drafts by default because integrations and automation should not send money requests without a person checking them. Turn on auto-send only for schedules you trust to be right every time, such as a fixed monthly retainer.
Set up a recurring invoice in the app
Open Recurring
In the sidebar, open Recurring under Documents.
Choose the client and template
Pick the client and build the template invoice: lines, taxes, discounts, notes and terms, exactly as you want each invoice to look.
Set the interval and first date
Choose how often (for example every 1 month) and the date of the first invoice.
Choose when it ends
Leave it open, set an end date, or set a number of invoices.
Decide on auto-send
Leave auto-send off to review each invoice as a draft, or turn it on to send automatically.
Pause, resume or stop
- Pause a schedule while a client is on a break. Nothing is created while it is paused.
- Resume it when work starts again.
- Delete a schedule to stop it for good. Invoices it already created are not affected.
Changing the template changes future invoices only. Invoices already created, and especially those already sent, keep their own content.
Through the API
| Action | REST | Permission |
|---|---|---|
| List recurring schedules | GET /v1/recurring-schedules | documents.view |
| Create or update a schedule | POST /v1/recurring-schedules or PATCH /v1/recurring-schedules/{id} | documents.create |
| Pause or resume a schedule | POST /v1/recurring-schedules/{id}/pause or /resume | documents.create |
| Delete a schedule | DELETE /v1/recurring-schedules/{id} | documents.create |
| Set auto-charge (March 2027) | PUT /v1/recurring-schedules/{id}/auto-charge | payments.auto_charge |
First create the template as a draft invoice (see Create an invoice), then create the schedule that points to it:
curl -X POST "https://api.freeinvoiceautomation.com/v1/recurring-schedules" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: recurring-acme-retainer" \
-d '{
"business_id": "0193f2a1-1b2c-7d3e-8f40-5a6b7c8d9e01",
"client_id": "0193f2a1-0c11-7d2e-9a40-1b2c3d4e5f60",
"template_document_id": "0193f2e2-0a1b-7c2d-8e3f-4a5b6c7d8e9f",
"interval_unit": "month",
"interval_count": 1,
"next_run_date": "2027-02-01",
"remaining_runs": 12,
"auto_send": false
}'{
"data": {
"id": "0193f2e1-6c7d-7e8f-9a0b-1c2d3e4f5a6b",
"client_id": "0193f2a1-0c11-7d2e-9a40-1b2c3d4e5f60",
"template_document_id": "0193f2e2-0a1b-7c2d-8e3f-4a5b6c7d8e9f",
"interval_unit": "month",
"interval_count": 1,
"next_run_date": "2027-02-01",
"end_date": null,
"remaining_runs": 12,
"auto_send": false,
"auto_charge": false,
"status": "active",
"last_run_at": null
}
}Recurring schedules are not on the MCP tool list. Your assistant can still find the drafts they create with list_documents and send them with send_document after you confirm. From the week of 25 January 2027 the CLI has freeinvoiceautomation recurring list, recurring upsert and recurring pause (command names are proposed).
Auto-charge (March 2027)
If the client saved a card at Stripe with their consent, you can set the schedule to charge it on each invoice's due date. The invoice is marked paid only when Stripe confirms the charge; if the bank asks the client to authenticate or the charge fails, the client gets the normal pay link and reminders run. See Saved cards and auto-charge.
Rules and edge cases
- Same numbering. Recurring invoices use the business's normal gap-free sequence; there is no separate series.
- Reminders and late fees apply to recurring invoices like any other once they are sent.
- Email quota. Auto-sent invoices count toward your platform email quota unless you send through your own SMTP.
- Ended schedules have the status
endedand create nothing more.
What the client sees
Each recurring invoice is a normal invoice: an email with a pay link if it was sent, a pay page, a PDF and, from January 2027, an entry in the client portal.
Permissions
| Key | Needed for | Default roles |
|---|---|---|
documents.create | Creating, changing, pausing and deleting schedules | Owner, Admin, Editor |
documents.view | Seeing schedules | Owner, Admin, Editor, Viewer, Accountant |
documents.send | Sending the drafts a schedule creates | Owner, Admin, Editor |
payments.auto_charge | Turning on auto-charge | Owner, Admin |
Errors
| Code | When |
|---|---|
validation_failed | A field is missing or invalid, for example an interval of 0 |
not_found | The template document or client does not exist |
consent_required | Auto-charge without a consented saved card |
quota_exceeded | An auto-send could not go through the platform mailer this month |
permission_denied | Your role lacks documents.create |