Documents

Issued invoices (Faktury vydané) are at /api/v1/invoices, received invoices (Faktury přijaté) at /api/v1/received-invoices. Both have the same shape: the supplier is always supplier, the customer customer.

Kinds of issued documents

kindDocument
invoiceInvoice – a tax document (default).
proformaAdvance invoice (zálohová faktura). Not a tax document, no DUZP.
creditNoteCorrective tax document (dobropis). Needs correctedDocumentId and correctionReason; its amounts are negative.
advanceTaxDocumentTax document on a received advance payment. Made only by POST /invoices/{id}/advance-tax-document on a paid proforma.
quotePrice quote. Not paid; dueDate is its validity.

The kind of a document never changes after it is created.

Issuing a document

POST /api/v1/invoices

Only the lines and the customer are required: either a whole customer or a contactId from the address book. abFaktura fills in the rest:

FieldWhen empty
numberThe next number of the number series (the default one, or numberSeriesId).
supplierAlways your company from the settings; not sent for an issued document.
issueDateToday in Czech time.
taxableSupplyDateThe issue date (VAT payers only, not on a proforma or a quote).
dueDateThe issue date + dueInDays (14 days by default).
paymentMethodbankTransfer; your default account and the document number as the variable symbol are filled in.
vatPayerWhether your company is a VAT payer.
lines[].vatRate21 % for a VAT payer, otherwise 0.
currencyCZK. For a foreign currency without exchangeRate the Czech National Bank rate of the DUZP day is used.
languageThe contact's language, otherwise cs. Also en and bilingual.

The server computes the totals

You never send totals. The server computes them like the app: VAT is rounded once per rate (§ 37 of the Czech VAT Act), a price with VAT (priceIncludesVat: true) is computed from the gross amount, line and document discounts apply before VAT, and roundToCrowns adds the rounding to whole crowns.

"lines": [
  { "name": "Development", "quantity": 2, "unitPrice": 1000, "vatRate": 21 },
  { "name": "Book", "quantity": 1, "unitPrice": 112, "vatRate": 12, "priceIncludesVat": true }
]
→ subtotal 2100, vatTotal 432 (420 + 12), total 2532

The VAT classification of a line (vatClassification) defaults to the domestic 01,02 for issued and 40,41 for received documents; for reverse charge, EU supplies and similar, send the code of the Czech VAT return row (e.g. 25, 20, 21).

Invoice from a proforma or a quote

A final invoice of a proforma has sourceProformaId: what was paid on the proforma is paid on the invoice. A document from a quote has sourceQuoteId. When a proforma is paid, a VAT payer issues the tax document on the received payment:

POST /api/v1/invoices/{proforma-id}/advance-tax-document

Changing and deleting

PUT /api/v1/invoices/{id} replaces the whole document: send all fields, the lines are replaced. The number stays when you do not send it. The kind and the links (correction, proforma, quote) do not change.

DELETE /api/v1/invoices/{id} moves the document to the deleted ones (it can be restored in the app); its number is never reused.

Payments

POST /api/v1/invoices/{id}/payments
{ "amount": 3025, "date": "2026-10-28", "method": "bankTransfer", "note": "Statement 10/2026" }

The answer is the document with the new amounts (amountPaid, amountDue, paid). A negative amount refunds an overpayment. GET /invoices/{id}/payments lists the payments, DELETE /invoices/{id}/payments/{paymentId} removes one. For a document in a foreign currency without exchangeRate the Czech National Bank rate of the payment day is used and the exchange difference is booked automatically.

PDF and ISDOC

GET /api/v1/invoices/{id}/pdf returns the PDF as your customer gets it (with your logo and design). When the PDF is not ready yet, the answer is 503 with Retry-After.

GET /api/v1/invoices/{id}/isdoc returns the document as ISDOC, the Czech e-invoice format read by Czech accounting software.

Sending by e-mail

POST /api/v1/invoices/{id}/send
{ "to": "billing@customer.cz", "subject": "Invoice 2026-0042", "message": "Hello, please find the invoice attached…" }

Without a subject and a message your e-mail template is used. The document is marked as sent and its history shows when the customer opened it.

Received invoices

POST /api/v1/received-invoices
{
  "supplier": { "name": "Supplier s.r.o.", "companyNumber": "11223344", "taxNumber": "CZ11223344" },
  "originalNumber": "FV-2026-0042",
  "issueDate": "2026-10-20",
  "dueDate": "2026-11-03",
  "bankAccount": { "accountNumber": "123456789", "bankCode": "0800", "variableSymbol": "20260042" },
  "lines": [ { "name": "Rent 11/2026", "unitPrice": 10000, "vatRate": 21 } ]
}

Your company is the customer, the supplier's number goes to originalNumber, and the invoice gets its own number from the series of received invoices.

Document limit of the plan

Issued documents (invoices, proformas, credit notes, tax documents on payments) count against the plan limit like in the app. When the limit is used up, issuing ends with 422 DocumentLimitReached. Quotes and received invoices do not count.