Agent skill

Zoho Inventory

by CraftOS-dev in CraftOS-dev/CraftBot

Zoho Inventory API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot.

MITAuto-check passedBackend & APIs

Install Zoho Inventory

skills CLI
$ npx skills add CraftOS-dev/CraftBot --skill zoho-inventory -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install CraftOS-dev/CraftBot zoho-inventory --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/CraftOS-dev/CraftBot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/zoho-inventory .claude/skills/zoho-inventory && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
zoho-inventory
GitHub stars
392
Used in
1 other repo
Token cost
~5.9k tokens
SKILL.md length
980 words
Files
4
Skills in repo
89
Repo updated
First seen
Licence
MIT

At a glance

Zoho Inventory API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot.

  • Works in 3 steps: Sign in or create an account at maton.ai → Go to maton.ai/settings → Copy your API key
  • Users want to read
  • SKILL.md covers Quick Start, Base URL, Authentication and Connection Management, plus 5 more sections
  • Calls python and curl; reaches gateway.maton.ai and ctrl.maton.ai; needs MATON_API_KEY

What it does

Zoho Inventory is an agent skill from CraftOS-dev/CraftBot. Zoho Inventory API integration with managed OAuth. Manage items, sales orders, invoices, purchase orders, bills, contacts, and shipments. Use this skill when users want to read, create, update, or delete inventory items, sales orders, invoices, purchase orders, bills, or other inventory records in Zoho Inventory. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key.

Its SKILL.md is about 5.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files (for example `.clawhub/origin.json` and `_meta.json`).

It sits in Backend & APIs, covering Forms and invoices, Microservices and OAuth and OpenID Connect. It works with Zoho. The repository describes itself as: One agent. Every kind of work. The licence is MIT.

When your agent uses it

  • Users want to read
  • Delete inventory items
  • Purchase orders
  • Other inventory records in Zoho Inventory

Example prompts

  • “/zoho-inventory”

Requirements

  • Python 3
  • A credential in MATON_API_KEY
  • A credential in YOUR_API_KEY

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key

What it can do on your machine

Read from SKILL.md and the folder at commit b50970c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • gateway.maton.ai
    • ctrl.maton.ai
    • connect.maton.ai

    Also links to:

    • zoho.com
    • maton.ai
    • discord.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • MATON_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Zoho Inventory loads about 5.9k tokens when it runs. Until then it costs about 119 tokens; SKILL.md has 980 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~119
When it runs · the whole SKILL.md, loaded when a task matches
~5.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from CraftOS-dev/CraftBot at commit b50970c, republished under its MIT licence (© CraftOS-dev). 980 words, ~5,872 tokens.

Download SKILL.mdSave it as .claude/skills/zoho-inventory/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
zoho-inventory
description
Zoho Inventory API integration with managed OAuth. Manage items, sales orders, invoices, purchase orders, bills, contacts, and shipments. Use this skill when users want to read, create, update, or delete inventory items, sales orders, invoices, purchase orders, bills, or other inventory records in Zoho Inventory. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key.
metadata.author
maton
metadata.version
1.0

Zoho Inventory

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.

Quick Start

bash
# List items
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.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))
EOF

Base URL

https://gateway.maton.ai/zoho-inventory/inventory/v1/{endpoint}

The gateway proxies requests to www.zohoapis.com/inventory/v1 and automatically injects your OAuth token.

Authentication

All requests require the Maton API key in the Authorization header:

Authorization: Bearer $MATON_API_KEY

Environment Variable: Set your API key as MATON_API_KEY:

bash
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key

Connection Management

Manage your Zoho Inventory OAuth connections at https://ctrl.maton.ai.

List Connections
bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=zoho-inventory&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Connection
bash
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'zoho-inventory'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', 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))
EOF
Get Connection
bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Response:

json
{
  "connection": {
    "connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
    "status": "ACTIVE",
    "creation_time": "2025-12-08T07:20:53.488460Z",
    "last_updated_time": "2026-01-31T20:03:32.593153Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "zoho-inventory",
    "metadata": {}
  }
}

