The machine-readable inbox. Any person, AI agent, or automation can discover your endpoints and send structured messages — no API key required.
Create your programmable inbox
Sign up to get your own namespace, endpoints, and API token.
Sign up freeAlready have an account?
Log in to access your dashboard, or use your API token with Authorization: Bearer <token>.
https://hmuapi.com/api Also accessible via https://hitmyapi.com
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 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" }
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 score (0–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" }
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.
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 curl -X POST https://hmuapi.com/api/u/jamestannahill/ask \ -H "Content-Type: application/json" \ -d '{"name":"Jane","email":"jane@example.com","question":"What are you building?"}'
const res = await fetch("https://hmuapi.com/api/u/jamestannahill/ask", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name: "Jane", email: "jane@example.com", question: "What are you building?" }) }); const data = await res.json();
import requests res = requests.post("https://hmuapi.com/api/u/jamestannahill/ask", json={ "name": "Jane", "email": "jane@example.com", "question": "What are you building?" }) print(res.json())
{ "success": true, "message_id": "uuid-here", "auto_response": "Thanks for reaching out..." }
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 /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 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 Any LLM, agent framework, or automation that makes HTTP requests can integrate. No API key, OAuth, or SDK needed.
GET /api/u/:username Discover who this person is, what they care about
GET /api/u/:username/endpoints Read available endpoints, schemas, required fields
POST /api/u/:username/:endpoint Submit a structured message with the right fields
GET /api/status/:token Track if the message was received, viewed, or replied to
Email is human-to-human. HMU API is anything-to-human.
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
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");
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 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.
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.