API Reference

Everything you need to send SMS through Connecfy. Base URL: https://connecfy.com

Authentication

All API requests require a Bearer token in the Authorization header. Generate API keys from your dashboard.

Authorization: Bearer YOUR_API_KEY

You can create multiple keys — one per integration — and revoke them individually without affecting others.

Send SMS

POST/api/v1/sms/send/

Queue an outbound SMS for delivery. Returns 202 Accepted immediately — the message is in the queue, not yet sent.

Request fields

FieldTypeRequiredDescription
tostringRequiredRecipient in E.164 format — +212612345678
fromstringRequiredSender number registered to your account
messagestringRequiredMessage body. Max 1,600 characters (~10 SMS segments)
request_idstringOptionalIdempotency key — same key within 24h returns the original, no duplicate
send_atISO 8601OptionalSchedule delivery — e.g. 2026-09-01T09:00:00Z
curl -X POST https://connecfy.com/api/v1/sms/send/ \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "to": "+212612345678", "from": "+212600000000", "message": "Your verification code is 482910", "request_id": "order-12345" }'
import requests response = requests.post( "https://connecfy.com/api/v1/sms/send/", headers={"Authorization": "Bearer YOUR_API_KEY"}, json={ "to": "+212612345678", "from": "+212600000000", "message": "Hello from Connecfy!", "request_id": "order-12345", }, ) data = response.json() msg_id = data["message_id"]
const res = await fetch("https://connecfy.com/api/v1/sms/send/", { method: "POST", headers: { "Authorization": `Bearer ${API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ to: "+212612345678", from: "+212600000000", message: "Hello from Connecfy!", request_id: "order-12345", }), }); const { message_id } = await res.json();
// 202 Accepted { "status": "queued", "message_id": "f3a1b2c4-d5e6-7890-abcd-ef1234567890", "request_id": "order-12345", "device_id": "a8b9c0d1-...", "from_number": "+212600000000", "to": "+212612345678", "created_at": "2026-07-15T14:30:00.123Z" }

Get message status

GET/api/v1/sms/<message_id>/

Retrieve the current status of any message queued by your account.

curl https://connecfy.com/api/v1/sms/f3a1b2c4-.../ \ -H "Authorization: Bearer YOUR_API_KEY" // 200 OK { "status": "delivered", "message_id": "..." }

Account stats

GET/api/v1/account/stats/
curl https://connecfy.com/api/v1/account/stats/ \ -H "Authorization: Bearer YOUR_API_KEY" // 200 OK { "total_messages": 847, "queued": 3, "sent": 820, "failed": 24, "success_rate": 97.2 }

Error codes

HTTPcodeMeaning
401auth_invalid_keyAPI key missing, revoked, or malformed
400(field name)Validation failed — response body has per-field details
403from_number_not_foundThe from number isn't registered in your account
403from_number_access_deniedThe number exists but your account can't use it
503device_inactiveThe device linked to that number is deactivated
404not_foundNo message with that ID on your account
429throttledRate limit hit — retry after the Retry-After header value

Status lifecycle

queued → sending → sent → delivered └──→ failed (auto-retry if retries remain)
  • queued — in the queue, waiting for a device to poll
  • sending — a device claimed it and is calling Android SmsManager
  • sent — radio confirmed transmission to the carrier
  • delivered — delivery receipt from recipient's network (not universal)
  • failed — all retries exhausted

Full Python example

import requests, time API_KEY = "YOUR_API_KEY" BASE = "https://connecfy.com/api/v1" HEADERS = {"Authorization": f"Bearer {API_KEY}"} # 1. Send result = requests.post(f"{BASE}/sms/send/", headers=HEADERS, json={ "to": "+212612345678", "from": "+212600000000", "message": "Hello!", "request_id": "unique-key-123", }).json() msg_id = result["message_id"] # 2. Poll for delivery (use exponential backoff in production) for _ in range(12): time.sleep(25) st = requests.get(f"{BASE}/sms/{msg_id}/", headers=HEADERS).json() if st["status"] in ("delivered", "failed"): break

Device API (Android app internals)

Used by the Connecfy Android app — documented here for transparency.

MethodEndpointAuthDescription
POST/api/devices/register/One-time codePair a new device via QR scan or typed code
GET/api/devices/<id>/tasks/Device tokenPoll for queued messages — up to 50 per call, every ~20s
POST/api/devices/<id>/heartbeat/Device tokenKeep-alive every 15s, includes battery level
POST/api/v1/device/update-status/Device tokenReport sent/delivered/failed after SmsManager fires

Questions about integrating? Email contact@yassermansour.com or call +212 647 955 576