API reference
Invoices
Create invoices and credit notes, issue and email them, download PDFs.
Invoices and credit notes share one resource. A new invoice is a draft: change it as often as you like, then issue it (status: "open") or send it, which issues it first.
- Only drafts can be edited or deleted. After that, only the status changes:
paid,uncollectibleorvoid. - Customers and items are copied onto the invoice. Pass a
contact_idorcatalog_idand Zulu copies their details, so later edits to the customer or item never change an invoice you've sent. - Totals and VAT are worked out for you on every save. You can't set them.
- To correct an issued invoice, create a credit note with
type: "credit_note"andcredit_note_for_id. Once it's issued, it's taken off the invoice'samount_due;creditedshows how much has been credited.
List invoices, or get one by id
/v1/invoicequery searches name and number. Filters: status, type, contact_id (the customer it was billed to), credit_note_for_id (an invoice's credit notes) and overdue (open and past its due date, Irish time).
Needs the invoice:read permission
Query parameters
idinvoice idinvoice_
querytextUp to 200 characters
limitnumber1–50, default 20
afterinvoice idinvoice_
beforeinvoice idinvoice_
status"draft" or "open" or "paid" or "uncollectible" or "void"type"invoice" or "credit_note"A credit note corrects an issued invoice; its amounts are positive
contact_idcustomer idcontact_
credit_note_for_idinvoice idinvoice_
overdue"true"Only invoices that are open and past their due date
curl https://api.zulu.ie/v1/invoice \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID"Example response200
{
"data": [
{
"id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"created_at": "2026-10-27T09:30:00.000Z",
"updated_at": "2026-10-27T09:30:00.000Z",
"type": "invoice",
"credit_note_for_id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"status": "draft",
"issued_at": "2026-10-27T09:30:00.000Z",
"paid_at": "2026-10-27T09:30:00.000Z",
"sent_at": "2026-10-27T09:30:00.000Z",
"name": "Main",
"number": "INV-0042",
"date": "2026-10-27",
"due_date": "2026-10-27",
"currency": "EUR",
"notes": "Thank you for your business.",
"custom_fields": [
{
"name": "Main",
"value": "…"
}
],
"hide": [
"notes"
],
"sender": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"bill_to": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"ship_to": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"items": [
{
"source_id": "catalog_5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"name": "Main",
"category": "product",
"description": null,
"quantity": "1",
"unit_price": "120.00",
"vat": {
"source_id": "vat_1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"name": "Main",
"code": "S",
"rate": "0.23"
},
"net": "120.00",
"vat_amount": "27.60"
}
],
"bank_details": {
"source_id": "bank_details_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"bic": "AIBKIE2D",
"iban": "IE29AIBK93115212345678",
"account_number": null,
"sort_code": null
},
"vat_breakdown": [
{
"name": "Main",
"code": "S",
"rate": "0.23",
"net": "120.00",
"vat": "27.60"
}
],
"subtotal": "120.00",
"vat_total": "27.60",
"total": "147.60",
"credited": "120.00",
"amount_due": "120.00"
}
],
"has_more": false
}Create an invoice
/v1/invoiceStarts as draft unless status is open. The sender defaults to the business. A credit note (type: credit_note) needs credit_note_for_id and defaults to that invoice's content. Totals are calculated from items.
Needs the invoice:write permission
Body
type"invoice" or "credit_note"A credit note corrects an issued invoice; its amounts are positive
credit_note_for_idinvoice idnametextrequiredUp to 200 characters
numbertextrequiredUp to 50 characters
status"draft" or "open"datedateYYYY-MM-DD
due_datedateYYYY-MM-DD
currencycurrency codeISO 4217, e.g. EUR
notestextUp to 5,000 characters
custom_fieldslist of objects2 fields inside
nametextrequiredThe label, e.g. "Order No."
valuetextrequiredCan be empty, to show a blank to fill in
hidelist of textFields to leave off the PDF. The sender's VAT number can't be hidden on an issued invoice that charges VAT.
senderobject8 fields inside
contact_idcustomer idfirst_nametextUp to 200 characters
last_nametextUp to 200 characters
company_nametextUp to 200 characters
vat_numbertextUp to 30 characters
emailobject5 fields inside
email_idemail idnametextUp to 200 characters
emailemailUp to 254 characters
first_nametextUp to 200 characters
last_nametextUp to 200 characters
phoneobject3 fields inside
phone_idphone idnametextUp to 200 characters
phonetextUp to 50 characters
addressobject8 fields inside
address_idaddress idnametextUp to 200 characters
address_1textUp to 200 characters
address_2textUp to 200 characters
citytextUp to 200 characters
countytextUp to 200 characters
eircodetextUp to 200 characters
countrytextUp to 200 characters
bill_toobject8 fields inside
contact_idcustomer idfirst_nametextUp to 200 characters
last_nametextUp to 200 characters
company_nametextUp to 200 characters
vat_numbertextUp to 30 characters
emailobject5 fields inside
email_idemail idnametextUp to 200 characters
emailemailUp to 254 characters
first_nametextUp to 200 characters
last_nametextUp to 200 characters
phoneobject3 fields inside
phone_idphone idnametextUp to 200 characters
phonetextUp to 50 characters
addressobject8 fields inside
address_idaddress idnametextUp to 200 characters
address_1textUp to 200 characters
address_2textUp to 200 characters
citytextUp to 200 characters
countytextUp to 200 characters
eircodetextUp to 200 characters
countrytextUp to 200 characters
ship_toobject8 fields inside
contact_idcustomer idfirst_nametextUp to 200 characters
last_nametextUp to 200 characters
company_nametextUp to 200 characters
vat_numbertextUp to 30 characters
emailobject5 fields inside
email_idemail idnametextUp to 200 characters
emailemailUp to 254 characters
first_nametextUp to 200 characters
last_nametextUp to 200 characters
phoneobject3 fields inside
phone_idphone idnametextUp to 200 characters
phonetextUp to 50 characters
addressobject8 fields inside
address_idaddress idnametextUp to 200 characters
address_1textUp to 200 characters
address_2textUp to 200 characters
citytextUp to 200 characters
countytextUp to 200 characters
eircodetextUp to 200 characters
countrytextUp to 200 characters
itemslist of objects7 fields inside
catalog_iditem idquantityquantityrequiredDecimal string, up to 4 places, e.g. "1.5"
nametextUp to 200 characters
category"product" or "service"descriptiontextUp to 2,000 characters
unit_pricemoneyDecimal string, up to 2 places, e.g. "12.50"
vatobject4 fields inside
vat_idVAT rate idnametextUp to 200 characters
codetextUp to 20 characters
raterateDecimal string between 0 and 1, up to 4 places, e.g. "0.135" for 13.5%
bank_detailsobject6 fields inside
bank_details_idbank account idnametextUp to 200 characters
bictextUp to 11 characters
ibantextUp to 34 characters
account_numbertextUp to 30 characters
sort_codetextUp to 20 characters
curl -X POST https://api.zulu.ie/v1/invoice \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"name": "Shelving for the Docklands office",
"number": "INV-0042",
"date": "2026-10-27",
"due_date": "2026-11-10",
"bill_to": {
"contact_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d"
},
"items": [
{
"catalog_id": "catalog_5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"quantity": "2"
},
{
"name": "Installation",
"category": "service",
"quantity": "1",
"unit_price": "320.00",
"vat": {
"vat_id": "vat_1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
}
}
],
"notes": "Thank you for your business."
}'Example response201
{
"id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"created_at": "2026-10-27T09:30:00.000Z",
"updated_at": "2026-10-27T09:30:00.000Z",
"type": "invoice",
"credit_note_for_id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"status": "draft",
"issued_at": "2026-10-27T09:30:00.000Z",
"paid_at": "2026-10-27T09:30:00.000Z",
"sent_at": "2026-10-27T09:30:00.000Z",
"name": "Main",
"number": "INV-0042",
"date": "2026-10-27",
"due_date": "2026-10-27",
"currency": "EUR",
"notes": "Thank you for your business.",
"custom_fields": [
{
"name": "Main",
"value": "…"
}
],
"hide": [
"notes"
],
"sender": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"bill_to": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"ship_to": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"items": [
{
"source_id": "catalog_5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"name": "Main",
"category": "product",
"description": null,
"quantity": "1",
"unit_price": "120.00",
"vat": {
"source_id": "vat_1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"name": "Main",
"code": "S",
"rate": "0.23"
},
"net": "120.00",
"vat_amount": "27.60"
}
],
"bank_details": {
"source_id": "bank_details_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"bic": "AIBKIE2D",
"iban": "IE29AIBK93115212345678",
"account_number": null,
"sort_code": null
},
"vat_breakdown": [
{
"name": "Main",
"code": "S",
"rate": "0.23",
"net": "120.00",
"vat": "27.60"
}
],
"subtotal": "120.00",
"vat_total": "27.60",
"total": "147.60",
"credited": "120.00",
"amount_due": "120.00"
}Update an invoice
/v1/invoiceOnly drafts can be edited. Issuing (draft → open) needs a sender and customer with names and addresses, at least one item, and the sender's VAT number if items charge VAT; the date defaults to today. Invoices: open → paid, uncollectible or void; uncollectible → paid or void. Credit notes: open → paid or void.
Needs the invoice:write permission
Body
idinvoice idrequiredstatus"draft" or "open" or "paid" or "uncollectible" or "void"nametextUp to 200 characters
numbertextUp to 50 characters
datedateYYYY-MM-DD
due_datedateYYYY-MM-DD
currencycurrency codeISO 4217, e.g. EUR
notestextUp to 5,000 characters
custom_fieldslist of objects2 fields inside
nametextrequiredThe label, e.g. "Order No."
valuetextrequiredCan be empty, to show a blank to fill in
hidelist of textFields to leave off the PDF. The sender's VAT number can't be hidden on an issued invoice that charges VAT.
senderobject8 fields inside
contact_idcustomer idfirst_nametextUp to 200 characters
last_nametextUp to 200 characters
company_nametextUp to 200 characters
vat_numbertextUp to 30 characters
emailobject5 fields inside
email_idemail idnametextUp to 200 characters
emailemailUp to 254 characters
first_nametextUp to 200 characters
last_nametextUp to 200 characters
phoneobject3 fields inside
phone_idphone idnametextUp to 200 characters
phonetextUp to 50 characters
addressobject8 fields inside
address_idaddress idnametextUp to 200 characters
address_1textUp to 200 characters
address_2textUp to 200 characters
citytextUp to 200 characters
countytextUp to 200 characters
eircodetextUp to 200 characters
countrytextUp to 200 characters
bill_toobject8 fields inside
contact_idcustomer idfirst_nametextUp to 200 characters
last_nametextUp to 200 characters
company_nametextUp to 200 characters
vat_numbertextUp to 30 characters
emailobject5 fields inside
email_idemail idnametextUp to 200 characters
emailemailUp to 254 characters
first_nametextUp to 200 characters
last_nametextUp to 200 characters
phoneobject3 fields inside
phone_idphone idnametextUp to 200 characters
phonetextUp to 50 characters
addressobject8 fields inside
address_idaddress idnametextUp to 200 characters
address_1textUp to 200 characters
address_2textUp to 200 characters
citytextUp to 200 characters
countytextUp to 200 characters
eircodetextUp to 200 characters
countrytextUp to 200 characters
ship_toobject8 fields inside
contact_idcustomer idfirst_nametextUp to 200 characters
last_nametextUp to 200 characters
company_nametextUp to 200 characters
vat_numbertextUp to 30 characters
emailobject5 fields inside
email_idemail idnametextUp to 200 characters
emailemailUp to 254 characters
first_nametextUp to 200 characters
last_nametextUp to 200 characters
phoneobject3 fields inside
phone_idphone idnametextUp to 200 characters
phonetextUp to 50 characters
addressobject8 fields inside
address_idaddress idnametextUp to 200 characters
address_1textUp to 200 characters
address_2textUp to 200 characters
citytextUp to 200 characters
countytextUp to 200 characters
eircodetextUp to 200 characters
countrytextUp to 200 characters
itemslist of objects7 fields inside
catalog_iditem idquantityquantityrequiredDecimal string, up to 4 places, e.g. "1.5"
nametextUp to 200 characters
category"product" or "service"descriptiontextUp to 2,000 characters
unit_pricemoneyDecimal string, up to 2 places, e.g. "12.50"
vatobject4 fields inside
vat_idVAT rate idnametextUp to 200 characters
codetextUp to 20 characters
raterateDecimal string between 0 and 1, up to 4 places, e.g. "0.135" for 13.5%
bank_detailsobject6 fields inside
bank_details_idbank account idnametextUp to 200 characters
bictextUp to 11 characters
ibantextUp to 34 characters
account_numbertextUp to 30 characters
sort_codetextUp to 20 characters
curl -X PATCH https://api.zulu.ie/v1/invoice \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"status": "paid"
}'Example response200
{
"id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"created_at": "2026-10-27T09:30:00.000Z",
"updated_at": "2026-10-27T09:30:00.000Z",
"type": "invoice",
"credit_note_for_id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"status": "draft",
"issued_at": "2026-10-27T09:30:00.000Z",
"paid_at": "2026-10-27T09:30:00.000Z",
"sent_at": "2026-10-27T09:30:00.000Z",
"name": "Main",
"number": "INV-0042",
"date": "2026-10-27",
"due_date": "2026-10-27",
"currency": "EUR",
"notes": "Thank you for your business.",
"custom_fields": [
{
"name": "Main",
"value": "…"
}
],
"hide": [
"notes"
],
"sender": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"bill_to": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"ship_to": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"items": [
{
"source_id": "catalog_5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"name": "Main",
"category": "product",
"description": null,
"quantity": "1",
"unit_price": "120.00",
"vat": {
"source_id": "vat_1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"name": "Main",
"code": "S",
"rate": "0.23"
},
"net": "120.00",
"vat_amount": "27.60"
}
],
"bank_details": {
"source_id": "bank_details_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"bic": "AIBKIE2D",
"iban": "IE29AIBK93115212345678",
"account_number": null,
"sort_code": null
},
"vat_breakdown": [
{
"name": "Main",
"code": "S",
"rate": "0.23",
"net": "120.00",
"vat": "27.60"
}
],
"subtotal": "120.00",
"vat_total": "27.60",
"total": "147.60",
"credited": "120.00",
"amount_due": "120.00"
}Delete an invoice
/v1/invoiceOnly drafts can be deleted; void an issued invoice or correct it with a credit note.
Needs the invoice:delete permission
Body
idinvoice idrequired
curl -X DELETE https://api.zulu.ie/v1/invoice \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f"
}'Returns 204 with no body.
Suggest the next invoice or credit note number
/v1/invoice/next-numberAdds one to the business's latest number of that type, keeping its format (INV-0041 → INV-0042), and skips numbers already used. Starts at INV-0001 or CN-0001.
Needs the invoice:write permission
Query parameters
type"invoice" or "credit_note"A credit note corrects an issued invoice; its amounts are positive
curl https://api.zulu.ie/v1/invoice/next-number \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID"Example response200
{
"number": "INV-0042"
}Download an invoice or credit note as a PDF
/v1/invoice/pdfDrafts and void invoices are clearly labelled. The VAT number and bank details are shown at the bottom.
Needs the invoice:read permission
Query parameters
idinvoice idrequiredinvoice_
curl "https://api.zulu.ie/v1/invoice/pdf?id=invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f" \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID" \
-o invoice.pdfReturns the file itself (a PDF), not JSON.
List when invoices were emailed, and to whom
/v1/invoice/sendinvoice_id lists one invoice's sends, and status filters, e.g. scheduled. Newest first.
Needs the invoice:read permission
Query parameters
idinvoice send idinvoice_send_
querytextUp to 200 characters
limitnumber1–50, default 20
afterinvoice send idinvoice_send_
beforeinvoice send idinvoice_send_
invoice_idinvoice idinvoice_
status"pending" or "scheduled" or "sent" or "delivered" or "bounced" or "complained" or "failed" or "cancelled"See docs/api.md, "Sending"
curl https://api.zulu.ie/v1/invoice/send \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID"Example response200
{
"data": [
{
"id": "invoice_send_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"created_at": "2026-10-27T09:30:00.000Z",
"updated_at": "2026-10-27T09:30:00.000Z",
"invoice_id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"status": "pending",
"scheduled_at": "2026-10-27T09:30:00.000Z",
"sent_by_user_id": "user_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"sent_by_api_key_id": "api_key_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"to": [
"…"
],
"cc": [
"…"
],
"bcc": [
"…"
],
"message": "Here's your invoice. Thanks again!"
}
],
"has_more": false
}Email an invoice or credit note with its PDF, now or later
/v1/invoice/sendSends to the customer's email on bill_to unless to is given; cc and bcc are optional. With scheduled_at, it goes out then instead (up to 30 days ahead). A draft is issued first; scheduled drafts without a date are dated the day they go out. Needs a verified email. Every send is recorded.
Needs the invoice:write permission
Body
idinvoice idrequiredtolist of emailDefaults to the customer's email on bill_to
cclist of emaile.g. the ship-to contact
bcclist of emaile.g. your own records
messagetextA note shown in the email
greeting"hi" | "hello" | "dear"How the email opens: "Hi Hank," (hi, the default), "Hello Hank," or "Dear Hank,"
wordingtextThe main sentence: standard (the default), minimal, friendly, formal, or reminder (for an invoice that is due or overdue; credit notes use standard)
sign_offtextHow the email ends, before the business name: thank_you (the default), thanks, many_thanks, kind_regards, best_regards or regards
scheduled_attimestampSend later: from a minute to 30 days ahead
curl -X POST https://api.zulu.ie/v1/invoice/send \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"cc": [
"office@globex.ie"
],
"message": "Here's your invoice for the shelving. Thanks again!"
}'Example response200
{
"invoice": {
"id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"created_at": "2026-10-27T09:30:00.000Z",
"updated_at": "2026-10-27T09:30:00.000Z",
"type": "invoice",
"credit_note_for_id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"status": "draft",
"issued_at": "2026-10-27T09:30:00.000Z",
"paid_at": "2026-10-27T09:30:00.000Z",
"sent_at": "2026-10-27T09:30:00.000Z",
"name": "Main",
"number": "INV-0042",
"date": "2026-10-27",
"due_date": "2026-10-27",
"currency": "EUR",
"notes": "Thank you for your business.",
"custom_fields": [
{
"name": "Main",
"value": "…"
}
],
"hide": [
"notes"
],
"sender": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"bill_to": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"ship_to": {
"source_id": "contact_8a3e2c1d-4b5f-4e6a-9c7d-1e2f3a4b5c6d",
"first_name": "Aoife",
"last_name": "Murphy",
"company_name": "Globex Ireland Ltd",
"vat_number": "IE9876543W",
"email": {
"source_id": "email_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"email": "accounts@globex.ie",
"first_name": "Aoife",
"last_name": "Murphy"
},
"phone": {
"source_id": "phone_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"phone": "+353 1 234 5678"
},
"address": {
"source_id": "address_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"address_1": "Unit 4, Docklands Innovation Park",
"address_2": null,
"city": "Dublin 1",
"county": "Dublin",
"eircode": "D01 X2Y3",
"country": "Ireland"
}
},
"items": [
{
"source_id": "catalog_5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"name": "Main",
"category": "product",
"description": null,
"quantity": "1",
"unit_price": "120.00",
"vat": {
"source_id": "vat_1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"name": "Main",
"code": "S",
"rate": "0.23"
},
"net": "120.00",
"vat_amount": "27.60"
}
],
"bank_details": {
"source_id": "bank_details_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"name": "Main",
"bic": "AIBKIE2D",
"iban": "IE29AIBK93115212345678",
"account_number": null,
"sort_code": null
},
"vat_breakdown": [
{
"name": "Main",
"code": "S",
"rate": "0.23",
"net": "120.00",
"vat": "27.60"
}
],
"subtotal": "120.00",
"vat_total": "27.60",
"total": "147.60",
"credited": "120.00",
"amount_due": "120.00"
},
"send": {
"id": "invoice_send_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"created_at": "2026-10-27T09:30:00.000Z",
"updated_at": "2026-10-27T09:30:00.000Z",
"invoice_id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"status": "pending",
"scheduled_at": "2026-10-27T09:30:00.000Z",
"sent_by_user_id": "user_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"sent_by_api_key_id": "api_key_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"to": [
"…"
],
"cc": [
"…"
],
"bcc": [
"…"
],
"message": "Here's your invoice. Thanks again!"
}
}Cancel a scheduled send
/v1/invoice/send/cancelOnly while it is still scheduled. Fails with 409 if it has already gone out. The invoice stays issued.
Needs the invoice:write permission
Body
idinvoice send idrequired
curl -X POST https://api.zulu.ie/v1/invoice/send/cancel \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"id": "invoice_send_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b"
}'Example response200
{
"id": "invoice_send_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"created_at": "2026-10-27T09:30:00.000Z",
"updated_at": "2026-10-27T09:30:00.000Z",
"invoice_id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"status": "pending",
"scheduled_at": "2026-10-27T09:30:00.000Z",
"sent_by_user_id": "user_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"sent_by_api_key_id": "api_key_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"to": [
"…"
],
"cc": [
"…"
],
"bcc": [
"…"
],
"message": "Here's your invoice. Thanks again!"
}Change when a scheduled send goes out
/v1/invoice/send/rescheduleOnly while it is still scheduled. The invoice keeps its date. Fails with 409 if it has already gone out.
Needs the invoice:write permission
Body
idinvoice send idrequiredscheduled_attimestamprequiredFrom a minute to 30 days ahead
curl -X POST https://api.zulu.ie/v1/invoice/send/reschedule \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"id": "invoice_send_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"scheduled_at": "2026-10-27T09:30:00.000Z"
}'Example response200
{
"id": "invoice_send_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"created_at": "2026-10-27T09:30:00.000Z",
"updated_at": "2026-10-27T09:30:00.000Z",
"invoice_id": "invoice_9f8e7d6c-5b4a-4c3d-2e1f-0a9b8c7d6e5f",
"status": "pending",
"scheduled_at": "2026-10-27T09:30:00.000Z",
"sent_by_user_id": "user_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"sent_by_api_key_id": "api_key_3f2b8c1e-7a6d-4e5f-9b0a-1c2d3e4f5a6b",
"to": [
"…"
],
"cc": [
"…"
],
"bcc": [
"…"
],
"message": "Here's your invoice. Thanks again!"
}Totals for an overview: outstanding, overdue, paid and issued
/v1/invoice/summaryInvoices only, per currency. Each amount is the invoice total less its issued credit notes. Outstanding: open with something left to pay. Overdue: outstanding and past its due date (Irish time). Paid and issued this month and last month (for comparisons): by calendar month in Ireland; issued leaves out void invoices.
Needs the invoice:read permission
curl https://api.zulu.ie/v1/invoice/summary \
-H "Authorization: Bearer $ZULU_API_KEY" \
-H "Zulu-Business-Id: $ZULU_BUSINESS_ID"Example response200
{
"as_of": "2026-10-27",
"currencies": [
{
"currency": "EUR",
"outstanding": {
"count": 1,
"amount": "147.60"
},
"overdue": {
"count": 1,
"amount": "147.60"
},
"paid_this_month": {
"count": 1,
"amount": "147.60"
},
"paid_last_month": {
"count": 1,
"amount": "147.60"
},
"issued_this_month": {
"count": 1,
"amount": "147.60"
},
"issued_last_month": {
"count": 1,
"amount": "147.60"
}
}
]
}