Webhooks & REST API

Your calls in your system, in real time

At the end of every call, Sylen sends the full call summary, caller, summary, appointment, message, to the address of your choice. Your CRM, your ERP or your automation receives it without anyone having to open a dashboard.

  • HMAC-signed webhooks
  • REST API & OpenAPI
  • No audio stored by Sylen
  • Log and replay

The journey

What happens after the hang-up

No sync to schedule, no file to fetch: the event goes out as soon as the call is processed, and it is sealed before it leaves.

The journey of a call: from the handset to your system, through the call summary built by Sylen and the signed delivery POST 1 · The call is handled the agent hangs up 2 · The summary is built summary, intent, outcome 3 · The delivery is signed HMAC-SHA256, timestamped 4 · Your system receives it CRM, ERP, automation
  1. 1

    The call is handled

    Your agent answers, books the appointment or takes the message, then hangs up.

  2. 2

    The summary is built

    Summary, intent, sentiment, call outcome and the caller’s contact details.

  3. 3

    The delivery is signed

    A JSON POST sealed with HMAC-SHA256, over HTTPS, with automatic retries if your server does not respond.

  4. 4

    Your system receives it

    The call summary lands in your tool. Nobody opened a dashboard.

Between the hang-up and the arrival in your tool, there is no export, no scheduled task, no human step, and if your server does not respond, Sylen comes back.

The content

What you receive

A stable, versioned object. The full transcript is attached only if you turn it on for the endpoint. By default, the payload stays light and carries only what matters.

Each event carries a unique ID in the Sylen-Event-Id header: on a retry, your system knows it is the same call and processes it only once.

POST https://your-system.com/webhooks/sylen
{
  "id": "evt_m8x2k4p9qz",
  "type": "call.completed",
  "api_version": "2026-08-28",
  "created_at": "2026-08-28T14:32:11Z",
  "livemode": true,
  "data": {
    "call_id": "7f3c…",
    "from": "+33612345678",
    "caller_name": "Camille Dupont",
    "to": "+33184606011",
    "started_at": "2026-08-28T14:30:37Z",
    "duration_seconds": 94,
    "status": "answered",
    "sentiment": "positive",
    "caller_intent": "booking",
    "tags": ["rdv_pris"],
    "summary": "Quote request for a bathroom remodel.
      On-site appointment set for Thursday at 2 p.m.",
    "dashboard_url": "https://app.sylen.ai/…"
  }
}

Seven triggers

Available events

Each endpoint subscribes to whatever it needs. You can set up several: one for your CRM, one for your automations, one for your team channel.

  • call.completed

    A call was handled. This is the full call summary, with the summary, the intent and the outcome.

  • call.missed

    A call was not answered.

  • call.transferred

    The agent passed the call to a human.

  • message.received

    The agent took a message.

  • appointment.created

    An appointment was booked.

  • appointment.updated

    An appointment was rescheduled.

  • appointment.cancelled

    An appointment was canceled.

In practice

Verify, then read back

Two steps, two pieces of code. On the left, you make sure the delivery really comes from Sylen. On the right, you go back and look up what happened.

Node.js verify the signature
// Header received: Sylen-Signature: t=…,v1=…
const crypto = require('crypto');

function verifier(corps, entete, secret) {
  const [t, v1] = entete.split(',')
    .map(p => p.split('=')[1]);

  // Replay: reject anything older than 5 minutes
  if (Math.abs(Date.now()/1000 - t) > 300)
    return false;

  const attendu = crypto
    .createHmac('sha256', secret)
    .update(`${t}.${corps}`)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(attendu), Buffer.from(v1));
}
GET /api/v1/calls
curl https://app.sylen.ai/api/v1/calls \
  -H "Authorization: Bearer sk_live_…" \
  -G --data-urlencode "since=2026-08-01"

# Response
{
  "object": "list",
  "data": [ { "id": "7f3c…", … } ],
  "has_more": true,
  "next_cursor": "7f3c…"
}

