Sign in

API reference / ZiloInvoice

ZiloInvoice

Customers, products, invoices and receipts.

Base URL https://api.zilomail.in

List customers#

GET/v1/invoice/customers
invoice.read

The customers the person may see (their territory). Search by name, code, phone, email or tax id.

Query

qstring
Up to 200 characters.
limitinteger
How many to return (1–200). Default 50.
cursorstring
The next value from the previous page. Up to 500 characters.

Answer · 200 OK

dataarray of object
idstring
codestring
namestring
statusstring
ACTIVE, PENDING_APPROVAL or INACTIVE.
phonestring
emailstring | null
taxIdstring | null
GSTIN in India; the country's tax number elsewhere.
panstring | null
contactPersonstring | null
countrystring | null
billingobject
linestring | null
citystring | null
statestring | null
stateCodestring | null
postalCodestring | null
shippingobject
linestring | null
citystring | null
statestring | null
stateCodestring | null
postalCodestring | null
creditLimitstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
paymentTermsstring | null
dueDaysinteger | null
outstandingstring
Unpaid on their confirmed invoices.
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
updatedAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
nextstring | null
Pass as cursor for the next page; null on the last.
curl "https://api.zilomail.in/v1/invoice/customers?limit=20" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "data": [
    {
      "id": "string",
      "code": "string",
      "name": "string",
      "status": "string",
      "phone": "string",
      "email": "string",
      "taxId": "string",
      "pan": "string",
      "contactPerson": "string",
      "country": "string",
      "billing": {
        "line": "string",
        "city": "string",
        "state": "string",
        "stateCode": "string",
        "postalCode": "string"
      },
      "shipping": {
        "line": "string",
        "city": "string",
        "state": "string",
        "stateCode": "string",
        "postalCode": "string"
      },
      "creditLimit": "string",
      "paymentTerms": "string",
      "dueDays": 0,
      "outstanding": "string",
      "pendingApproval": {
        "id": "string",
        "status": "pending"
      },
      "createdAt": "2026-10-17T09:30:00.000Z",
      "updatedAt": "2026-10-17T09:30:00.000Z"
    }
  ],
  "next": "string"
}
Try it

Sign in to call it as yourself.

Get a customer#

GET/v1/invoice/customers/{id}
invoice.readETag · If-Match

Path

idstringrequired
An id this API gave out. Up to 64 characters.

Answer · 200 OK

idstring
codestring
namestring
statusstring
ACTIVE, PENDING_APPROVAL or INACTIVE.
phonestring
emailstring | null
taxIdstring | null
GSTIN in India; the country's tax number elsewhere.
panstring | null
contactPersonstring | null
countrystring | null
billingobject
linestring | null
citystring | null
statestring | null
stateCodestring | null
postalCodestring | null
shippingobject
linestring | null
citystring | null
statestring | null
stateCodestring | null
postalCodestring | null
creditLimitstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
paymentTermsstring | null
dueDaysinteger | null
outstandingstring
Unpaid on their confirmed invoices.
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
updatedAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
curl "https://api.zilomail.in/v1/invoice/customers/ID" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "id": "string",
  "code": "string",
  "name": "string",
  "status": "string",
  "phone": "string",
  "email": "string",
  "taxId": "string",
  "pan": "string",
  "contactPerson": "string",
  "country": "string",
  "billing": {
    "line": "string",
    "city": "string",
    "state": "string",
    "stateCode": "string",
    "postalCode": "string"
  },
  "shipping": {
    "line": "string",
    "city": "string",
    "state": "string",
    "stateCode": "string",
    "postalCode": "string"
  },
  "creditLimit": "string",
  "paymentTerms": "string",
  "dueDays": 0,
  "outstanding": "string",
  "pendingApproval": {
    "id": "string",
    "status": "pending"
  },
  "createdAt": "2026-10-17T09:30:00.000Z",
  "updatedAt": "2026-10-17T09:30:00.000Z"
}
Try it

Sign in to call it as yourself.

Add a customer#

POST/v1/invoice/customers
invoice.writemay wait for approval (202)Idempotency-Key

The same checks as the Add customer form (phone, GSTIN and its state, PAN, postal codes). Made by someone limited to part of the sales geography, it goes into their part. With approval levels on Customers: create, it answers 202 and the customer waits as PENDING_APPROVAL.

