Invoicing
Create, send, and track invoices in Anchor with VAT, credit notes, and payment matching for South African small businesses on the free hosted core.
The invoicing module handles your accounts receivable workflow.
Invoice Lifecycle
Draft → Sent → Partial/Paid
→ Overdue
→ Void- Draft - Create and edit freely (open the invoice and click Edit)
- Sent - Invoice finalized, journal entry created (DR Accounts Receivable, CR Revenue)
- Partial - Some payment received
- Paid - Fully paid
- Overdue - Past due date and unpaid
- Void - Cancelled
Creating an Invoice
- Navigate to Sales > Invoices > New Invoice
- Select a contact (customer). Line tax defaults from that contact’s default tax rate (Contacts → Bookkeeping). Tax-exempt contacts get No tax. Changing tax on a line — including No tax — is kept if you later change the customer. New lines pick up the current customer’s default.
- Currency fills from the customer. Change it to invoice in a different currency; that override is kept if you change customer.
- Set issue date and due date
- Add line items with description, quantity, unit price, and account
- Optionally add a reference (e.g. PO number) and notes
- Save as draft or send immediately
Editing a Draft
A sales invoice can be edited while it is still a draft (before it is sent or submitted for approval).
- Open Sales → Invoices and click the draft
- Click Edit
- Change the customer, dates, reference, notes, or line items
- Click Save Invoice
Sent, paid, overdue, void, and pending-approval invoices cannot be edited this way. To fix a sent invoice, void it and create a new one, or use Edit on the document snapshot (sender/recipient details only).
Invoice numbers
By default, new invoices receive the next sequential number (INV-00001, INV-00002, …).
There is currently no Settings control to choose where the sequence starts (e.g. “next number = 1500”). That capability is a required product gap for practices migrating from other systems — tracked as GAP-INV-02 in the Anchor engineering docs.
Via the API or MCP create_invoice, you can optionally pass invoiceNumber to set the number yourself (for migrations or external systems). Rules:
- Must be unique among non-deleted invoices in the organization
- When omitted, the next auto number is assigned
- Values matching
INV-#####advance the auto sequence so later creates do not collide - Arbitrary formats (e.g. legacy
TS-2024-001) are allowed; they do not change the sequence - Duplicate numbers return HTTP 409
Example create body:
{
"contactId": "…",
"issueDate": "2026-07-18",
"invoiceNumber": "INV-01000",
"currencyCode": "ZAR",
"lines": [{ "description": "Consulting", "quantity": 1, "unitPrice": 1500 }]
}Currency
If currencyCode is omitted, Anchor uses the contact’s default currency, then the organisation base currency (e.g. ZAR for South African orgs). New contacts without a currency inherit the org base currency. The dashboard sends the filled code; MCP create_invoice omit remains USD until GAP-CUR-01.
Integrations that create draft invoices should send both invoiceNumber and currencyCode so drafts match the source sales invoice.
Line Items
Each line item includes:
| Field | Description |
|---|---|
| Description | What you're billing for |
| Quantity | Number of units (stored as qty x 100) |
| Unit Price | Price per unit in cents |
| Account | Revenue account to credit |
| Tax Rate | Defaults from the customer’s default tax rate (or No tax if tax-exempt / unset). Override per line. |
| Amount | Auto-calculated: qty x price |
On create and draft edit, omitting taxRateId on a line (REST or MCP) applies the contact default. Send taxRateId: null for explicit no tax — do not omit the key. TaxShopHub no-VAT extractions must send null or the draft inherits the contact’s rate. An explicit UUID always wins. Dashboard creates always send the key after client fill.
Sending Invoices
When you click Send on a draft invoice, a dialog appears with:
- To - Pre-filled with the contact's email address, editable
- Subject - Pre-filled with the invoice number and your organization name
- Message - Pre-filled template with contact name, amount due, and due date
- Attach PDF - Checkbox to include the invoice as a PDF attachment (enabled by default)
You have two options:
- Send Email - Sends the email to the recipient and marks the invoice as sent
- Mark as Sent - Only changes the status without sending an email
Outbound From address:
- If Settings → Email has verified SMTP, the message is sent from your organisation’s From address
- Otherwise Anchor uses the platform default sender (when configured), with Reply-To set from the organisation contact email when available
See Email (SMTP) to use your own domain.
Email History
After sending, an Email History section appears on the invoice detail page showing all emails sent for that invoice. Each entry shows the recipient, subject, status (sent/failed), and timestamp. You can Resend any previous email.
Email Limits
Email sending is subject to monthly limits based on your plan:
| Plan | Emails/month |
|---|---|
| Free | 25 |
| Pro | 100 |
| Storage add-on | Up to 10,000 |
Recording Payments
From the invoice detail page, click Record Payment and enter:
- Amount - Payment amount in cents
- Date - Payment date
This creates a payment journal entry (DR Bank, CR Accounts Receivable) and updates the invoice balance.
Downloading PDFs
Invoices can be downloaded as PDF files from multiple places:
- From the invoice detail page, click Download PDF
- From the customer payment page, click Download Invoice
- Via API:
GET /api/v1/invoices/{id}/pdf?format=pdf - Via MCP: use the
get_invoice_pdftool
To customize how your PDFs look, see Templates.
Invoice Numbering
Invoices are auto-numbered sequentially: INV-00001, INV-00002, etc. The prefix can be configured.
Quotes to Invoices
Accepted quotes can be converted directly to invoices, copying all line items.
Customer Portal
Customers can view and pay invoices through a portal link. The portal shows invoice details, payment status, and provides a PDF download button. Portal links are secured with tokens and can be set to expire.
API Reference
| Endpoint | Method | Description |
|---|---|---|
/api/v1/invoices | GET | List invoices |
/api/v1/invoices | POST | Create invoice |
/api/v1/invoices/{id} | GET | Get invoice details |
/api/v1/invoices/{id} | PATCH | Update invoice |
/api/v1/invoices/{id}/pdf | GET | Get invoice HTML |
/api/v1/invoices/{id}/pdf?format=pdf | GET | Download invoice PDF |
/api/v1/invoices/{id}/compliance | GET | Check compliance warnings |