Point an agent directly at the raw markdown: /docs/api.md · /docs/mcp.md
Human is an MCP- and API-first CRM for AI agents. Data is stored as portable
markdown "memories" attached to lightweight contacts, indexed for hybrid
(semantic + keyword) search, and queryable in natural language.
Base URL: https://humancrm.com
Endpoints are reachable at /api/<endpoint> (e.g. /api/signup). The explicit
/api/memories/<endpoint> form also works and is identical. Send/return JSON.
Every request uses a workspace bearer key:
Authorization: Bearer hc_xxx # full access (read + write)
Authorization: Bearer hcr_xxx # read-only
POST /api/signup
{ "name": "Acme relationships" }
→ { "workspaceId": "...", "apiKey": "hc_...", "docs": ".../docs/api.md" }
The key is shown once — store it. To hand the account to a human later, send a
claim link (they take ownership via an email magic link):
POST /api/account/claim
Authorization: Bearer hc_...
{ "email": "person@company.com" }
entity): a person, company, or deal. A name plus light, filterable fields (email, org, stage, value, tags…). Everything nuanced
lives in markdown, not columns.
save is an immutable new version — full history is kept.
GET /api/entities?type=person&limit=50
POST /api/entities { "type":"person", "name":"Dana Lee", "fields":{"email":"dana@acme.co"} }
GET /api/entities/{id} → { entity, documents }
PATCH/api/entities/{id} { "name"?, "fields"?, "archived"? }
POST /api/entities/{id}/notes { "title":"Met at dinner", "markdown":"Dana mentioned..." }
GET /api/entities/{id}/notes → documents
GET /api/entities/{id}/summary → { summary, documentId }
PUT /api/entities/{id}/summary { "markdown":"..." }
GET /api/documents/{id} → { document, markdown }
PUT /api/documents/{id} { "markdown":"..." } # saves a new version
GET /api/documents/{id}/history → versions
Hybrid semantic + keyword search over all memories.
POST /api/search { "query":"who did we meet at the conference?", "entityId"?, "limit"? }
→ { hits: [{ chunkId, documentId, entityId, content, score }], entityIds }
Ask a question and get structured data the model extracts from the memories.
Optionally force the shape with a JSON Schema. This effectively lets you define
custom read APIs over your corpus.
POST /api/query
{
"query": "every contact with a mailing address",
"outputSchema": { "type":"array", "items":{ "type":"object",
"properties":{ "name":{"type":"string"}, "address":{"type":"string"} } } },
"slug": "addresses", // optional: save as a reusable custom API
"name": "Mailing addresses"
}
→ { result, cached, slug }
from cache until it goes stale, then recomputed on next read.
GET /api/q/addresses → cached-or-recomputed result.
POST /api/query?force=1.depended on and the query's meaning. When a record gains new memories, only
the queries that are relevant — by dependency or by semantic match — are
invalidated and recomputed. Newly-relevant records (e.g. a brand-new contact
with an address) are picked up automatically.
Mint a signed, expiring link a human can open in a browser — no account.
POST /api/view-keys
{ "scope": { "kind":"entity", "entityId":"..." }, "ttlHours": 24 }
→ { "url": "https://humancrm.com/view/<token>" }
Scope kinds: workspace (directory), entity (one contact), query (a saved query's live result).
JSON { "error": "message" } with HTTP status (401 auth, 403 read-only,
404 not found, 422 validation, 429 rate limit).
Human exposes a Model Context Protocol server so any MCP client (Claude, etc.)
can manage the CRM with discrete, typed tools.
{
"mcpServers": {
"human": {
"url": "https://humancrm.com/api/memories/mcp",
"headers": { "Authorization": "Bearer hc_..." }
}
}
}
Get a key with POST /api/signup (agents can self-serve) or from your
dashboard. Use an hcr_ key for read-only access. Transport is JSON-RPC 2.0
over HTTP (protocol 2024-11-05).
{ query, entityId? } — semantic + keyword search across memories.{ query, outputSchema?, slug?, name? } — extract STRUCTURED data from the memories; pass a slug to save it as a cached custom API.
{ type?, limit? }{ entityId } — contact + its memory documents.{ name, type?, fields? }{ title, markdown, entityId? } — append a markdown note.{ entityId }{ entityId, markdown }{ kind, entityId?, slug?, ttlHours? } — mint a no-login browser link (kind: workspace | entity | query).
hc_) key; read-only (hcr_) keys can search, query, list_contacts, get_contact, get_summary.
/docs/api.md.