curl --request PATCH \
--url https://scribe-api.telepatia.ai/v1/appointments/{appointment_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "cancelled"
}
'import requests
url = "https://scribe-api.telepatia.ai/v1/appointments/{appointment_id}"
payload = { "status": "cancelled" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({status: 'cancelled'})
};
fetch('https://scribe-api.telepatia.ai/v1/appointments/{appointment_id}', 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/appointments/{appointment_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'status' => 'cancelled'
]),
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/appointments/{appointment_id}"
payload := strings.NewReader("{\n \"status\": \"cancelled\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://scribe-api.telepatia.ai/v1/appointments/{appointment_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"cancelled\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://scribe-api.telepatia.ai/v1/appointments/{appointment_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"cancelled\"\n}"
response = http.request(request)
puts response.read_body{
"appointmentType": "follow-up",
"consultationInternalId": "CONSULT-12345",
"createdAt": "2026-08-28T12:00:00.000Z",
"end": "2026-09-01T14:30:00.000Z",
"id": "apt_a1b2c3d4e5f6g7h8",
"minutesDuration": 30,
"reason": "Follow-up",
"serviceType": "cardiology",
"start": "2026-09-01T14:00:00.000Z",
"status": "booked"
}Update an appointment
Cancel a booking or mark it no-show, or repair a missed session link, by its public id (apt_…) or the consultationInternalId you sent at create. status accepts only cancelled or noshow (a booking is marked fulfilled only by the server when its session is created). scribeSessionId attaches the session whose id did not match the booking at create time, and marks it fulfilled. Provide exactly one of the two.
curl --request PATCH \
--url https://scribe-api.telepatia.ai/v1/appointments/{appointment_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "cancelled"
}
'import requests
url = "https://scribe-api.telepatia.ai/v1/appointments/{appointment_id}"
payload = { "status": "cancelled" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({status: 'cancelled'})
};
fetch('https://scribe-api.telepatia.ai/v1/appointments/{appointment_id}', 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/appointments/{appointment_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'status' => 'cancelled'
]),
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/appointments/{appointment_id}"
payload := strings.NewReader("{\n \"status\": \"cancelled\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://scribe-api.telepatia.ai/v1/appointments/{appointment_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"cancelled\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://scribe-api.telepatia.ai/v1/appointments/{appointment_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"cancelled\"\n}"
response = http.request(request)
puts response.read_body{
"appointmentType": "follow-up",
"consultationInternalId": "CONSULT-12345",
"createdAt": "2026-08-28T12:00:00.000Z",
"end": "2026-09-01T14:30:00.000Z",
"id": "apt_a1b2c3d4e5f6g7h8",
"minutesDuration": 30,
"reason": "Follow-up",
"serviceType": "cardiology",
"start": "2026-09-01T14:00:00.000Z",
"status": "booked"
}Authorizations
API key passed as a Bearer token
Path Parameters
Body
PATCH body. Provide exactly one of status or scribeSessionId.
status is limited to cancelled / noshow (a booking is fulfilled only by the
server when its session is created). scribeSessionId repairs a missed link:
attach the session (ss_) whose id did not match the booking at create time; the
booking then becomes fulfilled.
Set the booking to cancelled or noshow.
cancelled, noshow "cancelled"
Public id of the session to attach when it was not auto-linked at create time. Sets the link and marks the booking fulfilled.
^ss_[a-z0-9]{16}$"ss_a1b2c3d4e5f6g7h8"
Response
Successful Response
A single appointment. id is the stable public id (apt_...).
Stable public identifier.
"apt_a1b2c3d4e5f6g7h8"
"booked"
ISO-8601 timestamp when the appointment was created.
"CONSULT-12345"
"2026-09-01T14:00:00.000Z"
"2026-09-01T14:30:00.000Z"
30
"cardiology"
"follow-up"
"Follow-up"
"Routine check"