simpleerp
by @icystssi-lang
Provides procedures for calling the SimpleERP HTTP API. Runtime: shell with curl/curl.exe or PowerShell (Invoke-WebRequest/Invoke-RestMethod). Credentials: s...
clawhub install simpleerpπ About This Skill
name: simpleerp description: >- Provides procedures for calling the SimpleERP HTTP API. Runtime: shell with curl/curl.exe or PowerShell (Invoke-WebRequest/Invoke-RestMethod). Credentials: send x-api-key on requests except GET /api/health; obtain the key from the user or environment variable SIMPLEERP_API_KEY. Covers list/get/create/update/delete and reports across products, inventory, warehouses, orders, invoices, payments, returns, master data, and admin. Use when the user asks to call SimpleERP, the SimpleERP API, or simpleerp-api for HTTP operations. Do not use for unrelated work, scraping, bypassing security, long jobs not exposed by the API, or when localhost:3000 or a user-stated base URL cannot be reached.
SimpleERP API
Use HTTP against the SimpleERP backend. Read domain examples only from the linked reference files; this file stays a navigator and global rules.
Agent execution policy
curl commands or PowerShell Invoke-WebRequest / Invoke-RestMethod), run them automatically. Do not ask the user to run/execute anything.GET /api/health may run without an API key. All other HTTP calls need a resolved x-api-key per Credentials below; if no key is available after that resolution, ask once for the key before issuing authenticated requests (then continue running commands automatically).Environment
http://localhost:3000. Resource paths are under /api (example: http://localhost:3000/api/products). If the user names another host, use it instead of localhost.curl on Unix-like shells; on Windows, curl.exe or Invoke-WebRequest / Invoke-RestMethod in PowerShell.Credentials
x-api-key on every request except GET /api/health.SIMPLEERP_API_KEY; (3) if still missing, ask once for the key, then proceed.admin_access. Most resources map to explicit PERMISSION_ID checks; a few route modules use permissions. || {} in code, and where that map has no entry yet, requirePermission receives a falsy id and does not enforce a named permission (API key still required). See references/ENDPOINTS.md (Notes).Minimal GET example
curl "http://localhost:3000/api/health"
Invoke-WebRequest -Method GET -Uri "http://localhost:3000/api/health"
Template
curl "http://localhost:3000/api/?"
Domain reference map
| Need | Open |
|------|------|
| All paths, methods, auth notes | references/ENDPOINTS.md |
| Sys-par, currencies, warehouses, partners, customers, suppliers | references/master-data-endpoints.md |
| Products, price lists, related master data | references/products-and-pricing.md |
| Inventory, deliveries, transfers, adjustments | references/inventory-and-deliveries.md |
| Sale/purchase orders, invoices, payments | references/documents-sales-purchasing.md |
| Returns, credit memos, debit notes | references/returns-and-memos.md |
| Users, API keys, permissions | references/admin-and-permissions.md |
| Chained flows (customer β sale order, etc.) | references/workflows.md |
| Report route copy-paste curls | references/reports.md |
| List query allowlists (buildFilters), workspace paths | references/query-filters.md |
Dynamic list query filters
Most list endpoints build WHERE from a fixed allowlist of query parameters (bind variables; unknown params ignored). See references/query-filters.md for how buildFilters works and workspace-root-relative paths to simpleerp-api source files.
limit, offset on list endpoints; many support status or foreign-key ids./sys-par β codePrefix, limit, offset
- /currencies β status, limit, offset
- /tax β status, limit, offset
- /partners β status, limit, offset
- /products β status, sku, limit, offset
- /customers, /suppliers, /brands, /categories, /price-lists, /areas, /warehouses β status, limit, offset
- /credit-terms β status, limit, offset
- /uom β status, prodId, limit, offset
- /warehouse-zones β warehouseId, status, limit, offset
- /bank-accounts β status, currencyCode, warehouseId, limit, offset
- /exchange-rates β source, limit, offset
- /memberships β status, limit, offset
- /inventory β warehouseId, prodId, limit, offset
- /deliveries β orderId (SALE_ORDER only), warehouseId, status, limit, offset
- /sale-orders β status, customerId, limit, offset
- /purchase-orders β status, supplierId, limit, offset
- /cust-returns β status, customerId, saleOrderId, limit, offset
- /cust-credit-memos, /cust-debit-notes β status, customerId, limit, offset
- /supp-returns, /supp-credit-memos, /supp-debit-notes β status, supplierId, limit, offset
- /transfers β status, fromWhId, toWhId, limit, offset
- /inventory-adjustments β status, warehouseId, limit, offset
- /permissions β functionId, limit, offset
- /user-permissions β userId, permissionId, limit, offset
- /api-key-permissions β apiKeyId, permissionId, limit, offsetPrefer explicit filters and small limit values.
Report endpoints workflow
Use when the user needs a report and must pick accounts, products, warehouses, partners, customers, or suppliers.
1. Discover (optional) β GET /api/reports. Use includeData=true for quick aggregates. Example: GET /api/reports?includeData=true&topN=10
2. Resolve IDs β Helper lists: /api/reports/helpers/warehouses, .../customers, .../products, .../partners, .../suppliers, .../accounts (for GL). If the user gives names or SKU, search helpers first, then call the report.
3. CSV multi-select β productIds=1,2,3, warehouseIds=10,11, customerIds=5,9, supplierIds=7, accountIds=100,101. Dedupe IDs; use limit / offset where supported.
4. Call the report β Date window: fromDate=YYYY-MM-DD, toDate=YYYY-MM-DD. Full path table: references/ENDPOINTS.md (Reports). Copy-paste curls: references/reports.md.
GET /api/reports returns categories, accessibility metadata, and optional aggregate data; it normalizes singular/CSV filter aliases and may return warnings for bad filters or permissions.
Safety, pagination, and troubleshooting
limit (e.g. 20β50); narrow with status, customerId, supplierId, warehouseId, prodId, and other allowlisted query params from Dynamic list query filters where available.GET for reads; POST to create; PUT/PATCH to update; DELETE only when requested and safe. Prefer deactivating via status over deleting master data or financial documents.priceListId on customers, order dates). 409: duplicates or constraints (e.g. SKU, partner).