Open the returned url in a browser to complete OAuth authorization.

Delete Connection
bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Specifying Connection

If you have multiple Zoho Inventory connections, specify which one to use with the Maton-Connection header:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-inventory/inventory/v1/items')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

If omitted, the gateway uses the default (oldest) active connection.

API Reference

Available Modules
ModuleEndpointDescription
Items/itemsProducts and services
Item Groups/itemgroupsGrouped product variants
Contacts/contactsCustomers and vendors
Sales Orders/salesordersSales orders
Invoices/invoicesSales invoices
Purchase Orders/purchaseordersPurchase orders
Bills/billsVendor bills
Shipment Orders/shipmentordersShipment tracking
Items
List Items
bash
GET /zoho-inventory/inventory/v1/items

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.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))
EOF

Response:

json
{
  "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
bash
GET /zoho-inventory/inventory/v1/items/{item_id}
Create Item
bash
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 price
  • purchase_rate - Purchase cost
  • sku - Stock keeping unit (unique)
  • item_type - inventory, sales, purchases, or sales_and_purchases
  • product_type - goods or service
  • unit - Unit of measurement
  • is_taxable - Tax applicability
  • tax_id - Tax identifier
  • description - Item description
  • reorder_level - Reorder point
  • vendor_id - Preferred vendor

Example:

bash
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://gateway.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))
EOF

Response:

json
{
  "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
bash
PUT /zoho-inventory/inventory/v1/items/{item_id}
Content-Type: application/json

{
  "name": "Updated Widget",
  "rate": 30.00
}
Delete Item
bash
DELETE /zoho-inventory/inventory/v1/items/{item_id}
Item Status Actions
bash
# Mark as active
POST /zoho-inventory/inventory/v1/items/{item_id}/active

# Mark as inactive
POST /zoho-inventory/inventory/v1/items/{item_id}/inactive
Contacts
List Contacts
bash
GET /zoho-inventory/inventory/v1/contacts

Query Parameters:

  • filter_by - Status.All, Status.Active, Status.Inactive, Status.Duplicate, Status.Crm
  • search_text - Search across contact fields
  • sort_column - contact_name, first_name, last_name, email, created_time, last_modified_time
  • contact_name, company_name, email, phone - Field-specific filters

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.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))
EOF
Get Contact
bash
GET /zoho-inventory/inventory/v1/contacts/{contact_id}
Create Contact
bash
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 - customer or vendor
  • company_name - Legal entity name
  • email - Email address
  • phone - Phone number
  • billing_address - Address object
  • shipping_address - Address object
  • payment_terms - Days for payment
  • currency_id - Currency identifier
  • website - Website URL
Update Contact
bash
PUT /zoho-inventory/inventory/v1/contacts/{contact_id}
Delete Contact
bash
DELETE /zoho-inventory/inventory/v1/contacts/{contact_id}
Contact Status Actions
bash
# Mark as active
POST /zoho-inventory/inventory/v1/contacts/{contact_id}/active

# Mark as inactive
POST /zoho-inventory/inventory/v1/contacts/{contact_id}/inactive
Sales Orders
List Sales Orders
bash
GET /zoho-inventory/inventory/v1/salesorders

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.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))
EOF
Get Sales Order
bash
GET /zoho-inventory/inventory/v1/salesorders/{salesorder_id}
Create Sales Order
bash
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 identifier
  • line_items - Array of items with item_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 date
  • reference_number - External reference
  • notes - Internal notes
  • terms - Terms and conditions
  • discount - Discount percentage or amount
  • shipping_charge - Shipping cost
  • adjustment - Price adjustment
Update Sales Order
bash
PUT /zoho-inventory/inventory/v1/salesorders/{salesorder_id}
Delete Sales Order
bash
DELETE /zoho-inventory/inventory/v1/salesorders/{salesorder_id}
Sales Order Status Actions
bash
# 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/void
Invoices
List Invoices
bash
GET /zoho-inventory/inventory/v1/invoices

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.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))
EOF
Get Invoice
bash
GET /zoho-inventory/inventory/v1/invoices/{invoice_id}
Create Invoice
bash
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 identifier
  • line_items - Array of items

