The Zulu API.
One documented REST API behind every module — for your team's integrations and your AI agent alike. Token auth, webhooks, and an OpenAPI spec you can ingest whole.
- Base URL
- https://dashboard.getzulu.io/api/v1
- Auth
- Authorization: Bearer zulu_{key}
- Rate limit
- 60 requests / min per key (configurable)
- Format
- JSON · OpenAPI 3 · webhooks
# Base: https://dashboard.getzulu.io/api/v1 # 1 · Create an account (public, no auth) — declare the modules to enable POST /account/signup { "fields": { "email": "you@co.nz", "name_first": "Sam", "company": "Co", "modules": ["opt_client"] } } → 201 { "data": { "api_key": "zulu_••••", "username": "co" } } # 2 · Activate with the 6-digit code emailed to the owner POST /account/verify { "fields": { "email": "you@co.nz", "code": "482913" } } → 200 { "data": { "activated": true } } # 3 · Authenticate and add your first client POST /client Authorization: Bearer zulu_•••• { "company": "Acme Pumps Ltd", "email": "ops@acmepumps.co.nz", "phone": "+64 9 555 0182" } → 201 { "data": { "token": "9f2a…", "company": "Acme Pumps Ltd" } }
Every resource, one map.
A high-level view of what the API does today — generated from the live spec, so it never drifts. Every endpoint needs your API key except signup, verify and status. Want the full request/response detail? It's all in the OpenAPI spec — and your key arrives the moment you sign up. Prefer tools over raw HTTP? The native MCP server (@getzulu/mcp) and CLI (@getzulu/cli) are on npm — read-only today.
Public
1- GET /API Status
Account
3- GET /account/modulesList valid module keys (public; richer with a system key)
- POST /account/signupSign up a new account (public)
- POST /account/verifyVerify and activate an account (public)
Clients
4- GET /clientList clients
- POST /clientCreate client
- GET /client/{token}Get single client
- PUT /client/{token}Update client
Files
1- POST /fileUpload file
Forms
4- GET /formList forms
- GET /form/{identifier}Get form detail
- GET /form_submissionList form submissions
- GET /form_submission/{token}Get submission detail
Inventory
2- GET /inventory/stock/{product}Get product stock with location breakdown
- POST /inventory/stock/adjustmentMake a stock adjustment
Invoices
7- GET /invoiceList invoices
- POST /invoiceCreate invoice
- GET /invoice/{token}Get invoice detail
- PUT /invoice/{token}Update invoice
- POST /invoice/{token}/lineAdd invoice line
- PUT /invoice/{token}/line/{line_id}Update invoice line
- DELETE /invoice/{token}/line/{line_id}Delete invoice line
Job Cards
4- GET /jobcardList job cards
- POST /jobcardCreate job card
- GET /jobcard/{token}Get job card detail
- PUT /jobcard/{token}Update job card
Notes
2- GET /note/{object}/{token}List notes for an entity
- POST /note/{object}/{token}Create a note
Opportunities
5- GET /opportunityList opportunities
- POST /opportunityCreate opportunity
- GET /opportunity/stageList pipeline stages
- GET /opportunity/{token}Get opportunity detail
- POST /opportunity/{token}/stageMove opportunity to another stage
Posts
4- GET /post/{type}List posts by type
- GET /post/{type}/{identifier}Get single post
- POST /postCreate new post
- PUT /post/{id}Update existing post
Products
16- GET /productList products
- POST /productCreate product
- GET /product/{token}Get single product
- PUT /product/{token}Update product
- PUT /product/{token}/priceUpdate product prices
- PUT /product/{token}/categoryManage product categories
- PUT /product/{token}/tagManage product tags
- GET /product/taxonomyGet product taxonomy
- POST /categoryCreate category
- GET /category/{token}Get single category
- PUT /category/{token}Update category
- PUT /product/{token}/category/{category_token}Add category to product
- DELETE /product/{token}/category/{category_token}Remove category from product
- PUT /product/{token}/tag/{tag_option_token}Add tag to product
- DELETE /product/{token}/tag/{tag_option_token}Remove tag from product
- POST /product/{token}/imageUpload product image(s)
Purchase Orders
7- GET /porderList purchase orders
- POST /porderCreate purchase order
- GET /porder/{token}Get purchase order detail
- PUT /porder/{token}Update purchase order
- POST /porder/{token}/lineAdd purchase order line
- PUT /porder/{token}/line/{line_id}Update purchase order line
- DELETE /porder/{token}/line/{line_id}Delete purchase order line
Suppliers
4- GET /supplierList suppliers
- POST /supplierCreate supplier
- GET /supplier/{token}Get single supplier
- PUT /supplier/{token}Update supplier
Tenant
1- GET /tenant_infoGet tenant information
One bearer token, scoped per user.
Send your key as a bearer token on every request. Keys are scoped per user and revocable — an AI agent receives one from /account/signup, or you can generate one in your Zulu account settings. Calls are limited to 60 per minute per key (configurable, higher allowances on request); requests over the limit return 429.
How an agent signs upAuthorization: Bearer zulu_5f3c… Content-Type: application/json
The same API, as native tools.
Two official npm packages wrap the API for you. @getzulu/mcp is a local MCP server exposing 24 tools to Claude Desktop, Claude Code and any MCP client — ask about your clients, invoices, stock or forms in plain language. @getzulu/cli puts the same tools in your terminal as getzulu commands that output raw API JSON. Both authenticate with your zulu_ token, run locally (your token never leaves your machine), and are read-only today — write actions go through the REST API.
View on npm# Connect Zulu to Claude Code — one line claude mcp add getzulu -e ZULU_API_TOKEN=zulu_… -- npx -y @getzulu/mcp # Claude Desktop → Settings → Developer → Edit Config { "mcpServers": { "getzulu": { "command": "npx", "args": ["-y", "@getzulu/mcp"], "env": { "ZULU_API_TOKEN": "zulu_…" } } } } # Then ask: "What Zulu account am I connected to?"
# Install + authenticate once npm install -g @getzulu/cli getzulu setup # prompts for your API token # Read the account from the shell — raw JSON out getzulu tenant info getzulu client list --limit 5 --search acme getzulu client list --limit 50 | jq '.data.clients[].company'
Build on the Zulu API.
API access is in every plan — no per-agent or per-call pricing. Start free, no credit card.