Documentation
The machine-readable inbox. Any person, AI agent, or automation can discover your endpoints and send structured messages. No API key required.
Getting started
Create your programmable inbox
Sign up to get your own namespace, endpoints, and API token.
Create your inboxAlready have an account?
Log in to access your dashboard, or use your API token with Authorization: Bearer <token>.
Base URL
https://hmuapi.com/api Also accessible via https://hitmyapi.com
Multi-tenant URL structure
Every user on HMU API gets their own namespaced routes under /api/u/<username>.
GET /api/u/<username> Public profile: name, bio, avatar, links GET /api/u/<username>/endpoints Available endpoints for this user GET /api/u/<username>/status Availability, response time, open/closed status POST /api/u/<username>/<endpoint> Submit to any of this user's endpoints (pitch, ask, meet, etc.) POST /api/u/<username>/score Live pitch scoring: Counter-API, returns score + feedback GET /api/status/<token> Track message delivery status by token Identity endpoints
Public profile data is available without authentication.
GET /api/u/<username> Returns the user's public profile as JSON.
{ "username": "janedoe", "name": "Jane Doe", "bio": "Founder & investor", "endpoints": ["pitch", "ask", "meet"], "status": "open" }
Counter-API: pitch scoring
The scoring endpoint evaluates a message payload in real time and returns a numeric score with structured feedback. No submission is created: this is a dry-run evaluation only.
POST /api/u/<username>/score Send a JSON body with endpoint_slug, payload, and session_id. Returns a score from 0 to 100 and per-dimension feedback.
{ "score": 82, "label": "Strong", "dimensions": { "clarity": 90, "relevance": 75, "urgency": 80 }, "feedback": "Strong one-liner. Add deal size to improve relevance." }
GET /api/status/<token> Track the delivery status of a previously submitted message using the message_id returned at submission time.
{ "message_id": "uuid-here", "status": "delivered", "read": false, "submitted_at": "2026-03-12T10:00:00Z" }
Auth model
Inbound submission endpoints
No API key required. Anyone can submit to a user's endpoints, just send valid JSON.
Web dashboard
Log in at /login to get a cookie session. HttpOnly, Secure, 7-day expiry.
Programmatic access
Use your API token for scripts and integrations. Pass as Authorization: Bearer <token>. Token issued on email verification.
Public profile & scoring endpoints
Profile, status, endpoints list, and Counter-API scoring are unauthenticated GET endpoints.
Sender email verification
First-time senders verify their email before messages are delivered. Verified and trusted senders skip this step.
Legacy aliases
The original short-form routes still work and are permanently routed to jamestannahill. Existing integrations do not need to update.
POST /api/pitch /api/u/jamestannahill/pitch POST /api/ask /api/u/jamestannahill/ask POST /api/meet /api/u/jamestannahill/meet POST /api/hire /api/u/jamestannahill/hire POST /api/intro /api/u/jamestannahill/intro POST /api/collab /api/u/jamestannahill/collab POST /api/advise /api/u/jamestannahill/advise POST /api/press /api/u/jamestannahill/press GET /api/status /api/u/jamestannahill/status Quick start
cURL
curl -X POST https://hmuapi.com/api/u/jamestannahill/ask \ -H "Content-Type: application/json" \ -d '{"name":"Jane","email":"[email protected]","question":"What are you building?"}'
JavaScript / Node.js
const res = await fetch("https://hmuapi.com/api/u/jamestannahill/ask", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name: "Jane", email: "[email protected]", question: "What are you building?" }) }); const data = await res.json();
Python
import requests res = requests.post("https://hmuapi.com/api/u/jamestannahill/ask", json={ "name": "Jane", "email": "[email protected]", "question": "What are you building?" }) print(res.json())
Response format
{ "success": true, "message_id": "uuid-here", "auto_response": "Thanks for reaching out..." }
Endpoints
All POST endpoints require Content-Type: application/json. Rate limit: 10 per sender per endpoint per 30 days.
POST /api/u/:username/pitch Deals, partnerships, investments POST /api/u/:username/meet Request a meeting POST /api/u/:username/ask Ask a question POST /api/u/:username/intro Request an introduction POST /api/u/:username/hire Job opportunities POST /api/u/:username/collab Propose a collaboration POST /api/u/:username/advise Advisory, board, consulting, fractional roles POST /api/u/:username/press Media, podcasts, speaking invitations GET endpoints (per user)
GET /api/u/:username Public profile: name, bio, active endpoints GET /api/u/:username/endpoints Endpoint list with field schemas GET /api/u/:username/status Availability and response time GET /api/status/:token Message delivery status tracking Error codes
202 Message accepted but pending sender email verification 400 Validation failed: includes field-level errors 403 Sender is blocked 401 Missing or invalid authentication (session or Bearer token) 404 Unknown username or endpoint 429 Rate limit exceeded: includes retry_after_seconds Agent discovery flow
Any LLM, agent framework, or automation that makes HTTP requests can integrate. No API key, OAuth, or SDK needed.
- 1
GET /api/u/:usernameDiscover who this person is, what they care about
- 2
GET /api/u/:username/endpointsRead available endpoints, schemas, required fields
- 3
POST /api/u/:username/:endpointSubmit a structured message with the right fields
- 4
GET /api/status/:tokenTrack if the message was received, viewed, or replied to
Email is human-to-human. HMU API is anything-to-human.
Integration ideas
Contact form
Replace mailto with a POST to /api/ask
Slack bot
Slash command that POSTs to any endpoint
Zapier / Make
HTTP webhook module for automations
AI agents
LLMs discover via llms.txt and call with tool use
iOS Shortcuts
"Get Contents of URL" action with JSON body
CRM webhook
Auto-submit from HubSpot, Salesforce, Pipedrive
Webhooks
Get notified in real time when messages arrive. Webhooks fire on message.created events and can be filtered by endpoint.
Supported formats
X-HMU-Signature header POST /api/dashboard/webhooks Create a webhook. Returns a signing secret (shown once).
{ "url": "https://hooks.slack.com/services/...", "format": "slack", "events": ["message.created"], "endpoint_filter": "pitch" }
Verifying signatures (JSON format)
const crypto = require("crypto"); const expected = crypto .createHmac("sha256", WEBHOOK_SECRET) .update(rawBody) .digest("hex"); if (expected !== req.headers["x-hmu-signature"]) return res.status(401).send("Invalid");
Dashboard API
Authenticated endpoints for managing your inbox. Requires Authorization: Bearer <token> or an active session cookie.
GET /api/dashboard/messages List messages (filter by endpoint, status, starred) GET /api/dashboard/analytics?range=30 Message volume, endpoint breakdown, top senders, response times GET /api/dashboard/stats Summary counts by endpoint and status GET /api/dashboard/profile Your profile settings PATCH /api/dashboard/profile Update profile, digest frequency, timezone GET /api/dashboard/endpoints Your endpoint configurations PUT /api/dashboard/endpoints/:slug Update endpoint (auto-reply, enabled, subject) GET /api/dashboard/webhooks List your webhooks POST /api/dashboard/webhooks Create webhook (returns signing secret) DELETE /api/dashboard/webhooks/:id Delete a webhook POST /api/dashboard/webhooks/:id/test Send a test event Auto-replies
Every endpoint sends an automatic confirmation email to the sender. Customize per endpoint in Settings.
Template variables
{{sender_name}} Sender's name {{endpoint}} Endpoint slug {{display_name}} Your display name {{score}} Priority score Controls
Toggle auto-replies on/off per endpoint. Set a custom subject line and message body. Leave blank to use the default.
Email digest
Get a summary of new messages delivered to your email on a schedule. Configure in Settings.
Off
No digest emails
Daily
Once per day
Weekly
Once per week
Includes: message table sorted by priority, stats summary (total/unread/replied), and a link to your dashboard.