Optional Fields:

  • invoice_number - Auto-generated if not specified
  • date - Invoice date (yyyy-mm-dd)
  • due_date - Payment due date
  • payment_terms - Days until due
  • discount - Discount percentage or amount
  • shipping_charge - Shipping cost
  • notes - Internal notes
  • terms - Terms and conditions
Update Invoice
bash
PUT /zoho-inventory/inventory/v1/invoices/{invoice_id}
Delete Invoice
bash
DELETE /zoho-inventory/inventory/v1/invoices/{invoice_id}
Invoice Status Actions
bash
# 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/void
Invoice Email
bash
# 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}/email
Invoice Payments
bash
# 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
bash
# 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
bash
# 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}
Purchase Orders
List Purchase Orders
bash
GET /zoho-inventory/inventory/v1/purchaseorders

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.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))
EOF
Get Purchase Order
bash
GET /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}
Create Purchase Order
bash
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 identifier
  • line_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 date
  • reference_number - External reference
  • ship_via - Shipping method
  • notes - Internal notes
  • terms - Terms and conditions
Update Purchase Order
bash
PUT /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}
Delete Purchase Order
bash
DELETE /zoho-inventory/inventory/v1/purchaseorders/{purchaseorder_id}
Purchase Order Status Actions
bash
# 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/cancelled
Bills
List Bills
bash
GET /zoho-inventory/inventory/v1/bills

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.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))
EOF
Get Bill
bash
GET /zoho-inventory/inventory/v1/bills/{bill_id}
Create Bill
bash
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 identifier
  • bill_number - Unique bill number (required, not auto-generated)
  • date - Bill date (yyyy-mm-dd)
  • due_date - Payment due date
  • line_items - Array of items

Optional Fields:

  • reference_number - External reference
  • notes - Internal notes
  • terms - Terms and conditions
  • currency_id - Currency identifier
  • exchange_rate - Exchange rate for foreign currency
Show full SKILL.md (383 more words)Show less
Update Bill
bash
PUT /zoho-inventory/inventory/v1/bills/{bill_id}
Delete Bill
bash
DELETE /zoho-inventory/inventory/v1/bills/{bill_id}
Bill Status Actions
bash
# 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/void
Shipment Orders
Create Shipment Order
bash
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 number
  • date - Shipment date
  • delivery_method - Carrier/delivery method

Optional Fields:

  • tracking_number - Carrier tracking number
  • shipping_charge - Shipping cost
  • notes - Internal notes
  • reference_number - External reference
Get Shipment Order
bash
GET /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}
Update Shipment Order
bash
PUT /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}
Delete Shipment Order
bash
DELETE /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}
Mark as Delivered
bash
POST /zoho-inventory/inventory/v1/shipmentorders/{shipmentorder_id}/status/delivered
Item Groups
List Item Groups
bash
GET /zoho-inventory/inventory/v1/itemgroups
Get Item Group
bash
GET /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}
Create Item Group
bash
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 name
  • unit - Unit of measurement
Update Item Group
bash
PUT /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}
Delete Item Group
bash
DELETE /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}
Item Group Status Actions
bash
# Mark as active
POST /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}/active

# Mark as inactive
POST /zoho-inventory/inventory/v1/itemgroups/{itemgroup_id}/inactive

Pagination

Zoho Inventory uses page-based pagination:

bash
GET /zoho-inventory/inventory/v1/items?page=1&per_page=50

Response includes pagination info in page_context:

json
{
  "code": 0,
  "message": "success",
  "items": [...],
  "page_context": {
    "page": 1,
    "per_page": 50,
    "has_more_page": true,
    "sort_column": "name",
    "sort_order": "A"
  }
}

Continue fetching while has_more_page is true, incrementing page each time.