Body

namestringrequired
Up to 200 characters.
codestring
Default: the next number in the Customers series. Up to 40 characters.
phonestringrequired
10 digits in India; with the country code elsewhere. Up to 30 characters.
emailstring
Up to 254 characters.
taxIdstring
Up to 30 characters.
panstring
Up to 10 characters.
contactPersonstring
Up to 120 characters.
countrystring
ISO country code; default the company's. Up to 2 characters.
billingAddressstring
Up to 500 characters.
billingCitystring
Up to 100 characters.
billingStatestring
Up to 100 characters.
billingStateCodestring
Up to 10 characters.
billingPostalCodestring
Up to 12 characters.
shippingAddressstring
Up to 500 characters.
shippingCitystring
Up to 100 characters.
shippingStatestring
Up to 100 characters.
shippingStateCodestring
Up to 10 characters.
shippingPostalCodestring
Up to 12 characters.
creditLimitnumber
paymentTermsenum
One of DUE_ON_RECEIPT, NET_15, NET_30, NET_45, NET_60, ADVANCE.
dueDaysinteger

Answer · 201 Created

idstring
codestring
namestring
statusstring
ACTIVE, PENDING_APPROVAL or INACTIVE.
phonestring
emailstring | null
taxIdstring | null
GSTIN in India; the country's tax number elsewhere.
panstring | null
contactPersonstring | null
countrystring | null
billingobject
linestring | null
citystring | null
statestring | null
stateCodestring | null
postalCodestring | null
shippingobject
linestring | null
citystring | null
statestring | null
stateCodestring | null
postalCodestring | null
creditLimitstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
paymentTermsstring | null
dueDaysinteger | null
outstandingstring
Unpaid on their confirmed invoices.
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
updatedAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.

Or 202 with the approval it waits for: see Approvals.

curl -X POST "https://api.zilomail.in/v1/invoice/customers" \
  -H "Authorization: Bearer $ZILO_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Kumar Traders",
  "phone": "9876543210",
  "email": "accounts@kumartraders.in",
  "taxId": "18AABCK1234F1Z5",
  "billingCity": "Guwahati",
  "billingState": "Assam",
  "billingStateCode": "18",
  "paymentTerms": "NET_30"
}'
Answer · 201 Created
{
  "id": "string",
  "code": "string",
  "name": "string",
  "status": "string",
  "phone": "string",
  "email": "string",
  "taxId": "string",
  "pan": "string",
  "contactPerson": "string",
  "country": "string",
  "billing": {
    "line": "string",
    "city": "string",
    "state": "string",
    "stateCode": "string",
    "postalCode": "string"
  },
  "shipping": {
    "line": "string",
    "city": "string",
    "state": "string",
    "stateCode": "string",
    "postalCode": "string"
  },
  "creditLimit": "string",
  "paymentTerms": "string",
  "dueDays": 0,
  "outstanding": "string",
  "pendingApproval": {
    "id": "string",
    "status": "pending"
  },
  "createdAt": "2026-10-17T09:30:00.000Z",
  "updatedAt": "2026-10-17T09:30:00.000Z"
}
Try it

Sign in to call it as yourself.

Change a customer#

PATCH/v1/invoice/customers/{id}
invoice.writemay wait for approval (202)ETag · If-Match

Only the fields sent change. With approval levels on Customers: edit, the change waits (202).

Path

idstringrequired
An id this API gave out. Up to 64 characters.

Body

namestring
Up to 200 characters.
codestring
Default: the next number in the Customers series. Up to 40 characters.
phonestring
10 digits in India; with the country code elsewhere. Up to 30 characters.
emailstring
Up to 254 characters.
taxIdstring
Up to 30 characters.
panstring
Up to 10 characters.
contactPersonstring
Up to 120 characters.
countrystring
ISO country code; default the company's. Up to 2 characters.
billingAddressstring
Up to 500 characters.
billingCitystring
Up to 100 characters.
billingStatestring
Up to 100 characters.
billingStateCodestring
Up to 10 characters.
billingPostalCodestring
Up to 12 characters.
shippingAddressstring
Up to 500 characters.
shippingCitystring
Up to 100 characters.
shippingStatestring
Up to 100 characters.
shippingStateCodestring
Up to 10 characters.
shippingPostalCodestring
Up to 12 characters.
creditLimitnumber
paymentTermsenum
One of DUE_ON_RECEIPT, NET_15, NET_30, NET_45, NET_60, ADVANCE.
dueDaysinteger

