curl --request POST \
--url https://scribe-api.telepatia.ai/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"events": [
"scribe_session.created",
"scribe_session.completed",
"scribe_session.error"
],
"name": "Scribe prod webhook",
"url": "https://example.com/webhooks/scribe"
}
'import requests
url = "https://scribe-api.telepatia.ai/v1/webhooks"
payload = {
"events": ["scribe_session.created", "scribe_session.completed", "scribe_session.error"],
"name": "Scribe prod webhook",
"url": "https://example.com/webhooks/scribe"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
events: ['scribe_session.created', 'scribe_session.completed', 'scribe_session.error'],
name: 'Scribe prod webhook',
url: 'https://example.com/webhooks/scribe'
})
};
fetch('https://scribe-api.telepatia.ai/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scribe-api.telepatia.ai/v1/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'events' => [
'scribe_session.created',
'scribe_session.completed',
'scribe_session.error'
],
'name' => 'Scribe prod webhook',
'url' => 'https://example.com/webhooks/scribe'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://scribe-api.telepatia.ai/v1/webhooks"
payload := strings.NewReader("{\n \"events\": [\n \"scribe_session.created\",\n \"scribe_session.completed\",\n \"scribe_session.error\"\n ],\n \"name\": \"Scribe prod webhook\",\n \"url\": \"https://example.com/webhooks/scribe\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://scribe-api.telepatia.ai/v1/webhooks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"events\": [\n \"scribe_session.created\",\n \"scribe_session.completed\",\n \"scribe_session.error\"\n ],\n \"name\": \"Scribe prod webhook\",\n \"url\": \"https://example.com/webhooks/scribe\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://scribe-api.telepatia.ai/v1/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"events\": [\n \"scribe_session.created\",\n \"scribe_session.completed\",\n \"scribe_session.error\"\n ],\n \"name\": \"Scribe prod webhook\",\n \"url\": \"https://example.com/webhooks/scribe\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"url": "<string>",
"events": [
"scribe_session.created"
],
"isActive": true,
"signingSecret": "<string>",
"name": "<string>",
"event": "scribe_session.created",
"signingSecretPrefix": "<string>",
"signingSecretVersion": 123,
"createdAt": "<string>",
"updatedAt": "<string>",
"deletedAt": "<string>"
}Crear una suscripción de webhook
Registra un webhook para recibir notificaciones de eventos. La respuesta incluye el signingSecret —mostrado solo una vez— usado para verificar el encabezado X-Scribe-Api-Signature.
curl --request POST \
--url https://scribe-api.telepatia.ai/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"events": [
"scribe_session.created",
"scribe_session.completed",
"scribe_session.error"
],
"name": "Scribe prod webhook",
"url": "https://example.com/webhooks/scribe"
}
'import requests
url = "https://scribe-api.telepatia.ai/v1/webhooks"
payload = {
"events": ["scribe_session.created", "scribe_session.completed", "scribe_session.error"],
"name": "Scribe prod webhook",
"url": "https://example.com/webhooks/scribe"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
events: ['scribe_session.created', 'scribe_session.completed', 'scribe_session.error'],
name: 'Scribe prod webhook',
url: 'https://example.com/webhooks/scribe'
})
};
fetch('https://scribe-api.telepatia.ai/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scribe-api.telepatia.ai/v1/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'events' => [
'scribe_session.created',
'scribe_session.completed',
'scribe_session.error'
],
'name' => 'Scribe prod webhook',
'url' => 'https://example.com/webhooks/scribe'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://scribe-api.telepatia.ai/v1/webhooks"
payload := strings.NewReader("{\n \"events\": [\n \"scribe_session.created\",\n \"scribe_session.completed\",\n \"scribe_session.error\"\n ],\n \"name\": \"Scribe prod webhook\",\n \"url\": \"https://example.com/webhooks/scribe\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://scribe-api.telepatia.ai/v1/webhooks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"events\": [\n \"scribe_session.created\",\n \"scribe_session.completed\",\n \"scribe_session.error\"\n ],\n \"name\": \"Scribe prod webhook\",\n \"url\": \"https://example.com/webhooks/scribe\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://scribe-api.telepatia.ai/v1/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"events\": [\n \"scribe_session.created\",\n \"scribe_session.completed\",\n \"scribe_session.error\"\n ],\n \"name\": \"Scribe prod webhook\",\n \"url\": \"https://example.com/webhooks/scribe\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"url": "<string>",
"events": [
"scribe_session.created"
],
"isActive": true,
"signingSecret": "<string>",
"name": "<string>",
"event": "scribe_session.created",
"signingSecretPrefix": "<string>",
"signingSecretVersion": 123,
"createdAt": "<string>",
"updatedAt": "<string>",
"deletedAt": "<string>"
}Autorizaciones
Clave API enviada como token Bearer
Cuerpo
https endpoint that will receive event POSTs.
1 - 2083Optional human-readable label to identify this webhook in lists/UI. Trimmed server-side; a blank value stores no name.
100Event types to subscribe to (at least one). Preferred over event.
Webhook event types exposed to API clients.
Mirrors SynapseWebhookEventType enum in datalayer (camelCase) but
rendered to clients as snake_case dotted strings (closer to Stripe
convention and easier to grep in caller logs).
scribe_session.created, scribe_session.completed, scribe_session.error, scribe_session.updated, scribe_session.cancelled, scribe_session.deleted, appointment.fulfilled, appointment.cancelled Deprecated: a single event type. Use events. When set and events is omitted, it is saved as a one-element events list.
scribe_session.created, scribe_session.completed, scribe_session.error, scribe_session.updated, scribe_session.cancelled, scribe_session.deleted, appointment.fulfilled, appointment.cancelled Respuesta
Respuesta exitosa
Create response — carries the raw signing secret, shown exactly once.
Webhook event types exposed to API clients.
Mirrors SynapseWebhookEventType enum in datalayer (camelCase) but
rendered to clients as snake_case dotted strings (closer to Stripe
convention and easier to grep in caller logs).
scribe_session.created, scribe_session.completed, scribe_session.error, scribe_session.updated, scribe_session.cancelled, scribe_session.deleted, appointment.fulfilled, appointment.cancelled Raw HMAC signing secret. Shown once at creation — store it now; it is never retrievable again. Use it to verify the X-Scribe-Api-Signature header.
Optional human-readable label, or null if unset.
Deprecated: the first subscribed event (events[0]). Use events.
scribe_session.created, scribe_session.completed, scribe_session.error, scribe_session.updated, scribe_session.cancelled, scribe_session.deleted, appointment.fulfilled, appointment.cancelled Display hint for the signing secret (e.g. 'whsec_a1b2c3d4'). The raw secret is only returned at creation/rotation.