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.
- 1
The call is handled
Your agent answers, books the appointment or takes the message, then hangs up.
- 2
The summary is built
Summary, intent, sentiment, call outcome and the caller’s contact details.
- 3
The delivery is signed
A JSON POST sealed with HMAC-SHA256, over HTTPS, with automatic retries if your server does not respond.
- 4
Your system receives it
The call summary lands in your tool. Nobody opened a dashboard.
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.
{
"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.
// 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)); }
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.
| Resource | What 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.