Answer · 200 OK

idstring
codestring
namestring
statusstring
ACTIVE, PENDING_APPROVAL or INACTIVE.
phonestring
emailstring | null
taxIdstring | null
GSTIN in India; the country's tax number elsewhere.
panstring | null
contactPersonstring | null
countrystring | null
billingobject
linestring | null
citystring | null
statestring | null
stateCodestring | null
postalCodestring | null
shippingobject
linestring | null
citystring | null
statestring | null
stateCodestring | null
postalCodestring | null
creditLimitstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
paymentTermsstring | null
dueDaysinteger | null
outstandingstring
Unpaid on their confirmed invoices.
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
updatedAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.

Or 202 with the approval it waits for: see Approvals.

curl -X PATCH "https://api.zilomail.in/v1/invoice/customers/ID" \
  -H "Authorization: Bearer $ZILO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
Answer · 200 OK
{
  "id": "string",
  "code": "string",
  "name": "string",
  "status": "string",
  "phone": "string",
  "email": "string",
  "taxId": "string",
  "pan": "string",
  "contactPerson": "string",
  "country": "string",
  "billing": {
    "line": "string",
    "city": "string",
    "state": "string",
    "stateCode": "string",
    "postalCode": "string"
  },
  "shipping": {
    "line": "string",
    "city": "string",
    "state": "string",
    "stateCode": "string",
    "postalCode": "string"
  },
  "creditLimit": "string",
  "paymentTerms": "string",
  "dueDays": 0,
  "outstanding": "string",
  "pendingApproval": {
    "id": "string",
    "status": "pending"
  },
  "createdAt": "2026-10-17T09:30:00.000Z",
  "updatedAt": "2026-10-17T09:30:00.000Z"
}
Try it

Sign in to call it as yourself.

List products and services#

GET/v1/invoice/products
invoice.read

Query

qstring
Up to 200 characters.
kindenum
One of goods, services.
limitinteger
How many to return (1–200). Default 50.
cursorstring
The next value from the previous page. Up to 500 characters.

Answer · 200 OK

dataarray of object
idstring
codestring
namestring
kindenum
One of goods, services.
statusstring
barcodestring | null
brandstring | null
unitobject
idstring
namestring
categoryobject | null
idstring
namestring
hsnobject | null
idstring
codestring
taxPercentnumber
ratestring
Sale rate before tax.
rateWithTaxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
purchaseRatestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
updatedAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
nextstring | null
Pass as cursor for the next page; null on the last.
curl "https://api.zilomail.in/v1/invoice/products?limit=20" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "data": [
    {
      "id": "string",
      "code": "string",
      "name": "string",
      "kind": "goods",
      "status": "string",
      "barcode": "string",
      "brand": "string",
      "unit": {
        "id": "string",
        "name": "string"
      },
      "category": {
        "id": "string",
        "name": "string"
      },
      "hsn": {
        "id": "string",
        "code": "string",
        "taxPercent": 0
      },
      "rate": "string",
      "rateWithTax": "string",
      "purchaseRate": "string",
      "pendingApproval": {
        "id": "string",
        "status": "pending"
      },
      "createdAt": "2026-10-17T09:30:00.000Z",
      "updatedAt": "2026-10-17T09:30:00.000Z"
    }
  ],
  "next": "string"
}
Try it

Sign in to call it as yourself.

Get a product#

GET/v1/invoice/products/{id}
invoice.readETag · If-Match

Path

idstringrequired
An id this API gave out. Up to 64 characters.

Answer · 200 OK

