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. The line Account fills from the customer’s income account (Contacts → Bookkeeping) and applies that account’s default tax (unless the customer is tax-exempt). An account you pick yourself, or a catalogue item’s income account, is kept if you change the customer. Lines left blank post to the income account on save.
- 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. The due date is filled from the customer's payment terms (or the organisation default) and follows the issue date until you pick one yourself
- Add line items. Optionally pick a catalogue item — stock fills description and sale price and will relieve quantity when you send; service fills description and price but does not change stock. Free-text lines with no item are still valid.
- 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. Drafts created from a sales order also cannot replace lines (Edit is hidden). 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, …). Admins set prefix, hyphen vs none, digit width, and the next number under Settings → Document numbering (manage:accounts). Empty prefix is not offered.
The New Invoice screen does not type a number. API, import, and MCP create_invoice can pass invoiceNumber. Rules:
- Must be unique among non-deleted invoices in the organization
- When omitted, the next auto number from Settings is assigned (default
INV-#####). TaxShopHub-style omit uses that org format, not a bare integer (4235) - Values matching the org format advance the sequence. Sage-style
INP02401matches when prefix isINPwith no hyphen (next afterINP02400isINP02401) - Unprefixed
4234is stored as custom and does not move the sequence (auto would beINV-04235if you set next to 4235, not4235) - Opening
OPEN-*numbers (for exampleOPEN-SALC-500) are kept and ignored for the auto series - Duplicate live numbers return HTTP 409
- If live invoices do not match the default format and numbering is not saved yet, omit-number create returns 409 until Settings is set
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 |
| Catalogue item | Optional. Stock items relieve quantity on send; service items do not. Leave empty for ad-hoc text. |
| Quantity | Number of units (stored as qty x 100) |
| Unit Price | Price per unit in cents |
| Account | Revenue account to credit. Hidden when a catalogue item is selected (the item’s revenue account, or the contact/organisation default, is used). |
| 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.
Credit note lines
Credit notes use the same line fields. Pick the catalogue item being credited so the credit reduces that item (and its inventory category) in Reports → Sales by category. The item only labels the line: it does not return stock. Stock comes back when you send a credit note linked to the original invoice, as before. When Account is hidden, the item’s revenue account is used, then the customer or organisation default.
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
Sending (email or mark-as-sent) posts the sales journal. Lines with a stock catalogue item also reduce quantity on hand and post cost of sales — except sales-order stock lines, which already left on a delivery note: those post DR COGS / CR GDNI and do not issue stock a second time. Service items and free-text lines do not move stock. Saving a draft does not post.
Direct invoices and cash sales do not need a sales order. They cannot take units another order has reserved (send/post fails if that would drop on-hand below reserved).
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 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 |
Deposit and retainer invoices
Tick This is a deposit / retainer invoice on a new invoice when you bill the customer before the work is done. It is a full tax invoice: VAT is due when you issue it or are paid, whichever comes first.
Sending it posts:
| Debit | Credit | |
|---|---|---|
| Deposit invoice | Accounts Receivable (total) | Customer Deposits (amount excl. VAT), Output VAT |
The lines still need an income account (it is shown on the deduction later), but nothing is posted to it. Income is counted once, on the final invoice. The deposit invoice's page shows Deposit used: how much later invoices have deducted and what is left.
Deducting it on the final invoice. Create the final invoice for the full contract value. Once the customer is chosen, Deposits under Line Items lists their sent deposit invoices in that currency. Click Deduct a deposit and pick one: a line Less deposit — INV-00001 is added for what is left (you can lower the amount). It posts:
| Debit | Credit | |
|---|---|---|
| Final invoice | Accounts Receivable (balance), Customer Deposits (deposit excl. VAT), Output VAT on the deposit | Income account (full contract), Output VAT (full contract) |
Example, 15 % VAT, contract R2 400 000 excl. VAT, 50 % deposit:
| Step | Debit | Credit |
|---|---|---|
| Deposit INV-00001, R1 200 000 | AR 1 380 000 | Customer Deposits 1 200 000; Output VAT 180 000 |
| Customer pays | Bank 1 380 000 | AR 1 380 000 |
| Final INV-00002: R2 400 000 less deposit R1 200 000 | AR 1 380 000; Customer Deposits 1 200 000; Output VAT 180 000 | Income 2 400 000; Output VAT 360 000 |
Income is R2 400 000 once, Customer Deposits ends at nil, and Output VAT is R180 000 in each period.
Rules:
- Only a sent deposit or retainer invoice of the same customer in the same currency can be deducted, and never more than is left. Draft invoices that deduct a deposit hold their amount until they are voided or deleted.
- You can deduct a deposit that is not paid yet; the customer still owes the deposit invoice. The drawer shows what is still due.
- A deposit invoice whose lines use different tax rates can't be deducted as one line.
- Void the final invoice to release its deduction. A deposit invoice can't be voided while a sent invoice deducts it.
- Duplicate and ARIA's "copy an earlier invoice" leave the deduction lines out.
How to check: run Reports → General Ledger for Customer Deposits (2410). Each deposit invoice credits it and each deduction debits it, so the balance is the deposits not yet used.
Deposit invoices sent before this change (October 2026) posted to the line's income account. They are not changed. If one is still open at a reporting date, move it with a manual journal: debit the income account, credit Customer Deposits, excl. VAT.
Use a deposit invoice when the customer needs a tax invoice for the deposit. Use Customer prepayments for money received without an invoice.
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
From the invoice detail page:
- Download PDF — the tax invoice (
GET /api/v1/invoices/{id}/pdf?format=pdf) - Download POD — proof of delivery of the same invoice: description and quantity, no prices or totals, title Proof of delivery, a Received by block, and “This is not a tax invoice.” (
format=pdf&variant=pod). It does not post, change stock, or change quantity invoiced. - Print invoice and POD — one PDF, the tax invoice then the proof of delivery (
format=pdf&variant=with-pod). Open that file to print.variant=with-podis only valid withformat=pdf.
From the customer payment page, click Download Invoice (the tax invoice only).
Via MCP: get_invoice_pdf. Omit variant for the tax invoice.
To customize how your PDFs look, see Templates.
Invoice Numbering
Invoices are auto-numbered from Settings → Document numbering. Default organisations stay INV-#####. Sage Pastel-style series use prefix INP, no hyphen, and a next number such as 2401 → INP02401. Unprefixed 4234 stays custom.
Quotes to Invoices
Accepted quotes can be converted directly to invoices, copying all line items — or converted to a sales order, not both. See Quotes and Sales Orders.
Invoices from a sales order
Create invoice on Sales → Orders opens a line picker and raises a draft tax invoice. Stock quantity is the delivered remainder (whole units); service and free-text quantity is the ordered remainder (up to two decimal places). Stock must be shipped on a delivery note (GDN) first. The draft does not count as invoiced until you send it. The invoice page shows From SO-#####. Sending posts VAT and COGS from GDNI (no second issue). A delivery note is not a tax invoice.
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.
Signature requests
You can ask a customer to sign an invoice: they get an email with a link to a page where they review the invoice and sign it. Ask ARIA "Send INV-00045 to Jan Smit ([email protected]) for signature", or use the API below.
- The email goes the way invoices are emailed: from your organisation's mailbox (Settings → Email) when it is verified, otherwise from Anchor's address with replies to your organisation. If it cannot be sent, nothing is requested.
- A void invoice cannot be sent for signature. Asking again sends a new, separate request; a reminder goes to the latest request that is still waiting and has not expired.
- Signing does not change the invoice or post anything.
API Reference
| Endpoint | Method | Description |
|---|---|---|
/api/v1/invoices | GET | List invoices |
/api/v1/invoices | POST | Create invoice. Optional depositDeductions: [{ depositInvoiceId, amount }] (amount in cents excl. VAT; omit for all that is left) |
/api/v1/invoices/{id} | GET | Get invoice details |
/api/v1/invoices/{id} | PATCH | Update invoice. depositDeductions replaces the "Less deposit" lines; omit it to keep them |
/api/v1/contacts/{id}/deposits | GET | The customer's sent deposit / retainer invoices with left (cents, excl. VAT). Query currency, excludeInvoiceId |
/api/v1/invoices/{id}/pdf | GET | Invoice HTML. variant=pod is proof-of-delivery HTML |
/api/v1/invoices/{id}/pdf?format=pdf | GET | Tax invoice PDF |
/api/v1/invoices/{id}/pdf?format=pdf&variant=pod | GET | Proof of delivery PDF (not a tax invoice; does not post) |
/api/v1/invoices/{id}/pdf?format=pdf&variant=with-pod | GET | One PDF: tax invoice, then proof of delivery |
/api/v1/invoices/{id}/compliance | GET | Check compliance warnings (a sent invoice is checked as sent) |
/api/v1/invoices/{id}/signature | POST | Email a signature request (signerName, signerEmail, optional expiresAt) |
/api/v1/invoices/{id}/signature | GET | List the invoice's signature requests |
/api/v1/invoices/{id}/signature/resend | POST | Remind the signer of the latest pending request |