For developers & AI agents
Create a pre-filled invoice on InvoiceKo from your app, script, workflow tool, or AI agent by composing a single link — no API key, no signup. Your user opens the link, reviews the invoice in the editor, and downloads the PDF.
Link format
https://invoiceko.com/new?d=<payload>payload is base64url-encoded UTF-8 JSON (standard base64 also works; padding optional). Every field is optional — anything missing gets a sensible default. Invalid values are ignored rather than rejected.
Invoice JSON
{
"from": { "name": "Acme Design Studio", "email": "billing@acme.studio" },
"to": { "name": "Globex Pvt Ltd", "address": "42 MG Road, Bengaluru" },
"number": "INV-0042",
"currency": "INR",
"items": [
{ "description": "Website redesign", "quantity": 1, "rate": 90000 },
{ "description": "Logo refresh", "quantity": 1, "rate": 15000 }
],
"taxLabel": "GST",
"taxRate": 18,
"notes": "Thank you for your business!"
}Encoding it and building the link:
const invoice = { /* see JSON above */ };
const payload = btoa(JSON.stringify(invoice)) // browser
.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
// or in Node.js:
// const payload = Buffer.from(JSON.stringify(invoice)).toString("base64url");
const url = `https://invoiceko.com/new?d=${payload}`;Field reference
| Field | Type | Notes |
|---|---|---|
| from | object | Issuer: name, address, email, phone, taxId (all strings) |
| to | object | Client: same fields as from |
| number | string | Invoice number, e.g. "INV-0042" |
| issueDate | string | YYYY-MM-DD (defaults to today) |
| dueDate | string | YYYY-MM-DD (defaults to +14 days) |
| currency | string | ISO 4217 code (USD, EUR, INR, …) — defaults to USD |
| items | array | { description, quantity, rate } — amount = quantity × rate; max 100 items |
| taxLabel | string | "Tax" | "GST" | "VAT" | "Sales Tax" |
| taxRate | number | Percent (0–100), applied to post-discount subtotal |
| discountType | string | "percent" | "flat" |
| discountValue | number | Discount percent or flat amount |
| shipping | number | Flat amount added after tax |
| notes | string | Shown on the invoice |
| terms | string | Payment terms, shown on the invoice |
Snake_case aliases are accepted (tax_rate, issue_date, …). Logos can't be set via link — users add them in the editor. Machine-readable schema: /schema/invoice.json · LLM-oriented docs: /llms.txt
Guidance for AI agents
- Present the link to your user and ask them to review amounts, dates, and tax before downloading — don't describe the invoice as final.
- The invoice is rendered entirely in the user's browser; nothing in the link is stored on InvoiceKo's servers.
- A REST API returning PDFs and an MCP server are planned; the prefill link is the supported integration today.