Docs · Free available now
Your first notification, on Free.
About 15 minutes, an email address you can read, and a terminal. Free includes 10 notifications a day to yourself and one registered agent. No credit card. Nothing in this guide needs a paid plan.
Notifications tell you something; they do not ask for an answer. Acknowledgements and approvals are planned for Solo and Team, which are waitlisted, not available yet.
1. Create your account and key
- Sign in to the app with the address where you want notifications. The first sign-in creates your Free account, not an API key. The Plan page shows your allowance and today’s usage.
- Open Agents, register one, and name it after the sender: for example, nightly-build.
- Issue a key for that agent with messages.write and messages.read. Sending needs write; status and the doctor’s authenticated check need read. The key is shown once. Store it securely.
Keys default to 90 days and can last at most 365 days. Note the expiry and rotate before it lapses. A successful doctor check does not prove write permission, spare quota, or future validity.
Keep sign-in and key issuance under your control. Never put a real key in browser JavaScript, a repository, a screenshot, or a support message. The commands below use placeholders; load the actual RTH_API_KEY through your secret manager or a secure local prompt to avoid saving it in shell history.
2. Install and send from the command line
The CLI is a native binary, with no .NET runtime to install. Inspect the installer before running it if your environment requires that. It verifies the download checksum and runs rth doctor. Before a key is configured, a missing-credential result is expected.
curl -fsSL https://get.routetohuman.com/install.sh | sh
irm https://get.routetohuman.com/install.ps1 | iex
Follow the installer’s PATH instructions, then check rth --help. Linux needs glibc and CA certificates; the distributed Linux binary does not run on Alpine (musl). See available downloads and checksums.
export RTH_API_KEY="PASTE_YOUR_KEY_HERE"
rth doctor
rth inform "Nightly build finished"
$env:RTH_API_KEY = "PASTE_YOUR_KEY_HERE"
rth doctor
rth inform "Nightly build finished"
Replace YOUR_MESSAGE_ID with the id printed by inform, then run:
rth status YOUR_MESSAGE_ID
With no recipient, the message goes to you. Each new inform invocation sends a new message and uses one of your ten daily messages.
Accepted means stored for processing, not delivered. Check rth status and the app’s Messages page. Delivered means a provider accepted the notification, not that it was read. If you enabled push, look there too: push can precede email. Free email comes from robot@free.routetohuman.com; check spam if needed.
Or use HTTP directly
In a macOS or Linux shell, set RTH_API_KEY as above and choose an identifier for this one message:
export IDEMPOTENCY_KEY="my-first-notification-1"
Use a new identifier for each new message. Reuse the same identifier and unchanged payload only to retry that message, for example after a lost response. The example sends directly to your own email: skipPush bypasses push for this message.
curl --fail-with-body --request POST \
https://api.routetohuman.com/v1/messages \
--header "Authorization: Bearer ${RTH_API_KEY:?Set RTH_API_KEY}" \
--header "Idempotency-Key: ${IDEMPOTENCY_KEY:?Set IDEMPOTENCY_KEY}" \
--header "Content-Type: application/json" \
--data '{
"recipient": "me",
"channel": "email",
"intent": "notify",
"prompt": "Nightly build finished.",
"skipPush": true
}'
A successful call returns HTTP 202 and an id. Set MESSAGE_ID to that value and read the receipt; me is resolved to your real account address in the response.
curl --fail-with-body \
"https://api.routetohuman.com/v1/messages/$MESSAGE_ID" \
--header "Authorization: Bearer $RTH_API_KEY"
Readbacks do not spend your daily message allowance, but API rate limits still apply. Poll sparingly, not in a tight loop. For schemas and endpoints, use the OpenAPI description.
Receive your own Slack DM
Open Delivery → Slack. Connect a Slack workspace if the RouteToHuman bot is not installed there; your workspace may require an administrator to approve the installation. If the bot is already installed, use Sign in with Slack to link your own identity. Confirm your DM appears under Your addresses. Free cannot send to channels or other people.
rth inform --channel slack "Nightly build finished"
If the app says connecting is unavailable, or an administrator has not approved it, use email while resolving that prerequisite. Do not paste Slack credentials into a message prompt.
Connect an MCP-capable agent
MCP connections require an approved client registration; adding the URL alone does not enable every host. Contact hello@routetohuman.com for connector access. Our recorded validation covers Claude.ai and Claude Desktop (August 6, 2026); VS Code/Copilot and Cursor are not yet validated.
In Claude, use Settings → Connectors → Add custom connector. Enter the endpoint below and the approved client credentials in its Advanced settings. Those connector credentials are not your HTTP API key. Keep them in the host’s credential settings, not in a prompt.
Add https://mcp.routetohuman.com/mcp as the Streamable HTTP server and complete the host’s OAuth sign-in flow. Then ask the agent to check list_audience and get_plan_usage before using inform_human to notify you.
The agent discovery guide explains authenticated tools and browser-tool discovery. MCP, CLI, and HTTP share the same account allowance; connecting another client does not add another ten messages.
When something does not work
- Missing credential or 401
- Check that RTH_API_KEY is set in this shell and that the key is not expired or revoked. Run rth doctor after replacing it.
- 403: scope, audience, or message type
- Read the problem’s code. Issue the required messages.read and messages.write scopes; use yourself as recipient and notify as intent. plan_intent_unavailable is not fixed by retrying or joining a waitlist.
- 429: allowance or rate limit
- quota_exceeded means the daily allowance is spent; use its resets_at time (midnight UTC). rate_limit_exceeded is the separate API safety limit: messages allow 60 requests/minute, including reads; transactional email allows 30/minute. Respect Retry-After.
- Accepted, but nothing arrived
- Read the message receipt and timeline, check push and spam, and confirm the recipient is your sign-in address. Do not repeatedly run inform: each invocation creates a new message.
Still stuck? Email hello@routetohuman.com with the message id, time, error code, and trace id if present. Never send your API key or a private response link. Read the privacy policy before sending sensitive content: message history is not a deletion guarantee.