Developers
One API in. One webhook out.
Yesly sits between your system and your customer. You create the appointment; we get the answer and send it back. No templates to approve, no carriers to sign, no telephony to run.
- REST + JSON
- SDKs in 5 languages
- Signed webhooks
- Sandbox with test numbers
- CSV import
Integration
Three steps. Two of them are ours.
- 01
Create the appointment
One POST with the customer, the slot and, if you like, your own metadata such as the order number. Create them one by one as your system schedules, or in bulk every morning.
POST /v1/appointments - 02
We run the channel chain
WhatsApp first, SMS if there is no reply, a voice call if still nothing. Templates, numbers and carriers are ours. You do nothing.
whatsapp → sms → voice - 03
Receive the answer
A signed webhook with confirmed, rescheduled or cancelled, the channel that got it, the new slot when there is one, and your metadata exactly as you sent it.
appointment.confirmed
- Time to first confirmation
- Minutes after your first POST
- Typical integration
- One developer, two to five days
- Idempotency
- By external_id, safe to retry
- Webhook retries
- Exponential backoff for 24 h
Escalation
The full flow, step by step.
Your system
Sends the appointment via API
Sent the day before the appointment
Answers → confirmed
SMS
Reaches any phone, no data needed
Answers → confirmed
Voice call
Natural voice, only when nothing else worked
Answered → confirmed
No answer · flagged for your team
Confirmed
Or rescheduled, or cancelled. Webhook to your system.
Integration
One API and webhooks. Live in days.
Create the appointment with one call. Get the answer back with another. No templates to get approved, no carriers to sign.
- REST with JSON and API keys
- SDKs for Node.js, Python, PHP, Java and .NET
- Signed webhooks
- Sandbox environment
- CSV import if you have no API yet
curl -X POST https://api.yesly.io/v1/appointments \
-H "Authorization: Bearer ysk_live_…" \
-H "Content-Type: application/json" \
-d '{
"external_id": "ORD-48213",
"type": "delivery",
"customer": { "name": "Martha", "phone": "+34612345678" },
"slot": { "start": "2026-11-13T09:00:00+01:00", "end": "2026-11-13T11:00:00+01:00" },
"metadata": { "order_id": "PV-18342", "route_id": "BIO-07" }
}'{
"id": "evt_5Hq1Kd",
"type": "appointment.confirmed",
"data": {
"appointment": {
"external_id": "ORD-48213",
"status": "confirmed",
"answer": { "channel": "whatsapp", "at": "2026-11-12T10:04:12+01:00" },
"metadata": { "order_id": "PV-18342", "route_id": "BIO-07" }
}
}
}Trust
We talk to your customers. We take that seriously.
Data stays in the EU
Processed and stored in European data centres.
GDPR, DPA included
We act as data processor, with a DPA for every customer.
Built on AWS
High availability, automatic backups, ISO 27001 and ENS.
Encrypted, signed webhooks
TLS everywhere, managed keys, every webhook signed.
Never at night
Never more than agreed. Your customer opts out in one message.
Nothing falls through
Every unanswered appointment is flagged for your team.