Invoicing
Create, send, and track professional invoices with payment links and VAT support.
Creating Invoices
Navigate to Income → Invoices and click New Invoice:
- Client details - name, email, address
- Line items - description, quantity, unit price
- VAT rate - standard (20%), reduced (5%), or zero-rated
- Payment terms - net 14, net 30, or custom
- Notes - special instructions
Status Tracking
| Status | Meaning | Colour |
|---|---|---|
| Draft | Not yet sent | Grey |
| Sent | Delivered to client | Blue |
| Viewed | Client opened | Amber |
| Paid | Payment received | Green |
| Overdue | Past due date | Red |
PDF Generation
TaxMTD generates professional PDF invoices with your business details, line items, totals, and payment instructions. Download or email directly to clients.
VAT Support
| Scheme | Description |
|---|---|
| Standard | Input/output VAT at 20% |
| Reduced | 5% for eligible services |
| Zero-rated | 0% for qualifying goods |
| Flat Rate | Simplified percentage scheme |
API
JavaScript
// List invoices
const invoices = await $fetch('https://dev.taxmtd.uk/api/invoices')
// Create invoice
const invoice = await $fetch('https://dev.taxmtd.uk/api/invoices', {
method: 'POST',
body: {
clientName: 'Acme Ltd',
clientEmail: 'billing@acme.com',
items: [
{ description: 'Web Development', quantity: 40, unitPrice: 75 },
{ description: 'Hosting (annual)', quantity: 1, unitPrice: 120 }
],
vatRate: 20,
dueDate: '2026-04-15',
notes: 'Payment via bank transfer'
}
})
// Get PDF
const pdf = await $fetch(`https://dev.taxmtd.uk/api/invoices/${invoice.id}/pdf`)
Python
# List invoices
res = requests.get(
"https://dev.taxmtd.uk/api/invoices",
cookies=session_cookies,
)
invoices = res.json()["data"]
# Create invoice
res = requests.post(
"https://dev.taxmtd.uk/api/invoices",
json={
"clientName": "Acme Ltd",
"clientEmail": "billing@acme.com",
"items": [
{"description": "Web Development", "quantity": 40, "unitPrice": 75},
{"description": "Hosting (annual)", "quantity": 1, "unitPrice": 120},
],
"vatRate": 20,
"dueDate": "2026-04-15",
"notes": "Payment via bank transfer",
},
cookies=session_cookies,
)
invoice = res.json()["data"]
PHP
$invoices = Http::get('https://dev.taxmtd.uk/api/invoices')->json();
$invoice = Http::post('https://dev.taxmtd.uk/api/invoices', [
'clientName' => 'Acme Ltd',
'clientEmail' => 'billing@acme.com',
'items' => [
['description' => 'Web Development', 'quantity' => 40, 'unitPrice' => 75],
],
'vatRate' => 20,
'dueDate' => '2026-04-15',
])->json();
Rust
// List invoices
let invoices = client
.get("https://dev.taxmtd.uk/api/invoices")
.send().await?
.json::<serde_json::Value>().await?;
// Create invoice
let invoice = client.post("https://dev.taxmtd.uk/api/invoices")
.json(&serde_json::json!({
"clientName": "Acme Ltd",
"clientEmail": "billing@acme.com",
"items": [
{"description": "Web Development", "quantity": 40, "unitPrice": 75},
{"description": "Hosting (annual)", "quantity": 1, "unitPrice": 120}
],
"vatRate": 20,
"dueDate": "2026-04-15",
"notes": "Payment via bank transfer"
}))
.send().await?
.json::<serde_json::Value>().await?;
cURL
# List invoices
curl https://dev.taxmtd.uk/api/invoices
# Create invoice
curl -X POST https://dev.taxmtd.uk/api/invoices \
-H "Content-Type: application/json" \
-d '{"clientName":"Acme Ltd","items":[{"description":"Dev","quantity":40,"unitPrice":75}]}'
# Download PDF
curl https://dev.taxmtd.uk/api/invoices/1/pdf -o invoice.pdf
Importing Invoices
Already have invoices in another platform? TaxMTD can import them from FreeAgent, Stripe, Shopify, WooCommerce, Xero, QuickBooks, Sage, and more - with line items, VAT, and payment status preserved.
See Migrating from Other Platforms for details.