v1.0.0

Build call, SMS and chat features
on the Hello by Flow API.

The Hello by Flow API powers a multi-tenant cloud calling platform: external Twilio voice and SMS, free internal team chat, peer-to-peer WebRTC meetings, and an admin console for managing customer organizations. Production-ready, REST, OpenAPI 3.1.

REST + JSON
OpenAPI 3.1 spec
Cookie or Bearer JWT
Same scheme, two flavors
Multi-tenant
Org-scoped automatically

Quickstart

Three steps to your first API call. Use the demo credentials below, or grab your own from /signup.

  1. 1

    Authenticate

    cURL
    curl -X POST https://hellobyflow.com/api/auth/login \
      -H "Content-Type: application/json" \
      -d '{"email":"admin@hellobyflow.com","password":"admin123"}'
  2. 2

    Make your first call

    cURL
    curl -X POST https://hellobyflow.com/api/calls/start \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"to_number":"+13072402137","to_name":"Hana Park","direction":"outbound"}'
  3. 3

    Send your first SMS

    Python (SDK)
    from hellobyflow import HelloByFlowClient
    
    client = HelloByFlowClient(base_url="https://hellobyflow.com")
    client.login(email="you@example.com", password="your-password")
    
    client.send_sms(body={"to_number": "+13072402137", "body": "Hello!"})
    TypeScript (SDK)
    import { HelloByFlowClient } from "@hellobyflow/sdk";
    
    const client = new HelloByFlowClient({ baseUrl: "https://hellobyflow.com" });
    await client.login({ email: "you@example.com", password: "your-password" });
    
    await client.sendSms({ body: { to_number: "+13072402137", body: "Hello!" } });

Authentication

Every protected endpoint accepts two equivalent auth schemes. Pick whichever fits your runtime — the server treats them identically.

cookieAuthBrowser apps

POST /api/auth/login sets an HttpOnly access_token cookie (12h TTL) automatically — no client-side token handling needed for same-site requests.

bearerAuth (JWT)Servers, CLIs, mobile

Read access_token from the login response and send Authorization: Bearer <jwt> on every protected request. The token encodes user id, email and role.

Roles

RoleVisibility
ownerCross-org. Runs /api/owner/* platform console.
adminFull control of own organization.
supervisorRead-only across org (calls, recordings, analytics).
agentOnly their own contacts / calls / SMS.

Official SDKs

Both SDKs are auto-generated from the same OpenAPI spec the server publishes — they regenerate on every backend boot, so they never drift from the API.

Python

httpx

145.8 KB · 7/31/2026, 7:06:54 PM

Download .tar.gz
install
curl -L -o hbf-sdk-python.tar.gz https://hellobyflow.com/api/developers/sdk/python.tar.gz
tar xzf hbf-sdk-python.tar.gz
cd hbf-sdk-python && pip install -e .

TypeScript

fetch

95.0 KB · 7/31/2026, 7:06:54 PM

Download .tar.gz
install
curl -L -o hbf-sdk-typescript.tar.gz https://hellobyflow.com/api/developers/sdk/typescript.tar.gz
tar xzf hbf-sdk-typescript.tar.gz
cd hbf-sdk-typescript && npm install && npm run build

Need a Ruby, Go, or PHP client? Feed the OpenAPI spec into openapi-generator-cli or your favorite generator — the spec has rich tags, summaries, and examples ready.

Postman Collection

One-click collection with every endpoint pre-organized by tag. Set the email and password environment variables once — the included pre-request script auto-fetches an access token before every request.

Download collection537.7 KB · 7/31/2026, 7:06:54 PM

Webhooks

Hello by Flow exposes Twilio's standard callback endpoints so you can self-host PSTN routing. All webhook URLs are public (no auth) — Twilio signs requests with X-Twilio-Signature; we verify it via providers/twilio.validate_signature().

EventURL (POST)Effect
voice/api/twilio/voiceTwiML — rings agents (inbound) or dials out (outbound).
voice-inbound/api/twilio/voice-inboundLegacy inbound for older purchased numbers.
status/api/twilio/statusUpdates final status, duration, ended_at.
recording/api/twilio/recordingPersists the recording URL + duration.
sms-inbound/api/twilio/sms-inboundStores inbound SMS, auto-links contact by phone.

Pointing your own Twilio account at these URLs? Replace hellobyflow.com with your custom subdomain.

API Reference

The full operation reference — every endpoint with examples, response schemas, and a "Try it out" button.

Errors & Status Codes

Every error uses the same JSON envelope:

JSON
{ "detail": "Admin only" }
CodeMeaningWhen
400Bad requestValidation or business rule violation.
401UnauthorizedMissing or invalid token / cookie.
403ForbiddenAuthenticated but lacks the role/scope.
404Not foundResource missing or not visible to you.
422Unprocessable EntityPydantic body failed schema validation.
429Too Many RequestsBrute-force lockout — 5 failed logins / 15 min.
503Service UnavailableA dependency (Twilio, storage, LLM) is down.

Rate Limits & Lockout

We don't currently enforce a global request quota. Two specific protections are in place:

  • Login lockout: 5 failed attempts on the same identifier triggers a 15-minute cooldown returning 429.
  • Attachment uploads are capped at 25 MB per file (413 if exceeded).

Need higher limits? Email partners@hellobyflow.com.

Support

Stuck on an integration? Two ways to reach us — both real humans.