Code Examples

JavaScript
javascript
const response = await fetch(
  'https://gateway.maton.ai/zoho-inventory/inventory/v1/items',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    }
  }
);
const data = await response.json();
Python
python
import os
import requests

response = requests.get(
    "https://gateway.maton.ai/zoho-inventory/inventory/v1/items",
    headers={"Authorization": f"Bearer {os.environ['MATON_API_KEY']}"},
)
data = response.json()

Notes

  • All successful responses have code: 0 and a message field
  • Dates should be in yyyy-mm-dd format
  • Contact types are customer or vendor
  • Item types: inventory, sales, purchases, sales_and_purchases
  • Product types: goods or service
  • The organization_id parameter is automatically handled by the gateway - you do not need to specify it
  • Sales order and purchase order numbers are auto-generated by default - do not specify salesorder_number or purchaseorder_number unless auto-generation is disabled in settings
  • Status action endpoints use POST method (e.g., /status/confirmed, /status/void)
  • Rate limits: 100 requests/minute per organization
  • Daily limits vary by plan: Free (1,000), Standard (2,500), Professional (5,000), Premium (7,500), Enterprise (10,000)
  • IMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing
  • IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments

Error Handling

StatusMeaning
400Missing Zoho Inventory connection or invalid request
401Invalid or missing Maton API key, or OAuth scope mismatch
404Resource not found
429Rate limited
4xx/5xxPassthrough error from Zoho Inventory API
Common Error Codes
CodeDescription
0Success
1Invalid value
2Mandatory field missing
3Resource does not exist
5Invalid URL
Troubleshooting: API Key Issues
  1. Check that the MATON_API_KEY environment variable is set:
bash
echo $MATON_API_KEY
  1. Verify the API key is valid by listing connections:
bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Troubleshooting: Invalid App Name
  1. Ensure your URL path starts with zoho-inventory. For example:
  • Correct: https://gateway.maton.ai/zoho-inventory/inventory/v1/items
  • Incorrect: https://gateway.maton.ai/inventory/v1/items

Resources

© CraftOS-dev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files in skills/zoho-inventory of CraftOS-dev/CraftBot.

  • SKILL.md
  • .clawhub/origin.json
  • LICENSE.txt
  • _meta.json

Open the folder on GitHubat commit b50970c

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in CraftOS-dev/CraftBot, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Zoho Inventory next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Zoho Inventory compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Zoho Inventory this skillCraftOS-dev/CraftBot3921 repos~5.9kAutomated safety check: PassMIT
Zoho BookingsLeoYeAI/openclaw-master-skills2.2k—~4.8kAutomated safety check: PassMIT
SquareupLeoYeAI/openclaw-master-skills2.2k—~5.2kAutomated safety check: PassMIT
Active CampaignLeoYeAI/openclaw-master-skills2.2k—~4.1kAutomated safety check: PassMIT
Acuity SchedulingLeoYeAI/openclaw-master-skills2.2k—~4.1kAutomated safety check: PassMIT
BrevoLeoYeAI/openclaw-master-skills2.2k—~4.8kAutomated safety check: PassMIT

Similar skills

  • Zoho Bookings

    LeoYeAI/openclaw-master-skills

    Zoho Bookings API integration with managed OAuth. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub stars~4.8k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Squareup

    LeoYeAI/openclaw-master-skills

    Square API integration with managed OAuth. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub stars~5.2k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Active Campaign

    LeoYeAI/openclaw-master-skills

    ActiveCampaign API integration with managed OAuth. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub stars~4.1k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Acuity Scheduling

    LeoYeAI/openclaw-master-skills

    Acuity Scheduling API integration with managed OAuth. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub stars~4.1k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Brevo

    LeoYeAI/openclaw-master-skills

    Brevo API integration with managed OAuth. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub stars~4.8k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Clickfunnels

    LeoYeAI/openclaw-master-skills

    ClickFunnels API integration with managed OAuth. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub stars~4.2k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed

