Quick Start

Get Vendel up and running in 5 minutes.

Choose your path

Self-hosted

Deploy on your own server with Docker or as a standalone binary.

Continue reading below ↓

Self-hosted setup

Prerequisites

  • Docker and Docker Compose installed
  • An Android phone with a SIM card (or USB modem)

1. Create a docker-compose.yml

docker-compose.yml
services:
  app:
    image: ghcr.io/jimscope/vendel:latest
    environment:
      - ENVIRONMENT=production
      - [email protected]
      - FIRST_SUPERUSER_PASSWORD=change-this-password
      - APP_URL=http://localhost:8090
      - FRONTEND_URL=http://localhost:8090
    ports:
      - "8090:8090"
    volumes:
      - vendel_data:/app/pb_data

volumes:
  vendel_data:

2. Start the service

docker compose up -d

This starts Vendel on port 8090, serving both the API and the web dashboard as a single service. Data is stored in an embedded SQLite database.

3. Log in to the dashboard

Open the dashboard at http://localhost:8090 and log in with the superuser credentials you set in the environment variables. You can also access the PocketBase admin panel at http://localhost:8090/_/.

4. Register a device

In the dashboard, go to Devices and click Add Device. Fill in the device name, phone number, and type (Android). A QR code and device API key will be displayed.

5. Connect the Android app

Install the Vendel Android app on your phone:

  1. Download the APK from GitHub Releases
  2. Open the app and scan the QR code from the dashboard, or enter the server URL and device API key manually
  3. Grant SMS permissions when prompted

Your phone is now connected as a gateway device and ready to send messages. See the Android App guide for more details.

6. Create an API key

Back in the dashboard:

  1. Go to Settings → API Keys
  2. Click Create API Key
  3. Copy the key (it won't be shown again)

7. Send your first message

Use your API key to send an SMS:

curl -X POST http://localhost:8090/api/sms/send \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipients": ["+1234567890"],
    "body": "Hello from Vendel!"
  }'

You'll get a response like:

{
  "batch_id": "",
  "message_ids": ["a1b2c3d4e5f6g7h"],
  "recipients_count": 1,
  "status": "accepted"
}

8. Check message status

View your message in the dashboard, or query its status via the API:

curl http://localhost:8090/api/sms/status/MESSAGE_ID \
  -H "X-API-Key: YOUR_API_KEY"

Next steps