Sign in

OpenLine console

At least 8 characters.

You're opening this through the public address, so prove it's your server: paste HTTP_GATEWAY_API_KEY from server\.env. Not needed on the server's own PC.

OpenLine
Home Playground Connection Docs Settings
Checking phone…

Your phone's SIM, as a voice API.

A self-hosted alternative to Twilio Voice. An Android phone places and answers real calls on its SIM, and your apps and AI agents control them over HTTP and stream the audio over WebSockets.

1

Phone

Runs the OpenLine app. Dials, answers and routes call audio. It stays silent: the conversation happens on the server.

2

Server

This machine. Exposes the REST API, relays audio, sends webhooks and keeps every call in a local SQLite database.

3

Your agent

Any app or voice AI. Start calls with a POST, get status by webhook, and talk through 16 kHz PCM on a WebSocket.

Make a call from code

Create an API key in Settings, then place a call that talks to your agent:


          

          

Send clear to cut off queued speech when the caller interrupts. Incoming calls can go to your agent too: set the URL in Settings.

API

Full docs

Getting started

    Playground

    Try the API by hand: place a call, talk from this laptop, listen in, or hand the call to the built-in AI assistant.

    No call

    Incoming calls appear here.

    Same thing over the API

    Assistant

    Not on this call.

    Laptop audio

    Off. Use headphones to avoid echo.

    Caller
    You
    Call events

    Recent calls

      Assistant

      Checking…

      The assistant uses this on calls and shares only what's written here. Applies from the next call.

      Messages

        Connection

        Link an Android phone to this server and keep an eye on it. The phone connects out to the server, so it works on Wi-Fi or mobile data from anywhere.

        Creating code…

        Connect a phone

        1. Install the OpenLine app on the Android phone and make it the default phone app.
        2. Open the app and tap Scan QR, or scan this code with the phone's camera.
        3. Finish the setup steps in the app. The phone shows up below when it connects.

        Phones can't reach localhost. Use your Tailscale Funnel or Cloudflare Tunnel address (save it in Settings).

        Phones

        Endpoints

        Docs

        The documentation site isn't published yet. Once it is, set its address in Settings and this link opens it.

        Set docs address

        Settings

        Saved in the server's database. Values here override server\.env.

        AI assistant

        Get a key at aistudio.google.com. It never leaves this server.

        Incoming calls

        When set, every incoming call is answered and connected to this WebSocket. Your agent ends the call by closing the socket. Leave empty to handle calls yourself or with the built-in assistant.

        Server

        Your Tailscale Funnel or Cloudflare Tunnel URL. Phones and webhooks use it.

        Gets every call event, signed with HMAC-SHA256. A call's own webhookUrl takes priority.

        API keys

        Give each app or agent its own key, so you can revoke one without touching the rest. Send it as Authorization: Bearer <key>.

        Copy this key now. It won't be shown again.

        Account

        Changing it signs you out in every other browser.

        People with access

        They sign in with this email and password. Share the password privately.