More from CraftOS-dev/CraftBot

All 89 skills in this repo
  • Self Improvement

    CraftOS-dev/CraftBot

    Captures learnings, errors, and corrections to enable continuous improvement.

    392 GitHub starsUsed in 5 repos~4.9k tokens
    Auto-check passed
  • Bbc News

    CraftOS-dev/CraftBot

    Fetch and display BBC News stories from various sections and regions via RSS feeds.

    392 GitHub starsUsed in 2 repos~555 tokens
    Auto-check passed
  • Outlook

    CraftOS-dev/CraftBot

    Read, search, and manage Outlook emails and calendar via Microsoft Graph API.

    392 GitHub starsUsed in 2 repos~1.8k tokens
    Auto-check passed
  • Nano Banana Pro

    CraftOS-dev/CraftBot

    Generate/edit images with Nano Banana Pro (Gemini 3 Pro Image).

    392 GitHub starsUsed in 6 repos~1.4k tokens
    Auto-check passed
  • Airweave

    CraftOS-dev/CraftBot

    Context retrieval layer for AI agents across users' applications.

    392 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Telegram Bot Manager

    CraftOS-dev/CraftBot

    Manage and configure Telegram bots for OpenClaw. An agent skill from CraftOS-dev/CraftBot.

    392 GitHub stars~836 tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Zoho Inventory

What does Zoho Inventory do?

Zoho Inventory API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot. Zoho Inventory is an agent skill from CraftOS-dev/CraftBot. Zoho Inventory API integration with managed OAuth.

When should I use Zoho Inventory?

Zoho Inventory fits situations like: users want to read; delete inventory items; purchase orders; other inventory records in Zoho Inventory.

How do I install Zoho Inventory in Claude Code?

Run `npx skills add CraftOS-dev/CraftBot --skill zoho-inventory -a claude-code`. Or copy the skill folder (skills/zoho-inventory in CraftOS-dev/CraftBot) into .claude/skills/zoho-inventory in your project. Claude Code loads it when a task matches its description.

How do I install Zoho Inventory in Codex?

Run `npx skills add CraftOS-dev/CraftBot --skill zoho-inventory -a codex`. Or copy the skill folder (skills/zoho-inventory in CraftOS-dev/CraftBot) into .agents/skills/zoho-inventory in your project. Codex loads it when a task matches its description.

Can I use Zoho Inventory in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add CraftOS-dev/CraftBot --skill zoho-inventory -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/zoho-inventory, .gemini/skills/zoho-inventory, .github/skills/zoho-inventory and .opencode/skills/zoho-inventory in your project.

What does Zoho Inventory need to run?

Going by SKILL.md and its folder, Zoho Inventory needs the command-line tools its instructions call (python and curl) and credentials named MATON_API_KEY. Our summary lists: Python 3; A credential in MATON_API_KEY; A credential in YOUR_API_KEY.

Does Zoho Inventory access the network?

SKILL.md names 6 domains. In commands or code: gateway.maton.ai, ctrl.maton.ai and connect.maton.ai; the agent is likely to contact these when it follows the instructions. As links in the text: zoho.com, maton.ai and discord.com. This is read from the text; nothing was executed.

Is Zoho Inventory safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Zoho Inventory use?

Zoho Inventory is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Zoho Inventory use?

About 5.9k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Zoho Inventory?

Skills that share tags, products or a category with Zoho Inventory: Zoho Bookings (LeoYeAI/openclaw-master-skills, 2.2k stars), Squareup (LeoYeAI/openclaw-master-skills, 2.2k stars), Active Campaign (LeoYeAI/openclaw-master-skills, 2.2k stars) and Acuity Scheduling (LeoYeAI/openclaw-master-skills, 2.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Zoho Inventory?

CraftOS-dev (a GitHub user) maintains it in CraftOS-dev/CraftBot, which has 392 GitHub stars. The repository holds 89 skills in this directory. The repository was last updated on October 7, 2026.

Source: CraftOS-dev/CraftBot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.