API reference / ZiloInvoice
ZiloInvoice
Customers, products, invoices and receipts.
List customers#
The customers the person may see (their territory). Search by name, code, phone, email or tax id.
Query
qstringlimitintegercursorstringnext value from the previous page. Up to 500 characters.Answer · 200 OK
dataarray of objectidstringcodestringnamestringstatusstringphonestringemailstring | nulltaxIdstring | nullpanstring | nullcontactPersonstring | nullcountrystring | nullbillingobjectlinestring | nullcitystring | nullstatestring | nullstateCodestring | nullpostalCodestring | nullshippingobjectlinestring | nullcitystring | nullstatestring | nullstateCodestring | nullpostalCodestring | nullcreditLimitstringpaymentTermsstring | nulldueDaysinteger | nulloutstandingstringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringupdatedAtstringnextstring | nullcursor for the next page; null on the last.curl "https://api.zilomail.in/v1/invoice/customers?limit=20" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"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#
Path
idstringrequiredAnswer · 200 OK
idstringcodestringnamestringstatusstringphonestringemailstring | nulltaxIdstring | nullpanstring | nullcontactPersonstring | nullcountrystring | nullbillingobjectlinestring | nullcitystring | nullstatestring | nullstateCodestring | nullpostalCodestring | nullshippingobjectlinestring | nullcitystring | nullstatestring | nullstateCodestring | nullpostalCodestring | nullcreditLimitstringpaymentTermsstring | nulldueDaysinteger | nulloutstandingstringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringupdatedAtstringcurl "https://api.zilomail.in/v1/invoice/customers/ID" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"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#
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
namestringrequiredcodestringphonestringrequiredemailstringtaxIdstringpanstringcontactPersonstringcountrystringbillingAddressstringbillingCitystringbillingStatestringbillingStateCodestringbillingPostalCodestringshippingAddressstringshippingCitystringshippingStatestringshippingStateCodestringshippingPostalCodestringcreditLimitnumberpaymentTermsenumDUE_ON_RECEIPT, NET_15, NET_30, NET_45, NET_60, ADVANCE.dueDaysintegerAnswer · 201 Created
idstringcodestringnamestringstatusstringphonestringemailstring | nulltaxIdstring | nullpanstring | nullcontactPersonstring | nullcountrystring | nullbillingobjectlinestring | nullcitystring | nullstatestring | nullstateCodestring | nullpostalCodestring | nullshippingobjectlinestring | nullcitystring | nullstatestring | nullstateCodestring | nullpostalCodestring | nullcreditLimitstringpaymentTermsstring | nulldueDaysinteger | nulloutstandingstringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringupdatedAtstringOr 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"
}'{
"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#
Only the fields sent change. With approval levels on Customers: edit, the change waits (202).
Path
idstringrequiredBody
namestringcodestringphonestringemailstringtaxIdstringpanstringcontactPersonstringcountrystringbillingAddressstringbillingCitystringbillingStatestringbillingStateCodestringbillingPostalCodestringshippingAddressstringshippingCitystringshippingStatestringshippingStateCodestringshippingPostalCodestringcreditLimitnumberpaymentTermsenumDUE_ON_RECEIPT, NET_15, NET_30, NET_45, NET_60, ADVANCE.dueDaysintegerAnswer · 200 OK
idstringcodestringnamestringstatusstringphonestringemailstring | nulltaxIdstring | nullpanstring | nullcontactPersonstring | nullcountrystring | nullbillingobjectlinestring | nullcitystring | nullstatestring | nullstateCodestring | nullpostalCodestring | nullshippingobjectlinestring | nullcitystring | nullstatestring | nullstateCodestring | nullpostalCodestring | nullcreditLimitstringpaymentTermsstring | nulldueDaysinteger | nulloutstandingstringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringupdatedAtstringOr 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 '{}'{
"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#
Query
qstringkindenumgoods, services.limitintegercursorstringnext value from the previous page. Up to 500 characters.Answer · 200 OK
dataarray of objectidstringcodestringnamestringkindenumgoods, services.statusstringbarcodestring | nullbrandstring | nullunitobjectidstringnamestringcategoryobject | nullidstringnamestringhsnobject | nullidstringcodestringtaxPercentnumberratestringrateWithTaxstringpurchaseRatestringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringupdatedAtstringnextstring | nullcursor for the next page; null on the last.curl "https://api.zilomail.in/v1/invoice/products?limit=20" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"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#
Path
idstringrequiredAnswer · 200 OK
idstringcodestringnamestringkindenumgoods, services.statusstringbarcodestring | nullbrandstring | nullunitobjectidstringnamestringcategoryobject | nullidstringnamestringhsnobject | nullidstringcodestringtaxPercentnumberratestringrateWithTaxstringpurchaseRatestringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringupdatedAtstringcurl "https://api.zilomail.in/v1/invoice/products/ID" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"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#
Body
namestringrequiredkindenumgoods, services.codestringbarcodestringbrandstringunitIdstringrequiredcategoryIdstringhsnIdstringratenumberrequiredpurchaseRatenumberAnswer · 201 Created
idstringcodestringnamestringkindenumgoods, services.statusstringbarcodestring | nullbrandstring | nullunitobjectidstringnamestringcategoryobject | nullidstringnamestringhsnobject | nullidstringcodestringtaxPercentnumberratestringrateWithTaxstringpurchaseRatestringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringupdatedAtstringOr 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>"
}'{
"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#
Only the fields sent change; its other units, tracking and reorder levels stay as they are.
Path
idstringrequiredBody
namestringkindenumgoods, services.codestringbarcodestringbrandstringunitIdstringcategoryIdstringhsnIdstringratenumberpurchaseRatenumberAnswer · 200 OK
idstringcodestringnamestringkindenumgoods, services.statusstringbarcodestring | nullbrandstring | nullunitobjectidstringnamestringcategoryobject | nullidstringnamestringhsnobject | nullidstringcodestringtaxPercentnumberratestringrateWithTaxstringpurchaseRatestringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringupdatedAtstringOr 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 '{}'{
"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#
Newest first, within the person's branches and territory.
Query
customerstringstatusstringfromstringtostringunpaidbooleanlimitintegercursorstringnext value from the previous page. Up to 500 characters.Answer · 200 OK
dataarray of objectidstringnumberstringstatusstringcustomerobjectidstringcodestringnamestringdatestringdueDatestringbranchIdstring | nullcurrencystringsubtotalstringdiscountstringtaxstringtotalstringpaidstringbalancestringlinesarray of objectproductIdstringproductstringunitstringquantitynumberratestringdiscountPercentnumbertaxPercentnumbertaxstringtotalstringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringnextstring | nullcursor for the next page; null on the last.curl "https://api.zilomail.in/v1/invoice/invoices?limit=20" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"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#
With its lines.
Path
idstringrequiredAnswer · 200 OK
idstringnumberstringstatusstringcustomerobjectidstringcodestringnamestringdatestringdueDatestringbranchIdstring | nullcurrencystringsubtotalstringdiscountstringtaxstringtotalstringpaidstringbalancestringlinesarray of objectproductIdstringproductstringunitstringquantitynumberratestringdiscountPercentnumbertaxPercentnumbertaxstringtotalstringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringcurl "https://api.zilomail.in/v1/invoice/invoices/ID" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"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#
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
customerIdstringrequireddatestringrequireddueDatestringnumberstringbranchIdstringwarehouseIdstringstatusenumDRAFT, CONFIRMED.linesarray of objectrequiredproductIdstringrequiredquantitynumberrequiredratenumberunitIdstringdiscountPercentnumberwarehouseIdstringAnswer · 201 Created
idstringnumberstringstatusstringcustomerobjectidstringcodestringnamestringdatestringdueDatestringbranchIdstring | nullcurrencystringsubtotalstringdiscountstringtaxstringtotalstringpaidstringbalancestringlinesarray of objectproductIdstringproductstringunitstringquantitynumberratestringdiscountPercentnumbertaxPercentnumbertaxstringtotalstringpendingApprovalobject | nullidstringstatusenumpending, approved, rejected.createdAtstringOr 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
}
]
}'{
"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#
Query
customerstringfromstringtostringlimitintegercursorstringnext value from the previous page. Up to 500 characters.Answer · 200 OK
dataarray of objectidstringnumberstringcustomerobjectidstringnamestringdatestringamountstringcurrencystringmodestringreferencestring | nullaccountobjectidstringnamestringallocationsarray of objectinvoiceIdstringnumberstringamountstringstatusstringcreatedAtstringnextstring | nullcursor for the next page; null on the last.curl "https://api.zilomail.in/v1/invoice/receipts?limit=20" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"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#
Money received from a customer, set against their invoices (or kept as an advance). Posted to the books under the right branch.
Body
customerIdstringrequireddatestringrequiredamountnumberrequiredaccountIdstringrequiredmodeenumCASH, BANK_TRANSFER, CHEQUE, UPI, CARD, OTHER.referencestringnotesstringallocationsarray of objectinvoiceIdstringrequiredamountnumberrequiredAnswer · 201 Created
idstringnumberstringcustomerobjectidstringnamestringdatestringamountstringcurrencystringmodestringreferencestring | nullaccountobjectidstringnamestringallocationsarray of objectinvoiceIdstringnumberstringamountstringstatusstringcreatedAtstringOr 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
}
]
}'{
"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#
Units of measure (a product's unitId).
Answer · 200 OK
dataarray of objectidstringnamestringcodestring | nullcurl "https://api.zilomail.in/v1/invoice/units" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"data": [
{
"id": "string",
"name": "string",
"code": "string"
}
]
}Try it
Sign in to call it as yourself.
HSN/SAC codes#
A product's hsnId: the code and its tax.
Answer · 200 OK
dataarray of objectidstringcodestringkindstringtaxPercentnumberdescriptionstring | nullcurl "https://api.zilomail.in/v1/invoice/tax-codes" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"data": [
{
"id": "string",
"code": "string",
"kind": "string",
"taxPercent": 0,
"description": "string"
}
]
}Try it
Sign in to call it as yourself.
Cash and bank accounts#
Where receipts go (a receipt's accountId).
Answer · 200 OK
dataarray of objectidstringnamestringkindstringbranchIdstring | nullcurl "https://api.zilomail.in/v1/invoice/accounts" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"data": [
{
"id": "string",
"name": "string",
"kind": "string",
"branchId": "string"
}
]
}Try it
Sign in to call it as yourself.
Branches#
The organisation's branches (GST registrations) the person works in.
Answer · 200 OK
dataarray of objectidstringnamestringstatestring | nulltaxIdstring | nullcurl "https://api.zilomail.in/v1/invoice/branches" \
-H "Authorization: Bearer $ZILO_TOKEN"{
"data": [
{
"id": "string",
"name": "string",
"state": "string",
"taxId": "string"
}
]
}Try it
Sign in to call it as yourself.