Developer Hub · steadywrk.dev
Build on SteadyWrk.
API, MCP tools, and SDKs for the agentic dispatch control plane. The same three primitives — quote, order, evals — callable from a web app, a script, Claude Desktop, or any MCP client.
OpenAPI 3.1 spec. TypeScript + Python clients. Sub-2hr quote turnaround, 90% completion rate. Machine-readable evals are a first-class citizen at every integration layer.
- Quote turnaround
- <2hr target
- Completion rate
- 90%
- Dispatch latency p50
- 340ms
- Human override rate
- 3%
Three integration surfaces.
Same dispatch engine underneath. Pick the surface that fits your stack.
OpenAPI 3.1
Full OpenAPI 3.1 spec. Every route under /api/dispatch/* is documented, versioned, and testable from the spec playground. JSON over HTTPS, bearer token auth.
- —/api/dispatch/quote — NTE estimate + provider pool
- —/api/dispatch/work-orders — create + track work orders
- —/api/dispatch/contractors — contractor availability
- —/api/dispatch/analytics — rolling eval metrics
POST /api/dispatch/quote HTTP/1.1
Host: steadywrk.app
x-api-key: swrk_live_...
Content-Type: application/json
{
"trade": "hvac",
"locationZip": "80302",
"nteTarget": 850,
"urgencyTier": "standard"
}Model Context Protocol
Three dispatch primitives as native MCP tools. Drop the server config into Claude Desktop, Cursor, or any MCP client and your agent can quote, order, and read evals in one tool call.
- —dispatch.quote — NTE + provider pool size + ETA band
- —dispatch.order — create work order, get SW-{id} handle
- —dispatch.evals — rolling 30d operational metrics
// claude_desktop_config.json
{
"mcpServers": {
"steadywrk": {
"command": "npx",
"args": ["-y", "@steadywrk/mcp-dispatch"],
"env": { "STEADYWRK_KEY": "swrk_live_..." }
}
}
}TypeScript + Python
Generated from the OpenAPI spec. Typed request/response objects, auto-retry with exponential backoff, and first-class async/await ergonomics.
- —npm install @steadywrk/sdk
- —pip install steadywrk
- —TypeScript strict mode, full inference
- —Python 3.10+ async + sync clients
import { SteadyWrk } from '@steadywrk/sdk';
const sw = new SteadyWrk({ apiKey: process.env.STEADYWRK_KEY });
const quote = await sw.dispatch.quote({
trade: 'hvac',
locationZip: '80302',
nteTarget: 850,
});
console.log(quote.nte, quote.etaBand);MCP tool reference.
Each tool follows the MCP JSON-Schema spec. dispatch.evals is public read-only — no key required.
| Tool | Args | Returns | Auth |
|---|---|---|---|
| dispatch.quote | { trade, locationZip, nteTarget?, urgencyTier? } | NTE estimate · provider pool size · ETA band | x-api-key |
| dispatch.order | { quoteId, accountRef, dispatchAt? } | Order ID · SW-{id} contractor handle · dispatch status | x-api-key |
| dispatch.evals | { period?: "rolling_30d" } | Goal fulfillment · ops metrics · trust signals | Public |
Full dispatch flow.
Quote, confirm, dispatch — three round-trips. The SDK handles retries and expiry checks automatically.
import { SteadyWrk } from '@steadywrk/sdk';
const sw = new SteadyWrk({
apiKey: process.env.STEADYWRK_KEY,
});
// 1. Get a quote
const quote = await sw.dispatch.quote({
trade: 'plumbing',
locationZip: '85001',
nteTarget: 1200,
urgencyTier: 'standard',
});
// → { quoteId, nte, providerPoolSize, etaBand }
// 2. Create the work order
const order = await sw.dispatch.order({
quoteId: quote.quoteId,
accountRef: 'acc_xyz',
});
// → { orderId, contractorHandle: 'SW-0041', status }
// 3. Read live evals
const evals = await sw.dispatch.evals();
// → { completionRate, nteVariance, quoteP50, ... }# 1. Quote
curl -X POST https://steadywrk.app/api/dispatch/quote \
-H "x-api-key: swrk_live_..." \
-H "Content-Type: application/json" \
-d '{
"trade": "plumbing",
"locationZip": "85001",
"nteTarget": 1200
}'
# Response
{
"quoteId": "qt_01J...",
"nte": 1150,
"providerPoolSize": 7,
"etaBand": "2-4hr",
"expiresAt": "2026-04-17T18:00:00Z"
}
# 2. Order
curl -X POST https://steadywrk.app/api/dispatch/work-orders \
-H "x-api-key: swrk_live_..." \
-d '{"quoteId":"qt_01J...","accountRef":"acc_xyz"}'Authentication
API key, sent as a header.
All write operations require a live API key. dispatch.evals is public read-only. Keys are scoped per-account and revocable at any time.
Header format
x-api-key: swrk_live_<token>SDK (TypeScript)
new SteadyWrk({ apiKey: process.env.STEADYWRK_KEY })SDK (Python)
SteadyWrk(api_key=os.environ["STEADYWRK_KEY"])MCP server (env)
"env": { "STEADYWRK_KEY": "swrk_live_..." }- —Keys are prefixed
swrk_live_in production,swrk_test_in sandbox. - —Rate limit: 100 req/min per key. Burst to 200 for 10s.
- —dispatch.evals accepts no key — public endpoint, no rate limit.
- —All decisions are logged. 7-year append-only audit trail queryable via API.
Get API access.
API keys are issued manually — talk to us and we’ll get you a live key and sandbox access within the day.