Invoicing
Invoices
Create, send and track invoices with lines, taxes and discounts. Each business numbers its own invoices with no gaps, and sent invoices change only by revision.
An invoice asks your client to pay for work you did or goods you sold. You build it from lines, taxes and discounts, send it by email or link, and your client pays on the pay page. Invoices are on every plan, including Free, with no limit on how many you create.
How invoices work
Every invoice belongs to one business and one client. It moves through a simple life:
- Draft. You create and edit the invoice freely. A draft has no number yet, so you can delete it without leaving a gap.
- Sent. The first time you send or share it, the invoice gets the next number from the business's sequence and a snapshot is stored. From now on it is fixed.
- Paid, partially paid or overdue. Payments move the balance down. An invoice turns paid only when a payment rail confirms it or a person records the payment, never because a browser was redirected.
- Void, if it was sent by mistake and nothing has been paid. A voided invoice keeps its number.
The full list is on Document statuses.
What is on an invoice
| Part | What it holds |
|---|---|
| Header | business, client, currency, issue date, due date, terms and notes |
| Lines | description, quantity, unit, unit price, discount and tax for each line (Line items) |
| Totals | subtotal, discounts, tax, total, amount paid, amount credited and balance |
| Accepted methods | which of the business's payment methods the client may use on this invoice |
| Template | the PDF template used to render it (PDFs and templates) |
All totals are calculated by the same engine on every surface: the web app, the API, MCP, the CLI, the AI agent and the free generator. Amounts are stored as whole numbers of the currency's smallest unit (cents, paisa, fils), so rounding never creates or loses money between lines and totals. The balance is always total minus amount paid minus amount credited.
Fixed once sent
A sent invoice is a record your client already holds. To keep that record trustworthy:
- The business details, client details, lines, tax rates and exchange rate are frozen in a snapshot when it is first sent.
- Changing a sent invoice creates a revision with its own snapshot. Earlier versions stay readable.
- A sent invoice can never be deleted. If it was a mistake, void it. If it was paid, issue a credit note.
Create an invoice in the web app
Start a new invoice
Click New invoice in the top bar (on a phone, the centre button of the bottom tab bar). If you can reach more than one business, check the business switcher first: the invoice is issued by the business you are working in.
Pick the client
Choose an existing client or add a new one. The client's defaults, such as currency, payment terms and default tax rate, are applied to the invoice.
Add lines
Type a description, or start typing the name of a saved item and pick it to fill the line. Set quantity, unit price, discount and tax on each line. The live preview on the right updates as you type.
Check dates, terms and notes
The due date comes from your payment terms (Due dates and payment terms). Add any terms and notes the client should see.
Save or send
Use Save draft to keep working later, or Send to number it and deliver it (Send a document).
Open Invoices to see every invoice. Filter by status, client and date, and click a row to open a side panel with the PDF preview, the timeline of what happened, and the actions you are allowed to take.
Create an invoice through the API or MCP
Every action in the app is also an API call with the same rules and permissions. A new invoice is always a draft.
curl -X POST "https://api.freeinvoiceautomation.com/v1/documents" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4b1d7f2e-invoice-website" \
-d '{
"type": "invoice",
"business_id": "0193f2a0-1b2c-7d3e-8f40-5a6b7c8d9e01",
"client_id": "0193f2a1-0c11-7d2e-9a40-1b2c3d4e5f60",
"currency": "USD",
"issue_date": "2027-01-04",
"due_date": "2027-01-18",
"lines": [
{ "description": "Website design", "quantity": "1", "unit_price_minor": "120000" },
{ "description": "Hosting setup", "quantity": "2", "unit": "hour", "unit_price_minor": "4500" }
]
}'{
"data": {
"id": "0193f2b4-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
"type": "invoice",
"status": "draft",
"number": null,
"currency": "USD",
"subtotal_minor": "129000",
"discount_minor": "0",
"tax_minor": "0",
"total_minor": "129000",
"amount_paid_minor": "0",
"amount_credited_minor": "0",
"balance_minor": "129000"
}
}Money is a string of integer minor units, so "129000" is 1,290.00 USD. Floating-point amounts are refused.
| Task | Endpoint | MCP tool |
|---|---|---|
| Create a draft | Create an invoice | create_invoice |
| Change it | Update an invoice | update_invoice |
| Read one or many | Get a document, List documents | get_document, list_documents |
| See what is late | List overdue documents | list_overdue |
| Send it | Send a document | preview_send, send_document |
Integrations, MCP clients and the AI agent only ever create drafts. A person confirms each send unless the API key or MCP token was created with auto-send. See Drafts and confirmations.
Rules and limits
- Unlimited. There is no cap on invoices, clients or businesses on any plan.
- Numbers are per business and per type. Invoices have their own gap-free sequence, separate from estimates, credit notes and receipts. See Document numbering.
- Number on first send. A draft has no number. The number is assigned in the same step that sends it.
- Currency and exchange rate. When the invoice currency differs from the business's base currency, the rate is frozen on the invoice (Currencies).
- Paid state comes only from trusted events: a verified webhook from the payment rail, a reconciliation run, or a payment a person records. A client saying "I have paid" does not mark it paid.
- Clean for clients. No ads, affiliates or sponsors appear on your PDFs, pay pages or client emails.
Permissions
| Action | Permission key |
|---|---|
| View invoices | documents.view |
| Create drafts | documents.create |
| Edit drafts and make revisions | documents.edit |
| Send and share | documents.send |
| Void | documents.void |
| Issue credit notes | documents.credit |
Owners and Admins hold all of these by default; Editors can create, edit and send but not void or credit. See Roles and permissions.
Errors you may see
| Code | Meaning |
|---|---|
validation_failed | A field is missing or wrong, for example a quantity of 0. details.issues lists each field. |
document_not_editable | The invoice was sent. Change it by revision. |
document_voided | The action is not allowed on a void invoice. |
business_out_of_scope | Your role cannot reach this business. |
permission_denied | Your role lacks the permission key. |
The full list is on Errors.