Developers
Ship a message in three lines
- 01Idempotency keys on every write
- 02Signed webhooks with replay protection
- 03Least-cost routing resolved per send
One API · curlPOST /v1/messages
# send an SMS curl -X POST api.tayapro.cloud/v1/messages \ -H "Authorization: Bearer sk_live_•••" \ -d to="+12025550148" \ -d body="Your code is 8291"
← 201 Created { "id": "msg_9f21c", "status": "queued", "carrier": "atlas-1", "cost": 0.0079 }
Reference
Live endpoints
| Endpoint | Permission | What it does |
|---|---|---|
| POST /v1/messages | messages:send | Send a text; routing picks the carrier |
| GET /v1/messages | logs:read | Recent inbound and outbound messages |
| POST /v1/calls | calls:write | Place a call with your own answer URL |
| GET /v1/calls | logs:read | Call history with duration and status |
| GET /v1/numbers | numbers:read | Your numbers, or ?available=true to search |
| POST /v1/numbers | numbers:write | Buy a number and wire its webhooks |
| POST /v1/verify | verify:write | Send a one-time passcode |
| POST /v1/verify/check | verify:check | Check a passcode |
| GET /v1/messages/:id | logs:read | Live status straight from the network |
| GET /v1/calls/:id | logs:read | Live call state, duration and result |
Authenticate with Authorization: Bearer and a key created in your console. Webhook deliveries carry x-tayapro-signature: t=<unix>,v1=<hex>, an HMAC-SHA256 of <t>.<raw body> using your endpoint secret.
Libraries
Ready-made clients
JavaScript / TypeScript
downloadimport Tayapro from "./tayapro.js";
const taya = new Tayapro({ apiKey: "tk_live_…" });
await taya.messages.create({ to: "+12025550123", body: "Your appointment is confirmed." });Python
downloadfrom tayapro import Tayapro taya = Tayapro(api_key="tk_live_…") taya.messages.create(to="+12025550123", body="Your appointment is confirmed.")
Both clients retry safely, raise typed errors and verify webhook signatures for you.
Coming from Twilio? Your existing calls work unchanged — read the Twilio-compatible reference and migration guide.