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>"
}Criar uma assinatura de webhook
Registra um webhook para receber notificações de eventos. A resposta inclui o signingSecret —mostrado apenas uma vez— usado para verificar o cabeçalho 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>"
}Autorizações
Chave de API enviada como token Bearer
Corpo
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 Resposta
Resposta bem-sucedida
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.