Generate Invoice

POST/v1/invoice

Generate a professionally formatted PDF invoice.

Headers

HeaderValueRequired
AuthorizationBearer YOUR_API_KEYYes
Content-Typeapplication/jsonYes

Request Body

json
{
"invoice_number": "INV-001",
"issue_date": "Feb 18, 2026",
"due_date": "Mar 18, 2026",
"currency": "USD",
"from": {
"name": "Your Company",
"email": "billing@company.com",
"address": "123 Business St, City, Country"
},
"to": {
"name": "Client Name",
"email": "client@example.com",
"address": "456 Client Ave, City, Country"
},
"items": [
{
"description": "Web Development",
"quantity": 40,
"unit_price": 150,
"item_tax_rate": 20
},
{
"description": "Design Services",
"quantity": 10,
"unit_price": 200
}
],
"invoice_tax_rate": 10,
"notes": "Payment due within 30 days. Thank you for your business!"
}

Fields

FieldTypeRequiredDescription
invoice_numberstringYesUnique invoice identifier
issue_datestringYesDate invoice was issued
due_datestringNoPayment due date
currencystringNoCurrency code (default: USD)
fromobjectYesYour company details
from.namestringYesCompany name
from.emailstringNoCompany email
from.addressstringNoCompany address
toobjectYesClient details
to.namestringYesClient name
to.emailstringNoClient email
to.addressstringNoClient address
itemsarrayYesLine items (min 1)
items[].descriptionstringYesItem description
items[].quantitynumberYesQuantity
items[].unit_pricenumberYesPrice per unit
items[].item_tax_ratenumberNoItem-level tax %. Overrides invoice_tax_rate for this item
invoice_tax_ratenumberNoInvoice-level tax % applied to items without item_tax_rate (default: 0). Also accepts tax_rate as alias
notesstringNoAdditional notes

Response

Success (200)

  • Content-Type: application/pdf
  • Body: PDF binary data

Errors

StatusBody
400{ "error": "invoice_number is required" }
401{ "error": "Invalid API key" }
429{ "error": "Monthly limit reached. Please upgrade." }

Tax Rates

Kagyz supports flexible tax calculation with fallback logic:

  1. 1. If an item has item_tax_rate — that rate is used
  2. 2. If an item has no item_tax_rateinvoice_tax_rate is used
  3. 3. If neither is set — no tax (0%)

Mixed Tax Rates Example

json
{
"invoice_tax_rate": 10,
"items": [
{ "description": "Electronics", "quantity": 1, "unit_price": 1000, "item_tax_rate": 20 },
{ "description": "Software", "quantity": 1, "unit_price": 500 },
{ "description": "Exempt Service", "quantity": 1, "unit_price": 300, "item_tax_rate": 0 }
]
}
ItemTax RateReason
Electronics20%Uses item_tax_rate
Software10%Falls back to invoice_tax_rate
Exempt Service0%Uses item_tax_rate (explicitly 0)

For backward compatibility, tax_rate is accepted as an alias for invoice_tax_rate.

Example

bash
curl -X POST https://api.kagyz.com/v1/invoice \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"invoice_number": "INV-001",
"issue_date": "Feb 18, 2026",
"from": { "name": "Acme Inc" },
"to": { "name": "Client Corp" },
"items": [{ "description": "Services", "quantity": 1, "unit_price": 500 }]
}' \
--output invoice.pdf