API documentation
Send SMS programmatically through the Sendy REST API. Authenticate with your workspace token and call the endpoints below. Don't have a workspace yet? Create one free.
Prefer no-code? Use Sendy with our built-in integrations - n8n, Make and Zapier wrap this same API.
Authentication
Every request authenticates with the workspace API token as a bearer token. The base URL is https://sendy.co.il/api/v1. Create or rotate your token on the Developers page after you sign in.
Authorization: Bearer sk_live_8Jc…A missing or unknown token returns 401 INVALID_API_KEY. Keep the token secret - it grants full send access to this workspace's credits.
Quick start: send one message
One recipient per request, a 202 with the queued message id in return. The full contract, including idempotency and every field, is in Send a message.
curl -X POST https://sendy.co.il/api/v1/messages \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"to": "+972501234567", "from": "Sendy", "body": "Your order has shipped."}'const res = await fetch("https://sendy.co.il/api/v1/messages", {
method: "POST",
headers: { Authorization: "Bearer sk_live_...", "Content-Type": "application/json" },
body: JSON.stringify({ to: "+972501234567", from: "Sendy", body: "Your order has shipped." }),
});
const message = await res.json();Reference
- AuthenticationBearer tokens: where to create one, how to send it, and what a rejected token looks like.
- Send a messagePOST
/messagesPOST /messages: send one SMS to one recipient, with idempotency and the 202 response shape. - Retrieve a messageGET
/messages/{id}GET /messages/{id}: read a message's current status, delivery timestamps and error code. - List sendersGET
/sendersGET /senders: the approved sender IDs and numbers a workspace may send from. - Get creditsGET
/creditsGET /credits: the workspace's current credit balance. - Upsert a contactPOST
/contactsPOST /contacts: create or update a contact by phone, including custom fields, segments and opt-out. - List contactsGET
/contactsGET /contacts: page through contacts with cursors, or look one contact up by phone. - Get a contactGET
/contacts/{id}GET /contacts/{id}: one contact with its segments, custom fields and subscription state. - List segmentsGET
/segmentsGET /segments: the workspace's contact groups and their ids. - List custom fieldsGET
/custom-fieldsGET /custom-fields: the workspace's custom contact fields. - List inbound messagesGET
/inboundGET /inbound: replies received on the workspace's virtual number, paginated. - Virtual numberGET
/numberGET /number: the workspace's virtual number and its reply-based unsubscribe settings. - Verify: startPOST
/verifyPOST /verify: send a 6- or 4-digit verification code from an approved sender and get back a verification id. - Verify: getGET
/verify/{id}GET /verify/{id}: a verification's status and the delivery of its latest code. - Verify: checkPOST
/verify/{id}/checkPOST /verify/{id}/check: compare the code the user typed. Free. - Verify: resendPOST
/verify/{id}/resendPOST /verify/{id}/resend: a new code for an open verification, after 60 seconds, up to 3 sends. - PaginationCursor pagination: which endpoints page, the envelope, and how to walk every page.
- IdempotencyThe Idempotency-Key header: safe retries without double sends.
- Rate limits60 requests per minute per token, the X-RateLimit headers and Retry-After.
- ErrorsThe error envelope and every error code with its HTTP status and meaning.
- Message statusesMessage statuses from queued to delivered, and which are terminal.
- WebhooksSigned webhooks: the envelope, event types, signature verification, retries and disabling.