Agent → human · pre-launch
The API your agent calls when it needs a human.
Agents are good until the moment that matters. RouteToHuman turns “route this to a person” into one HTTP call — a notification, an alert, or a two-way approval — delivered over email or Slack, with the answer routed back to the agent.
Sign in, create an API key, and make the first call. Questions:hello@routetohuman.com.
curl --fail-with-body --request POST \
https://api.routetohuman.com/v1/requests \
--header "Authorization: Bearer $ROUTE_TO_HUMAN_API_KEY" \
--header "Idempotency-Key: $IDEMPOTENCY_KEY" \
--header "Content-Type: application/json" \
--data '{
"recipientId": "[email protected]",
"intent": "approveReject",
"prompt": "Deploy api v2.3.1 to production? Migrations: 2 additive. Rollback: automatic.",
"expiresInMinutes": 30
}'{
"id": "9c1f4b1e2d7a4c0e8b5a6f3d2e1c0b9a",
"status": "accepted",
"intent": "approveReject",
"recipientId": "[email protected]",
"prompt": "Deploy api v2.3.1 to production? Migrations: 2 additive. Rollback: automatic.",
"choices": ["approve", "reject"],
"createdAt": "2026-09-04T12:00:00Z",
"expiresAt": "2026-09-04T12:30:00Z",
"response": null,
"timeline": [
{ "event": "accepted", "at": "2026-09-04T12:00:00Z" }
]
}Accepted · request persisted
How it works
One call. A durable path to a person.
01
Call
Your agent — or the server it runs on — POSTs/v1/requests with an API key and an idempotency key, so a retry can never ask the same person twice.
02
Deliver
RouteToHuman queues the message durably and delivers it over email or Slack, with a link the person answers from. A retried call returns the original receipt instead of sending again.
03
Prove
Every accepted request returns a durable receipt you can read back any time, and the person’s answer lands on that same receipt. Receipts are isolated per organization.
The API
Small surface, exact contract.
Create a request, read it back, cancel it — plus plain transactional email — atapi.routetohuman.com. The full contract, limits and error codes included, is in theOpenAPI description.
Transactional messages only — the API is for routing moments to people, not newsletters.
curl --fail-with-body --request POST \
https://api.routetohuman.com/v1/requests \
--header "Authorization: Bearer $ROUTE_TO_HUMAN_API_KEY" \
--header "Idempotency-Key: $IDEMPOTENCY_KEY" \
--header "Content-Type: application/json" \
--data '{
"recipientId": "[email protected]",
"intent": "approveReject",
"prompt": "Deploy api v2.3.1 to production? Migrations: 2 additive. Rollback: automatic.",
"expiresInMinutes": 30
}'MCP-native
Your agent doesn’t need glue code.
The same capability is exposed as an MCP tool server over Streamable HTTP at mcp.routetohuman.com/mcp. Point an MCP-capable agent at it and “route to a human” becomes a tool the agent can call — same receipts as the HTTP API.
{
"mcpServers": {
"routetohuman": {
"type": "http",
"url": "https://mcp.routetohuman.com/mcp"
}
}
}