Invoicing

Create, send, and track professional invoices with payment links and VAT support.

Creating Invoices

Navigate to Income → Invoices and click New Invoice:

  1. Client details - name, email, address
  2. Line items - description, quantity, unit price
  3. VAT rate - standard (20%), reduced (5%), or zero-rated
  4. Payment terms - net 14, net 30, or custom
  5. Notes - special instructions

Status Tracking

StatusMeaningColour
DraftNot yet sentGrey
SentDelivered to clientBlue
ViewedClient openedAmber
PaidPayment receivedGreen
OverduePast due dateRed

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

SchemeDescription
StandardInput/output VAT at 20%
Reduced5% for eligible services
Zero-rated0% for qualifying goods
Flat RateSimplified 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.