Access the Zoho Inventory API with managed OAuth authentication. Manage items, sales orders, invoices, purchase orders, bills, contacts, shipment orders, and item groups with full CRUD operations.
Reference
Available Modules
| Module | Endpoint | Description |
|---|---|---|
| Items | /items | Products and services |
| Item Groups | /itemgroups | Grouped product variants |
| Contacts | /contacts | Customers and vendors |
| Sales Orders | /salesorders | Sales orders |
| Invoices | /invoices | Sales invoices |
| Purchase Orders | /purchaseorders | Purchase orders |
| Bills | /bills | Vendor bills |
| Shipment Orders | /shipmentorders | Shipment tracking |
List Items
GET /zoho-inventory/inventory/v1/itemsExample:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/zoho-inventory/inventory/v1/items')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFResponse:
{
"code": 0,
"message": "success",
"items": [
{
"item_id": "1234567890000",
"name": "Widget",
"status": "active",
"sku": "WDG-001",
"rate": 25.00,
"purchase_rate": 10.00,
"is_taxable": true
}
],
"page_context": {
"page": 1,
"per_page": 200,
"has_more_page": false
}
}Get Item
GET /zoho-inventory/inventory/v1/items/{item_id}Create Item
POST /zoho-inventory/inventory/v1/items
Content-Type: application/json
{
"name": "Widget",
"rate": 25.00,
"purchase_rate": 10.00,
"sku": "WDG-001",
"item_type": "inventory",
"product_type": "goods",
"unit": "pcs",
"is_taxable": true
}Required Fields:
name- Item name
Optional Fields:
rate- Sales pricepurchase_rate- Purchase costsku- Stock keeping unit (unique)item_type-inventory,sales,purchases, orsales_and_purchasesproduct_type-goodsorserviceunit- Unit of measurementis_taxable- Tax applicabilitytax_id- Tax identifierdescription- Item descriptionreorder_level- Reorder pointvendor_id- Preferred vendor
Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"name": "Widget",
"rate": 25.00,
"purchase_rate": 10.00,
"sku": "WDG-001",
"item_type": "inventory",
"product_type": "goods",
"unit": "pcs"
}).encode()
req = urllib.request.Request('https://api.maton.ai/zoho-inventory/inventory/v1/items', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFResponse:
{
"code": 0,
"message": "The item has been added.",
"item": {
"item_id": "1234567890000",
"name": "Widget",
"status": "active",
"rate": 25.00,
"purchase_rate": 10.00,
"sku": "WDG-001"
}
}Update Item
PUT /zoho-inventory/inventory/v1/items/{item_id}
Content-Type: application/json
{
"name": "Updated Widget",
"rate": 30.00
}Delete Item
DELETE /zoho-inventory/inventory/v1/items/{item_id}Item Status Actions
# Mark as active
POST /zoho-inventory/inventory/v1/items/{item_id}/active
# Mark as inactive
POST /zoho-inventory/inventory/v1/items/{item_id}/inactiveList Contacts
GET /zoho-inventory/inventory/v1/contactsQuery Parameters:
filter_by-Status.All,Status.Active,Status.Inactive,Status.Duplicate,Status.Crmsearch_text- Search across contact fieldssort_column-contact_name,first_name,last_name,email,created_time,last_modified_timecontact_name,company_name,email,phone- Field-specific filters
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/zoho-inventory/inventory/v1/contacts')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFGet Contact
GET /zoho-inventory/inventory/v1/contacts/{contact_id}Create Contact
POST /zoho-inventory/inventory/v1/contacts
Content-Type: application/json
{
"contact_name": "Acme Corporation",
"contact_type": "customer",
"company_name": "Acme Corp",
"email": "billing@acme.com",
"phone": "+1-555-1234"
}Required Fields:
contact_name- Display name
Optional Fields:
contact_type-customerorvendorcompany_name- Legal entity nameemail- Email addressphone- Phone numberbilling_address- Address objectshipping_address- Address objectpayment_terms- Days for paymentcurrency_id- Currency identifierwebsite- Website URL
Update Contact
PUT /zoho-inventory/inventory/v1/contacts/{contact_id}Delete Contact
DELETE /zoho-inventory/inventory/v1/contacts/{contact_id}Contact Status Actions
# Mark as active
POST /zoho-inventory/inventory/v1/contacts/{contact_id}/active
# Mark as inactive
POST /zoho-inventory/inventory/v1/contacts/{contact_id}/inactiveList Sales Orders
GET /zoho-inventory/inventory/v1/salesordersExample:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/zoho-inventory/inventory/v1/salesorders')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFGet Sales Order
GET /zoho-inventory/inventory/v1/salesorders/{salesorder_id}Create Sales Order
POST /zoho-inventory/inventory/v1/salesorders
Content-Type: application/json
{
"customer_id": "1234567890000",
"date": "2026-02-06",
"line_items": [
{
"item_id": "1234567890001",
"quantity": 5,
"rate": 25.00
}
]
}Required Fields:
customer_id- Customer identifierline_items- Array of items withitem_id,quantity,rate
Optional Fields:
salesorder_number- Auto-generated if not specified (do not specify if auto-generation is enabled)date- Order date (yyyy-mm-dd)shipment_date- Expected shipment datereference_number- External referencenotes- Internal notesterms- Terms and conditionsdiscount- Discount percentage or amountshipping_charge- Shipping costadjustment- Price adjustment
Update Sales Order
PUT /zoho-inventory/inventory/v1/salesorders/{salesorder_id}Delete Sales Order
DELETE /zoho-inventory/inventory/v1/salesorders/{salesorder_id}Sales Order Status Actions
# Mark as confirmed
POST /zoho-inventory/inventory/v1/salesorders/{salesorder_id}/status/confirmed
# Mark as void
POST /zoho-inventory/inventory/v1/salesorders/{salesorder_id}/status/voidList Invoices
GET /zoho-inventory/inventory/v1/invoicesExample:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/zoho-inventory/inventory/v1/invoices')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFGet Invoice
GET /zoho-inventory/inventory/v1/invoices/{invoice_id}Create Invoice
POST /zoho-inventory/inventory/v1/invoices
Content-Type: application/json
{
"customer_id": "1234567890000",
"line_items": [
{
"item_id": "1234567890001",
"quantity": 5,
"rate": 25.00
}
]
}Required Fields:
customer_id- Customer identifierline_items- Array of items
Optional Fields:
invoice_number- Auto-generated if not specifieddate- Invoice date (yyyy-mm-dd)due_date- Payment due datepayment_terms- Days until duediscount- Discount percentage or amountshipping_charge- Shipping costnotes- Internal notesterms- Terms and conditions
Update Invoice
PUT /zoho-inventory/inventory/v1/invoices/{invoice_id}Delete Invoice
DELETE /zoho-inventory/inventory/v1/invoices/{invoice_id}Invoice Status Actions
# Mark as sent
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/status/sent
# Mark as draft
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/status/draft
# Void invoice
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/status/voidInvoice Email
# Email invoice to customer
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/email
# Get email content template
GET /zoho-inventory/inventory/v1/invoices/{invoice_id}/emailInvoice Payments
# List payments applied
GET /zoho-inventory/inventory/v1/invoices/{invoice_id}/payments
# Delete a payment
DELETE /zoho-inventory/inventory/v1/invoices/{invoice_id}/payments/{invoice_payment_id}Invoice Credits
# List credits applied
GET /zoho-inventory/inventory/v1/invoices/{invoice_id}/creditsapplied
# Apply credits
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/credits
# Delete applied credit
DELETE /zoho-inventory/inventory/v1/invoices/{invoice_id}/creditsapplied/{creditnotes_invoice_id}Invoice Comments
# List comments
GET /zoho-inventory/inventory/v1/invoices/{invoice_id}/comments
# Add comment
POST /zoho-inventory/inventory/v1/invoices/{invoice_id}/comments
# Update comment
PUT /zoho-inventory/inventory/v1/invoices/{invoice_id}/comments/{comment_id}
# Delete comment
DELETE /zoho-inventory/inventory/v1/invoices/{invoice_id}/comments/{comment_id}List Purchase Orders
GET /zoho-inventory/inventory/v1/purchaseordersExample:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/zoho-inventory/inventory/v1/purchaseorders')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFGet Purchase Order
GET /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}Create Purchase Order
POST /zoho-inventory/inventory/v1/purchaseorders
Content-Type: application/json
{
"vendor_id": "1234567890000",
"line_items": [
{
"item_id": "1234567890001",
"quantity": 100,
"rate": 10.00
}
]
}Required Fields:
vendor_id- Vendor identifierline_items- Array of items
Optional Fields:
purchaseorder_number- Auto-generated if not specified (do not specify if auto-generation is enabled)date- Order date (yyyy-mm-dd)delivery_date- Expected delivery datereference_number- External referenceship_via- Shipping methodnotes- Internal notesterms- Terms and conditions
Update Purchase Order
PUT /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}Delete Purchase Order
DELETE /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}Purchase Order Status Actions
# Mark as issued
POST /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}/status/issued
# Mark as cancelled
POST /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}/status/cancelledList Bills
GET /zoho-inventory/inventory/v1/billsExample:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/zoho-inventory/inventory/v1/bills')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFGet Bill
GET /zoho-inventory/inventory/v1/bills/{bill_id}Create Bill
POST /zoho-inventory/inventory/v1/bills
Content-Type: application/json
{
"vendor_id": "1234567890000",
"bill_number": "BILL-001",
"date": "2026-02-06",
"due_date": "2026-03-06",
"line_items": [
{
"item_id": "1234567890001",
"quantity": 100,
"rate": 10.00
}
]
}Required Fields:
vendor_id- Vendor identifierbill_number- Unique bill number (required, not auto-generated)date- Bill date (yyyy-mm-dd)due_date- Payment due dateline_items- Array of items
Optional Fields:
reference_number- External referencenotes- Internal notesterms- Terms and conditionscurrency_id- Currency identifierexchange_rate- Exchange rate for foreign currency
Update Bill
PUT /zoho-inventory/inventory/v1/bills/{bill_id}Delete Bill
DELETE /zoho-inventory/inventory/v1/bills/{bill_id}Bill Status Actions
# Mark as open
POST /zoho-inventory/inventory/v1/bills/{bill_id}/status/open
# Mark as void
POST /zoho-inventory/inventory/v1/bills/{bill_id}/status/voidCreate Shipment Order
POST /zoho-inventory/inventory/v1/shipmentorders
Content-Type: application/json
{
"shipment_number": "SHP-001",
"date": "2026-02-06",
"delivery_method": "FedEx",
"tracking_number": "1234567890"
}Required Fields:
shipment_number- Unique shipment numberdate- Shipment datedelivery_method- Carrier/delivery method
Optional Fields:
tracking_number- Carrier tracking numbershipping_charge- Shipping costnotes- Internal notesreference_number- External reference
Get Shipment Order
GET /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}Update Shipment Order
PUT /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}Delete Shipment Order
DELETE /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}Mark as Delivered
POST /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}/status/deliveredList Item Groups
GET /zoho-inventory/inventory/v1/itemgroupsGet Item Group
GET /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}Create Item Group
POST /zoho-inventory/inventory/v1/itemgroups
Content-Type: application/json
{
"group_name": "T-Shirts",
"unit": "pcs",
"items": [
{
"name": "T-Shirt - Small",
"rate": 20.00,
"purchase_rate": 8.00,
"sku": "TS-S"
},
{
"name": "T-Shirt - Medium",
"rate": 20.00,
"purchase_rate": 8.00,
"sku": "TS-M"
}
]
}Required Fields:
group_name- Group nameunit- Unit of measurement
Update Item Group
PUT /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}Delete Item Group
DELETE /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}Item Group Status Actions
# Mark as active
POST /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}/active
# Mark as inactive
POST /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}/inactive