Send real SMS, WhatsApp, Telegram, email, and push notifications directly from your own phone using a simple HTTPS API — from any programming language, on the mobile plan you’re already paying for. No per-message fees. No cloud lock-in. Full control.
All communication is secured via HTTPS transport.
From signup to sending your first message in about 5 minutes.
Free signup — no payment required. You can upgrade to a paid plan later.
Sign Up FreePick the subscription that fits your volume. After payment you'll get a setup code.
See PlansInstall via Google Play or APK on the phone that will deliver your messages. Install before the setup step below.
Download AppOpen Secure Setup, enter your setup code, and scan the QR. Two things happen:
server_url, phone_id, and phone_secret automatically — you don’t copy anything.CLIENT_API_KEY — copy this. Your code uses it as a Bearer token.POST to /api/v1/messages with the API key from step 4 as a Bearer token. Try it from your terminal first:
curl -X POST https://phonerelay.dev/api/v1/messages \
-H "Authorization: Bearer YOUR_CLIENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"channel":"sms","to":"+1234567890","text":"Hello"}'
Put your own number in to for a self-test. See code samples for Python, Node, Go, Java, C#. Need bulk + scheduling? Business Hub.
Your phone delivers — you choose the channel per request.
Real carrier SMS via your SIM plan.
Send through the WhatsApp app on your phone.
Send through the Telegram app on your phone.
Send transactional email via configured account.
Local notifications on your phone for alerts.
No per-message fees. Your existing mobile plan pays for the SMS — Phone Agent just relays the trigger.
Messages flow one direction: your code → HTTPS → your phone → recipient. No inbound collection.
Plain HTTPS + bearer token. Works from Python, Node, Go, Java, C#, C++, Rust, bash — anything that can POST.
Your phone is the delivery endpoint. Cancel any time and your numbers / contacts stay where they are.
Simple REST endpoints. Bearer-token auth. Copy/paste examples in every major language.
Tap a language to see a copy-paste example. Default URL is the hosted relay https://phonerelay.dev — override only for private deployments.
import requests
requests.post(
"https://phonerelay.dev/api/v1/messages",
headers={"Authorization": "Bearer YOUR_CLIENT_API_KEY"},
json={"channel": "sms", "to": "+1234567890", "text": "Hello from Phone Agent"},
)
await fetch("https://phonerelay.dev/api/v1/messages", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_CLIENT_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
channel: "sms",
to: "+1234567890",
text: "Hello from Phone Agent",
}),
});
body := strings.NewReader(`{"channel":"sms","to":"+1234567890","text":"Hello"}`)
req, _ := http.NewRequest("POST", "https://phonerelay.dev/api/v1/messages", body)
req.Header.Set("Authorization", "Bearer YOUR_CLIENT_API_KEY")
req.Header.Set("Content-Type", "application/json")
http.DefaultClient.Do(req)
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://phonerelay.dev/api/v1/messages"))
.header("Authorization", "Bearer YOUR_CLIENT_API_KEY")
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString(
"{\"channel\":\"sms\",\"to\":\"+1234567890\",\"text\":\"Hello\"}"))
.build();
HttpClient.newHttpClient().send(req, BodyHandlers.ofString());
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_CLIENT_API_KEY");
var body = new StringContent(
"{\"channel\":\"sms\",\"to\":\"+1234567890\",\"text\":\"Hello\"}",
Encoding.UTF8, "application/json");
await http.PostAsync("https://phonerelay.dev/api/v1/messages", body);
curl -X POST https://phonerelay.dev/api/v1/messages \
-H "Authorization: Bearer YOUR_CLIENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"channel":"sms","to":"+1234567890","text":"Hello"}'
The to: field is the recipient. Put your own number in there and your phone delivers the SMS to yourself — handy for personal alerts, trade signals, deploy notifications, or just smoke-testing the API.
| Channel | to: value | Other params |
|---|---|---|
sms | E.164 phone number, e.g. +1234567890 (your own works) | — |
wa | Phone number (must be installed in WhatsApp) | — |
tg | Phone number or @username | — |
tg_bot | Telegram chat_id | bot_token required |
email | Email address (your own or anyone) | subject required |
notify | (not used) — local notification on your own phone | optional title |
Channels: SMS, WhatsApp (wa), Telegram (tg), Telegram bot (tg_bot), email, and local push (notify). The notify channel is self-only by design — it shows a local Android notification on the connected phone, no carrier message sent.
Install the Android app first. After checkout, you will be redirected to setup automatically.
Install from Google Play or APK, then connect with Secure Setup.
Scan → opens the phone browser and downloads the APK installer file.
Scan → opens a setup page on your phone that installs the app and connects it in two taps.
If file copy from PC is blocked, use:
adb devices
adb install -r phone-agent.apk
If you get INSTALL_FAILED_UPDATE_INCOMPATIBLE:
adb uninstall com.agentphone.app
adb install phone-agent.apk
If adb devices shows nothing:
Install, connect, send. Plus AI assistant integration and company private server overview.
Auth, request fields, status polling, and copy/paste examples (Python, C++, Node, Go, Java, C#).
Open HTTP API DocsBulk send, contact lists, scheduling, and templates — configurable from the web UI.
Open Business HubCompany overview: keep traffic and access control inside your infrastructure.
Open OverviewEmail support for setup + sending issues.