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}`;

Try the resulting link →

Field reference

FieldTypeNotes
fromobjectIssuer: name, address, email, phone, taxId (all strings)
toobjectClient: same fields as from
numberstringInvoice number, e.g. "INV-0042"
issueDatestringYYYY-MM-DD (defaults to today)
dueDatestringYYYY-MM-DD (defaults to +14 days)
currencystringISO 4217 code (USD, EUR, INR, …) — defaults to USD
itemsarray{ description, quantity, rate } — amount = quantity × rate; max 100 items
taxLabelstring"Tax" | "GST" | "VAT" | "Sales Tax"
taxRatenumberPercent (0–100), applied to post-discount subtotal
discountTypestring"percent" | "flat"
discountValuenumberDiscount percent or flat amount
shippingnumberFlat amount added after tax
notesstringShown on the invoice
termsstringPayment 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.