idstring
codestring
namestring
kindenum
One of goods, services.
statusstring
barcodestring | null
brandstring | null
unitobject
idstring
namestring
categoryobject | null
idstring
namestring
hsnobject | null
idstring
codestring
taxPercentnumber
ratestring
Sale rate before tax.
rateWithTaxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
purchaseRatestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
updatedAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
curl "https://api.zilomail.in/v1/invoice/products/ID" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "id": "string",
  "code": "string",
  "name": "string",
  "kind": "goods",
  "status": "string",
  "barcode": "string",
  "brand": "string",
  "unit": {
    "id": "string",
    "name": "string"
  },
  "category": {
    "id": "string",
    "name": "string"
  },
  "hsn": {
    "id": "string",
    "code": "string",
    "taxPercent": 0
  },
  "rate": "string",
  "rateWithTax": "string",
  "purchaseRate": "string",
  "pendingApproval": {
    "id": "string",
    "status": "pending"
  },
  "createdAt": "2026-10-17T09:30:00.000Z",
  "updatedAt": "2026-10-17T09:30:00.000Z"
}
Try it

Sign in to call it as yourself.

Add a product or service#

POST/v1/invoice/products
invoice.writemay wait for approval (202)Idempotency-Key

Body

namestringrequired
Up to 200 characters.
kindenum
Default "goods". One of goods, services.
codestring
Up to 40 characters.
barcodestring
Up to 60 characters.
brandstring
Up to 80 characters.
unitIdstringrequired
Its base unit (GET /v1/invoice/units). Up to 64 characters.
categoryIdstring
Up to 64 characters.
hsnIdstring
Its HSN/SAC code (decides the tax). Up to 64 characters.
ratenumberrequired
Sale rate before tax.
purchaseRatenumber

Answer · 201 Created

idstring
codestring
namestring
kindenum
One of goods, services.
statusstring
barcodestring | null
brandstring | null
unitobject
idstring
namestring
categoryobject | null
idstring
namestring
hsnobject | null
idstring
codestring
taxPercentnumber
ratestring
Sale rate before tax.
rateWithTaxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
purchaseRatestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
updatedAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.

Or 202 with the approval it waits for: see Approvals.

curl -X POST "https://api.zilomail.in/v1/invoice/products" \
  -H "Authorization: Bearer $ZILO_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Tea 250 g",
  "unitId": "<unit id>",
  "rate": 120,
  "hsnId": "<hsn id>"
}'
Answer · 201 Created
{
  "id": "string",
  "code": "string",
  "name": "string",
  "kind": "goods",
  "status": "string",
  "barcode": "string",
  "brand": "string",
  "unit": {
    "id": "string",
    "name": "string"
  },
  "category": {
    "id": "string",
    "name": "string"
  },
  "hsn": {
    "id": "string",
    "code": "string",
    "taxPercent": 0
  },
  "rate": "string",
  "rateWithTax": "string",
  "purchaseRate": "string",
  "pendingApproval": {
    "id": "string",
    "status": "pending"
  },
  "createdAt": "2026-10-17T09:30:00.000Z",
  "updatedAt": "2026-10-17T09:30:00.000Z"
}
Try it

Sign in to call it as yourself.

Change a product#

PATCH/v1/invoice/products/{id}
invoice.writemay wait for approval (202)ETag · If-Match

Only the fields sent change; its other units, tracking and reorder levels stay as they are.

Path

idstringrequired
An id this API gave out. Up to 64 characters.

Body

namestring
Up to 200 characters.
kindenum
Default "goods". One of goods, services.
codestring
Up to 40 characters.
barcodestring
Up to 60 characters.
brandstring
Up to 80 characters.
unitIdstring
Its base unit (GET /v1/invoice/units). Up to 64 characters.
categoryIdstring
Up to 64 characters.
hsnIdstring
Its HSN/SAC code (decides the tax). Up to 64 characters.
ratenumber
Sale rate before tax.
purchaseRatenumber

Answer · 200 OK

idstring
codestring
namestring
kindenum
One of goods, services.
statusstring
barcodestring | null
brandstring | null
unitobject
idstring
namestring
categoryobject | null
idstring
namestring
hsnobject | null
idstring
codestring
taxPercentnumber
ratestring
Sale rate before tax.
rateWithTaxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
purchaseRatestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
updatedAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.

Or 202 with the approval it waits for: see Approvals.

curl -X PATCH "https://api.zilomail.in/v1/invoice/products/ID" \
  -H "Authorization: Bearer $ZILO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
