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.

  1. 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
  2. 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
  3. 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

1

WhatsApp

Sent the day before the appointment

Answers → confirmed

No reply in 2 h
2

SMS

Reaches any phone, no data needed

Answers → confirmed

No reply in 2 h
3

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
Read the API reference
1 · Create the appointment
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" }
  }'
2 · Receive the answer by webhook 200
{
  "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.