When your agent hits a judgment wall, it hands off to an expert. The expert enters the workflow with full context, returns a typed answer, exits. MCP and REST. Developer preview.
A single typed unit of work handed from an agent to an expert. Every call creates one, reads one, or updates one. A deployment moves through a narrow state machine — pending → accepted → in_progress → completed — and never goes sideways.
Expert
The human.
A practitioner on the bench — brand, copy, legal, engineering, customer. Declared skills. Named tenure. Deployments route to whoever covers the skills you asked for. One deployment, one expert, never broadcast.
Output
The return.
The expert's typed answer. Markdown body, structured attachments, duration, charge. Delivered on-demand via poll, or on-push via HMAC-signed webhook. Idempotent on delivery.
How a handoff executes.
The Deploy API is a two-message protocol. Your agent sends a brief. An expert returns an answer. Between those two messages, four things happen inside the system. This is how they happen.
The brief.
Your agent creates a deployment by POSTing a brief, a skills array, and optional context — a URL, a file list, a metadata blob for correlation. The brief is prose. Two or three sentences is enough. Writing it like a DM to a teammate works better than writing it like a ticket.
What we do not take: deadlines, priority scores, or routing hints. The expert reads the brief and decides. Your agent doesn't schedule anyone; it describes the problem.
POST /v1/deployments · request body
{
"brief": "Review the Q2 launch hero for tonal drift against messaging-framework v3. Return one-line diagnosis + three rewrites.",
"skills": ["brand-strategy", "copy"],
"context_url": "https://notion.so/team/q2-hero-draft",
"urgency": "priority",
"metadata": { "agent": "wren", "campaign": "q2-launch" }
}
The route.
The system matches the deployment against the active roster. Match is skills ∩ available, weighted by median turnaround and recent brief-fit. The bench is twenty to forty experts; each deployment goes to exactly one. We do not broadcast. We do not auction.
If no match lands within the SLA band — 60 minutes for priority, 4 hours for standard — the deployment transitions to expired and your agent receives deployment.expired. Expired deployments release reserved credits in full.
The work.
The expert enters the workflow with full context — the brief, every attached file, and your workspace's brand memory (positioning, voice, prior outputs). They draft, synthesize, or decide. They may ask one clarifying question by transitioning the deployment to needs_input. Your agent answers via POST /v1/deployments/:id/reply within 24 hours, or the deployment expires.
We do not expose the expert's calendar, inbox, or direct line. The system is the only interface. This is deliberate.
The return.
The expert publishes. The deployment transitions to completed. Your agent receives deployment.completed via webhook, or polls GET /v1/deployments/:id and sees output populated. The output is typed: a markdown body, structured attachments as signed URLs, and settled billing on credits_charged. Terminal. No further transitions.
The edges.
Retries are idempotent — every POST accepts an Idempotency-Key, cached 24 hours, keyed on (workspace, route, key). Replaying with the same key returns the cached response; replaying with a different body returns 409 idempotency_conflict.
Webhooks are HMAC-SHA256 signed with a five-minute replay window. Verify with constant-time comparison — a one-liner in your handler. Delivery is retried on 5xx and timeout with exponential backoff: 30s, 2m, 8m, 30m, 2h, 8h, then dead-lettered. Replay is idempotent on HumanDeploy-Delivery.
Cancellation is supported in pending and accepted; once in_progress, deployments run to completion. That's also deliberate — experts don't do half-work.
What's shipping. What's preview.
SurfaceMaturityToday
POST /v1/deploymentsStable shapep95 < 400ms on create. Live with pilot partners.
GET /v1/deployments/:idStable shapePoll at most every 5 seconds. Cached 2s.
WebhooksPreviewSeven event types. Names finalizing before GA.
MCP serverPreviewFive tools exposed. Tool-shape may change before GA.
TypeScript SDKPreviewShipping with first three partners. Python after.
VersioningPolicy finalDate-pinned via HumanDeploy-Version. 12-month overlap on breaking changes.
Public access opens when v1 stabilizes. Three founding-partner slots are open. Partners get a direct line to the engineers writing the spec, first SDK packages for their stack, and lifted rate caps for the first six months.
Two transports.
MCPpaste, restart, done
The MCP server is a thin wrapper around REST. Paste the config into Claude Desktop, Cursor, or Windsurf. Restart the host. Your agent now sees five tools alongside its built-ins.
Create a deployment, poll or subscribe, receive the output. JSON in, JSON out. Works wherever fetch works. Open-source client libraries ship with the first partners.
Six stacks builders actually run on. All six speak the same primitive — deploy_specialist(brief, skills, …). Each wraps the transport in the idioms of its host. The tool is named deploy_specialist for historical reasons; expert is the term used everywhere else in the docs. Tool rename is planned as a coordinated migration.
Break URL paths between versions. The path is stable. The shape moves under the date header.
Serve the open public today. Access is gated to founding partners until v1 stabilizes.
Three slots are shaping v1.
The Deploy API is in developer preview. Three founding-partner slots are open. Partners get a direct line to the engineers writing the spec, first SDK packages for their stack, and lifted rate caps for the first six months. The rest of the world gets public access when the shape stops moving.