Read-only: calls, transcripts, appointments, messages and usage. Cursor pagination, 120 requests per minute per key.

Thirteen resources

Everything the API exposes

One key, one Authorization: Bearer header, and all of your phone activity becomes queryable. Cursor pagination, rate limit shown in every response, typed errors.

ResourceWhat it gives you
Your account
GET/v1/me What your key can do: account, plan, scopes, rate limits
GET/v1/agent Your agent’s configuration, so you can audit it
GET/v1/usage Your usage, so you can get an alert before going over
Calls
GET/v1/calls Calls, with summary, sentiment and outcome. expand=transcript attaches the full wording
GET/v1/calls/{id}/transcript The full transcript of a call
POST/v1/calls/{id}/tags Tag a call from your own tool (“quote sent”)
People and numbers
GET/v1/contacts Your callers directory, aggregated: frequency, appointments, latest sentiment
GET/v1/stats A daily series, ready to plug into your dashboard
Calendar and messages
GET/v1/appointments Appointments booked by the agent
GET/v1/availability Opening hours, booked time slots and free time slots for a given day
GETPATCH/v1/messages Messages taken, and a way to mark them as handled from your CRM
The webhooks themselves
GET/v1/events The event log, to catch up on a missed webhook
GETPOSTDELETE/v1/webhooks Set up your endpoints with a script

Public OpenAPI 3.1 specification at app.sylen.ai/api/v1/openapi: import it straight into Postman or Insomnia, or generate a client in your language, without writing a single line.

A test key returns demo data instead of yours. Your developer can build the integration before your very first call, without ever accessing your data.

What travels

Security and data

Sending call data out of a system is a serious decision. Here is exactly what travels, and what does not.

  • Every delivery is signed

    HMAC-SHA256 with a secret unique to your endpoint, timestamp included to block any replay. HTTPS required, no redirects followed.

  • No audio stored by Sylen

    No audio recording is kept, either by Sylen or by our voice provider, which does not keep transcripts either. In your space, only the transcript and the summary are kept, then deleted automatically after twelve months.

  • Nothing gets lost

    If your server does not respond, Sylen tries again: 1 min, 5 min, 30 min, 2 h, 6 h. The log keeps every attempt, and you can replay a delivery in one click.

No code needed

No developer? No problem

A webhook also plugs into everyday automation tools. Paste the URL your scenario gives you, check the events, and it is live. From there, you can feed a spreadsheet, a team channel, a CRM or an internal email without writing a line of code.

A “send a test” button in your settings: you see a real payload arrive without waiting for a real call.

A delivery log with the content sent, your server’s response and the HTTP code. You can debug without writing to us.

Available starting with the Pro plan

The call summary email is in every plan. Webhooks start at Pro.

Three endpoints on Pro, ten on Scale, custom on Enterprise, and the REST API comes with them. The call summary email is included from the very first minute, and the 30-day money-back guarantee covers your first month.

Next door

Keep exploring

Frequently asked questions

Call summaries, webhooks, recordings: what technical teams ask us.

Can the call summary leave Sylen automatically?

Yes. A call summary email is sent after every call on all plans. Starting with the Pro plan, a signed webhook pushes the full call summary to your own system, and a REST API lets you read it again at any time.

Does Sylen keep audio recordings of calls?

No. No audio recording is kept, either by Sylen or by our voice provider, which does not keep transcripts either. Only the transcript and the summary of each call are kept in a private space, then deleted automatically after twelve months (no transcript at all for healthcare professionals).

How do I verify that a webhook really comes from Sylen?

Each request carries a Sylen-Signature header containing a timestamp and an HMAC-SHA256 signature of the body, computed with your endpoint's secret. You recompute the signature on your side and reject requests that are too old.

Your calls, in your tools.

Each call summary reaches your CRM the second the call ends. Available from the Pro plan.