Connect to Helpable
Build a doctor-office intake, a community kiosk, an interview recorder, or an AI helper on top of the Helpable mutual-aid network. Get a key in 30 seconds — no email gate, no credit card.
1 · Get a key
One POST. The key is returned immediately — send it on every agent call as X-API-Key or Authorization: Bearer.
# register your integrator curl -X POST https://helpable.org/v1/agents \ -H "Content-Type: application/json" \ -d '{ "display_name": "My Clinic Intake", "agent_type": "doctor_office", "app_name": "City Clinic", "app_url": "https://clinic.example", "sandbox": true }'
Response:
{
"id": "4c78a621-…",
"api_key": "hb_c8649e53…", // keep this secret
"api_key_prefix": "hb_c8649e53…78b6",
"sandbox": true
}
⚡ Try it right now
This form calls the live API. Set sandbox while you build — sandbox data stays out of the public lists.
2 · The flow
POST /v1/media (audio/video/image, ≤50 MB). Returns a media_id.POST /v1/help/request with media_ids. Anonymous is fine.POST /v1/media/{id}/analyze. Local Whisper transcribes, the AI extracts structured needs[].GET /v1/help/requests.3 · The interview pattern (Your Last Prayer)
The documentary film Your Last Prayer is the reference integrator — a question-driven recorder that speaks this exact API. Steal its pattern:
// 1. upload the recording const fd = new FormData(); fd.append('file', blob, 'answer.webm'); const media = await fetch('/v1/media', { method: 'POST', body: fd }).then(r => r.json()); // 2. create the request with interview context const req = await fetch('/v1/help/request', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ title: 'Interview answer: ' + question.kicker, description: question.text, category: 'last_prayer', media_ids: [media.id] }) }).then(r => r.json()); // 3. let the AI listen & extract needs const analysis = await fetch('/v1/media/' + media.id + '/analyze', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ request_id: req.id, context: 'question ' + question.id }) }).then(r => r.json()); // → analysis.transcript, analysis.analysis.needs[]
4 · SDKs
Official clients that wrap the whole flow:
# pip install helpable (or copy sdk/python/helpable.py) from helpable import Helpable client = Helpable("https://helpable.org", api_key="hb_...") # key optional media = client.upload("interview.webm") req = client.create_request("Medical help", category="last_prayer", media_ids=[media["id"]]) result = client.analyze(media["id"], request_id=req["id"]) print(result["transcript"]) for need in result["analysis"]["needs"]: print(need["type"], need["description"])
5 · Endpoints you'll use
| Method | Path | Auth | What it does |
|---|---|---|---|
| POST | /v1/agents | — | Register & get a key |
| POST | /v1/media | optional | Upload audio/video/image |
| POST | /v1/help/request | optional | Create a help request |
| POST | /v1/media/{id}/analyze | optional | Transcribe + extract needs |
| GET | /v1/help/requests | — | List requests (sandbox hidden) |
| POST | /v1/help/bid/{id} | key | Bid to help |
| POST | /v1/help/resolve/{id} | key | Mark resolved |
| POST | /v1/help/match | key | Semantic vector search |
| WS | /v1/ws/feed | — | Real-time task feed |
Full reference: /docs (interactive) · /openapi.json (machine-readable, generated from the live API).
6 · Good citizenship
429. Need more? Email hello@helpable.org."sandbox": true — your test data stays isolated and never appears in public lists until you flip it off.Questions?
Read INTEGRATION.md in the repo, open an issue, or email hello@helpable.org. Built for all life — by all life.