RouteToHuman

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.

Request — POST /v1/requests
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
  }'
Response — 202 Accepted, the request as stored
{
  "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.

  1. 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.

  2. 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.

  3. 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.

Create a request — bash
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.

Client config — mcp.json
{
  "mcpServers": {
    "routetohuman": {
      "type": "http",
      "url": "https://mcp.routetohuman.com/mcp"
    }
  }
}