Teleos API

Teleos sends and receives SMS through Android phones linked to your account. The v2 API is REST + JSON. Base URL:

https://teleos.in/sms-login/v2

Every response is {"success": true, "data": …} or {"success": false, "error": {"code", "type", "message"}}. Timestamps are ISO-8601 UTC.

Authentication

Create an account, then copy your API key from the dashboard (API or Teleos Pro → Developer API v2). Send it as a Bearer token:

Authorization: Bearer YOUR_API_KEY

Keep the key secret — anyone with it can send from your phones. Regenerating it in the dashboard revokes the old key immediately.

Errors & limits

HTTPtypeMeaning
400invalid_requestMissing/invalid field (message explains which)
401unauthorizedMissing or wrong API key
402insufficient_credits / subscription_expiredTop up or renew your plan
403forbiddenLimit reached (e.g. webhooks per account)
404not_foundUnknown endpoint or ID
429rate_limitedToo many requests — default 300/min per account; OTP has extra per-number caps

Each SIM sends roughly one SMS per second and your operator may cap daily SMS per SIM; add phones and use round-robin routing for more throughput.

GET/me

Account, credits (null = unlimited), plan expiry, device count and routing preferences.

curl https://teleos.in/sms-login/v2/me -H "Authorization: Bearer YOUR_API_KEY"

GET/devices

Phones on your account (owned and shared) with online (seen in the last 10 minutes), app version and SIMs (slot, name, number).

POST/messages

FieldType
tostring | string[]Required. Number(s) with country code; comma-separated string or array (max 1000).
messagestringRequired. Up to 2000 characters. Supports spintax {Hi|Hello} and %random-4%.
device_idintOptional phone from /devices. Default: your routing setting (primary / round-robin / random).
simintOptional SIM slot on that phone.
schedule_atISO time | unixOptional future send time.
priorityboolOptional; jump the phone's queue.
curl -X POST https://teleos.in/sms-login/v2/messages \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"to":["+919876543210","+919812345678"],"message":"Sale ends tonight!"}'

201 → {"success":true,"data":{"queued":2,"messages":[{"id":694701,"status":"Pending",…}]}}

Status lifecycle: Scheduled → Pending → Queued → Sent → Delivered (or Failed). Delivery reports depend on the operator and the "report delivery" setting.

GET/messages

Filters: status, direction (inbound|outbound), number, since_id (ascending, for polling), before_id (paging back), limit (≤200). GET/messages/{id} returns one message with its live status.

GET/inbox

Received SMS only. Poll with since_id = last ID you stored, or better, use the message.received webhook.

OTP

POST/otp/send

FieldDefault
phone—Required, with country code.
length64–8 digits.
expires_in300Seconds, 60–900.
max_attempts5Wrong tries allowed per code, 1–10.
cooldown60Seconds before another code can be sent to the same number, 30–600.
purposedefaultLabel so login/signup/payment codes don't clash.
templateplatform defaultYour SMS text; must contain {code}. {minutes} and {app} are also replaced.
device_id, simroutingOptional phone/SIM.

The code is never returned. A number can receive at most 5 codes per 24 hours (per account).

POST/otp/verify

Body: phone, code, purpose. Returns {"verified":true} or {"verified":false,"reason":"mismatch|expired|too_many_attempts|already_used|no_otp","attempts_left":3}. A verified code cannot be reused.

import requests
H = {'Authorization': 'Bearer YOUR_API_KEY'}
requests.post('https://teleos.in/sms-login/v2/otp/send', headers=H, json={'phone': '+919876543210', 'purpose': 'signup'})
ok = requests.post('https://teleos.in/sms-login/v2/otp/verify', headers=H,
                   json={'phone': '+919876543210', 'code': user_code, 'purpose': 'signup'}).json()['data']['verified']

Webhooks

GET/webhooks · POST/webhooks {"url":"https://…","events":["message.received","message.status","otp.verified"]} · DELETE/webhooks/{id}. Also manageable in the dashboard (Teleos Pro → Webhooks). URLs must be public HTTPS.

Each delivery is a JSON POST with headers X-Teleos-Event, X-Teleos-Timestamp and X-Teleos-Signature: sha256=<hex>, where the signature is HMAC-SHA256 of timestamp + "." + raw_body using the secret returned when you created the webhook.

{
  "id": "67da80ca20b10c7f",
  "event": "message.received",
  "created_at": "2026-11-13T17:12:58Z",
  "data": {"id": 694666, "number": "+919000000001", "message": "Hi, I want a demo",
           "status": "Received", "direction": "inbound", "device_id": 385, "sim": 0}
}
// PHP verification
$body = file_get_contents('php://input');
$sig  = 'sha256=' . hash_hmac('sha256', $_SERVER['HTTP_X_TELEOS_TIMESTAMP'] . '.' . $body, $secret);
if (!hash_equals($sig, $_SERVER['HTTP_X_TELEOS_SIGNATURE'] ?? '')) { http_response_code(401); exit; }

Answer with any 2xx within 10 seconds. Failed deliveries retry after 1m, 3m, 10m, 30m, 2h, 6h, 12h and then daily — 10 attempts in total. message.status events include previous_status.

MCP server for AI agents

Endpoint https://teleos.in/mcp (Streamable HTTP), authenticated with your API key.

# Claude Code
claude mcp add --transport http teleos https://teleos.in/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

# Cursor (~/.cursor/mcp.json) / other clients
{"mcpServers":{"teleos":{"type":"http","url":"https://teleos.in/mcp",
  "headers":{"Authorization":"Bearer YOUR_API_KEY"}}}}

# Claude Desktop (via mcp-remote, needs Node.js)
{"mcpServers":{"teleos":{"command":"npx","args":["-y","mcp-remote","https://teleos.in/mcp",
  "--header","Authorization: Bearer YOUR_API_KEY"]}}}
ToolWhat it does
setup_teleosValidates the key; shows account, balance and phones
send_smsto, message, optional device_id, sim
send_otp / verify_otpSame rules as the OTP API
wait_for_otpWaits up to 50 s for an incoming SMS containing a 4–8 digit code and returns it (timeout_seconds, from, since_minutes)
get_messagesHistory with filters, or one message by id
list_devices / get_balancePhones, SIMs, online state / credits and expiry
create_webhookRegisters a signed HTTPS callback

Integrations

Classic API

The original endpoints under /sms-login/services/*.php (send.php, get-messages.php, get-devices.php…) remain available and unchanged, so existing integrations keep working. Their reference is on the API page inside the dashboard.

Create a free account →