Kaseya Quote Manager API Patterns — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Kaseya Quote Manager API Patterns (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The Kaseya Quote Manager MCP server exposes quoting, sales-order, procurement, catalog, CRM, and org data from Kaseya Quote Manager (formerly Datto Commerce). The entire tool surface is READ-ONLY — every tool is a _list or _get; there are no write tools.
Tool names follow kqm_<entity>_list and kqm_<entity>_get across five domains:
quote, quote_section, quote_line, sales_order, sales_order_line, sales_order_paymentpurchase_order, purchase_order_line, purchase_order_cost, supplier, product_supplierproduct, product_image (list only), category, brandcustomer, customer_address, contactemployee, warehouseKaseya Quote Manager uses a single API key. Against the upstream API the key is sent in the apiKey HTTP header:
| Header | Value |
|---|---|
apiKey | The raw Quote Manager API key |
Generate the key in Quote Manager under Settings → API.
When used through the WYRE MCP gateway, the gateway maps the environment variable X_KQM_APIKEY onto an X-Kqm-Api-Key header, and the MCP server translates that into the upstream apiKey header automatically. You do not need to construct headers by hand — set the credential and the server handles upstream auth translation.
export X_KQM_APIKEY="your-quote-manager-api-key"https://api.kaseyaquotemanager.com/v1/List endpoints use page-based pagination:
| Parameter | Type | Default | Max | Description |
|---|---|---|---|---|
| page | number | 1 | - | 1-based page number |
| pageSize | number | - | 100 | Results per page |
| modifiedAfter | datetime | - | - | Only return records changed after this timestamp |
Use modifiedAfter for incremental syncs rather than re-walking the full collection. Always check whether more pages exist (a full page of pageSize results usually means there is another page) before claiming a result set is complete.
pageSize (100) to minimize calls;use modifiedAfter for incremental pulls.
429, wait and retry with exponential backoff.| Status Code | Meaning | Resolution |
|---|---|---|
| 400 | Bad Request | Check query parameters |
| 401 | Unauthorized | Verify the API key is correct |
| 403 | Forbidden | Check API key permissions |
| 404 | Not Found | Resource doesn't exist |
| 429 | Rate Limited | Wait and retry with backoff |
| 500 | Server Error | Retry after a delay |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.