Answer · 200 OK
{
  "id": "string",
  "code": "string",
  "name": "string",
  "kind": "goods",
  "status": "string",
  "barcode": "string",
  "brand": "string",
  "unit": {
    "id": "string",
    "name": "string"
  },
  "category": {
    "id": "string",
    "name": "string"
  },
  "hsn": {
    "id": "string",
    "code": "string",
    "taxPercent": 0
  },
  "rate": "string",
  "rateWithTax": "string",
  "purchaseRate": "string",
  "pendingApproval": {
    "id": "string",
    "status": "pending"
  },
  "createdAt": "2026-10-17T09:30:00.000Z",
  "updatedAt": "2026-10-17T09:30:00.000Z"
}
Try it

Sign in to call it as yourself.

List sales invoices#

GET/v1/invoice/invoices
invoice.read

Newest first, within the person's branches and territory.

Query

customerstring
Up to 64 characters.
statusstring
Up to 30 characters.
fromstring
A calendar date, YYYY-MM-DD.
tostring
A calendar date, YYYY-MM-DD.
unpaidboolean
limitinteger
How many to return (1–200). Default 50.
cursorstring
The next value from the previous page. Up to 500 characters.

Answer · 200 OK

dataarray of object
idstring
numberstring
statusstring
DRAFT, CONFIRMED, PENDING_APPROVAL or CANCELLED.
customerobject
idstring
codestring
namestring
datestring
A calendar date, YYYY-MM-DD.
dueDatestring
A calendar date, YYYY-MM-DD.
branchIdstring | null
currencystring
subtotalstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
discountstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
taxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
totalstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
paidstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
balancestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
linesarray of object
On GET /v1/invoice/invoices/{id}.
productIdstring
productstring
unitstring
quantitynumber
ratestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
discountPercentnumber
taxPercentnumber
taxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
totalstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
nextstring | null
Pass as cursor for the next page; null on the last.
curl "https://api.zilomail.in/v1/invoice/invoices?limit=20" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "data": [
    {
      "id": "string",
      "number": "string",
      "status": "string",
      "customer": {
        "id": "string",
        "code": "string",
        "name": "string"
      },
      "date": "2026-10-17",
      "dueDate": "2026-10-17",
      "branchId": "string",
      "currency": "string",
      "subtotal": "string",
      "discount": "string",
      "tax": "string",
      "total": "string",
      "paid": "string",
      "balance": "string",
      "lines": [
        {
          "productId": "string",
          "product": "string",
          "unit": "string",
          "quantity": 0,
          "rate": "string",
          "discountPercent": 0,
          "taxPercent": 0,
          "tax": "string",
          "total": "string"
        }
      ],
      "pendingApproval": {
        "id": "string",
        "status": "pending"
      },
      "createdAt": "2026-10-17T09:30:00.000Z"
    }
  ],
  "next": "string"
}
Try it

Sign in to call it as yourself.

Get an invoice#

GET/v1/invoice/invoices/{id}
invoice.readETag · If-Match

With its lines.

Path

idstringrequired
An id this API gave out. Up to 64 characters.

Answer · 200 OK

idstring
numberstring
statusstring
DRAFT, CONFIRMED, PENDING_APPROVAL or CANCELLED.
customerobject
idstring
codestring
namestring
datestring
A calendar date, YYYY-MM-DD.
dueDatestring
A calendar date, YYYY-MM-DD.
branchIdstring | null
currencystring
subtotalstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
discountstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
taxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
totalstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
paidstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
balancestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
linesarray of object
On GET /v1/invoice/invoices/{id}.
productIdstring
productstring
unitstring
quantitynumber
ratestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
discountPercentnumber
taxPercentnumber
taxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
totalstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
curl "https://api.zilomail.in/v1/invoice/invoices/ID" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "id": "string",
  "number": "string",
  "status": "string",
  "customer": {
    "id": "string",
    "code": "string",
    "name": "string"
  },
  "date": "2026-10-17",
  "dueDate": "2026-10-17",
  "branchId": "string",
  "currency": "string",
  "subtotal": "string",
  "discount": "string",
  "tax": "string",
  "total": "string",
  "paid": "string",
  "balance": "string",
  "lines": [
    {
      "productId": "string",
      "product": "string",
      "unit": "string",
      "quantity": 0,
      "rate": "string",
      "discountPercent": 0,
      "taxPercent": 0,
      "tax": "string",
      "total": "string"
    }
  ],
  "pendingApproval": {
    "id": "string",
    "status": "pending"
  },
  "createdAt": "2026-10-17T09:30:00.000Z"
}
Try it

