Skip to content

OpenLine

Your Android phone's SIM, as a voice API. Place and answer real phone calls over REST, and put AI voice agents on the line through WebSockets. Open source and self-hosted.

REST API for phone calls

POST /v1/calls dials. Answer, hang up, hold and press keys with one request each. Every state change arrives as a signed webhook.

AI voice agents on real calls

Give a call a stream URL and OpenLine connects it to your agent’s WebSocket. Twilio Media Streams format included, so Pipecat-style agents work as they are.

Your SIM, your server

Calls go out on a normal SIM plan, with no per-minute API fees. The server runs on your machine; calls, transcripts and settings stay in one SQLite file.

Silent phone

The phone only routes the call. Audio flows between the caller and your server; nothing plays on the handset. No root, no extra hardware.

Terminal window
curl -X POST https://your-openline.example/v1/calls \
-H "Authorization: Bearer $OPENLINE_KEY" -H "content-type: application/json" \
-d '{"deviceId":"phone-7f3a91c2","to":"+919876543210",
"stream":{"url":"wss://my-agent.example.com/ws","format":"twilio"}}'

When the call is answered, OpenLine opens your agent’s WebSocket and streams the conversation both ways. Your agent hangs up by closing the socket.

  • A self-hosted Twilio alternative for voice: the same building blocks (calls API, status webhooks, media streams), running on hardware you own.
  • Built for AI agents: Pipecat, LiveKit workers or your own speech pipeline get raw 16 kHz PCM or Twilio-compatible audio.
  • Local numbers: calls come from a real local SIM, so they look like any other call.

Building with an AI coding assistant? Point it at llms.txt or llms-full.txt.