Sign in to call it as yourself.

Make a sales invoice#

POST/v1/invoice/invoices
invoice.writemay wait for approval (202)Idempotency-Key

Taxed from the branch's state and the customer's place of supply, numbered in the branch's series, stock taken out and the books posted, exactly as the invoice form does. Draft invoices don't move stock or the books. With approval levels on Sales invoices: create, it answers 202 and waits.

Body

customerIdstringrequired
datestringrequired
A calendar date, YYYY-MM-DD.
dueDatestring
Default: the date plus the customer's due days (as the invoice form sets it).
numberstring
Default: the next in the branch's series. Up to 40 characters.
branchIdstring
Default: the person's first branch (the head office first), as the invoice form preselects.
warehouseIdstring
Where the goods leave from; default: found per line.
statusenum
Default "CONFIRMED". One of DRAFT, CONFIRMED.
linesarray of objectrequired
productIdstringrequired
quantitynumberrequired
ratenumber
Before tax; default the product's rate.
unitIdstring
Default: the product's base unit.
discountPercentnumber
warehouseIdstring

Answer · 201 Created

idstring
numberstring
statusstring
DRAFT, CONFIRMED, PENDING_APPROVAL or CANCELLED.
customerobject
idstring
codestring
namestring
datestring
A calendar date, YYYY-MM-DD.
dueDatestring
A calendar date, YYYY-MM-DD.
branchIdstring | null
currencystring
subtotalstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
discountstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
taxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
totalstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
paidstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
balancestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
linesarray of object
On GET /v1/invoice/invoices/{id}.
productIdstring
productstring
unitstring
quantitynumber
ratestring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
discountPercentnumber
taxPercentnumber
taxstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
totalstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
pendingApprovalobject | null
A change of it waiting for approval.
idstring
statusenum
One of pending, approved, rejected.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.

Or 202 with the approval it waits for: see Approvals.

curl -X POST "https://api.zilomail.in/v1/invoice/invoices" \
  -H "Authorization: Bearer $ZILO_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "customerId": "<customer id>",
  "date": "2026-10-17",
  "lines": [
    {
      "productId": "<product id>",
      "quantity": 12
    }
  ]
}'
Answer · 201 Created
{
  "id": "string",
  "number": "string",
  "status": "string",
  "customer": {
    "id": "string",
    "code": "string",
    "name": "string"
  },
  "date": "2026-10-17",
  "dueDate": "2026-10-17",
  "branchId": "string",
  "currency": "string",
  "subtotal": "string",
  "discount": "string",
  "tax": "string",
  "total": "string",
  "paid": "string",
  "balance": "string",
  "lines": [
    {
      "productId": "string",
      "product": "string",
      "unit": "string",
      "quantity": 0,
      "rate": "string",
      "discountPercent": 0,
      "taxPercent": 0,
      "tax": "string",
      "total": "string"
    }
  ],
  "pendingApproval": {
    "id": "string",
    "status": "pending"
  },
  "createdAt": "2026-10-17T09:30:00.000Z"
}
Try it

Sign in to call it as yourself.

List receipts#

GET/v1/invoice/receipts
invoice.read

Query

customerstring
Up to 64 characters.
fromstring
A calendar date, YYYY-MM-DD.
tostring
A calendar date, YYYY-MM-DD.
limitinteger
How many to return (1–200). Default 50.
cursorstring
The next value from the previous page. Up to 500 characters.

Answer · 200 OK

dataarray of object
idstring
numberstring
customerobject
idstring
namestring
datestring
A calendar date, YYYY-MM-DD.
amountstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
currencystring
modestring
referencestring | null
accountobject
idstring
namestring
allocationsarray of object
invoiceIdstring
numberstring
amountstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
statusstring
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
nextstring | null
Pass as cursor for the next page; null on the last.
curl "https://api.zilomail.in/v1/invoice/receipts?limit=20" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "data": [
    {
      "id": "string",
      "number": "string",
      "customer": {
        "id": "string",
        "name": "string"
      },
      "date": "2026-10-17",
      "amount": "string",
      "currency": "string",
      "mode": "string",
      "reference": "string",
      "account": {
        "id": "string",
        "name": "string"
      },
      "allocations": [
        {
          "invoiceId": "string",
          "number": "string",
          "amount": "string"
        }
      ],
      "status": "string",
      "createdAt": "2026-10-17T09:30:00.000Z"
    }
  ],
  "next": "string"
}
Try it

Sign in to call it as yourself.

Record a receipt#

POST/v1/invoice/receipts
invoice.writemay wait for approval (202)Idempotency-Key

Money received from a customer, set against their invoices (or kept as an advance). Posted to the books under the right branch.

Body

customerIdstringrequired
datestringrequired
A calendar date, YYYY-MM-DD.
amountnumberrequired
accountIdstringrequired
The cash or bank account it went into (GET /v1/invoice/accounts).
modeenum
Default "BANK_TRANSFER". One of CASH, BANK_TRANSFER, CHEQUE, UPI, CARD, OTHER.
referencestring
Up to 80 characters.
notesstring
Up to 500 characters.
allocationsarray of object
Settle these invoices; default: none (an advance).
invoiceIdstringrequired
amountnumberrequired

Answer · 201 Created

idstring
numberstring
customerobject
idstring
namestring
datestring
A calendar date, YYYY-MM-DD.
amountstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
currencystring
modestring
referencestring | null
accountobject
idstring
namestring
allocationsarray of object
invoiceIdstring
numberstring
amountstring
An amount as a string with its decimals, e.g. "1250.50" (never a float).
statusstring
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.

Or 202 with the approval it waits for: see Approvals.

curl -X POST "https://api.zilomail.in/v1/invoice/receipts" \
  -H "Authorization: Bearer $ZILO_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "customerId": "<customer id>",
  "date": "2026-10-17",
  "amount": 5000,
  "accountId": "<account id>",
  "mode": "UPI",
  "reference": "UTR 4410020931",
  "allocations": [
    {
      "invoiceId": "<invoice id>",
      "amount": 5000
    }
  ]
}'
Answer · 201 Created
{
  "id": "string",
  "number": "string",
  "customer": {
    "id": "string",
    "name": "string"
  },
  "date": "2026-10-17",
  "amount": "string",
  "currency": "string",
  "mode": "string",
  "reference": "string",
  "account": {
    "id": "string",
    "name": "string"
  },
  "allocations": [
    {
      "invoiceId": "string",
      "number": "string",
      "amount": "string"
    }
  ],
  "status": "string",
  "createdAt": "2026-10-17T09:30:00.000Z"
}
Try it

Sign in to call it as yourself.

Units#

GET/v1/invoice/units
invoice.read

Units of measure (a product's unitId).

Answer · 200 OK

dataarray of object
idstring
namestring
codestring | null
curl "https://api.zilomail.in/v1/invoice/units" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "data": [
    {
      "id": "string",
      "name": "string",
      "code": "string"
    }
  ]
}
Try it

Sign in to call it as yourself.

HSN/SAC codes#

GET/v1/invoice/tax-codes
invoice.read

A product's hsnId: the code and its tax.

Answer · 200 OK

dataarray of object
idstring
codestring
kindstring
taxPercentnumber
descriptionstring | null
curl "https://api.zilomail.in/v1/invoice/tax-codes" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "data": [
    {
      "id": "string",
      "code": "string",
      "kind": "string",
      "taxPercent": 0,
      "description": "string"
    }
  ]
}
Try it

Sign in to call it as yourself.

Cash and bank accounts#

GET/v1/invoice/accounts
invoice.read

Where receipts go (a receipt's accountId).

Answer · 200 OK

dataarray of object
idstring
namestring
kindstring
branchIdstring | null
curl "https://api.zilomail.in/v1/invoice/accounts" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "data": [
    {
      "id": "string",
      "name": "string",
      "kind": "string",
      "branchId": "string"
    }
  ]
}
Try it

Sign in to call it as yourself.

Branches#

GET/v1/invoice/branches
invoice.read

The organisation's branches (GST registrations) the person works in.

Answer · 200 OK

dataarray of object
idstring
namestring
statestring | null
taxIdstring | null
curl "https://api.zilomail.in/v1/invoice/branches" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "data": [
    {
      "id": "string",
      "name": "string",
      "state": "string",
      "taxId": "string"
    }
  ]
}
Try it

Sign in to call it as yourself.

ZiloInvoice API · ZiloOne Developers