curl --request PATCH \
--url https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments/{appointment_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"start_at": "2023-11-07T05:31:56Z",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"status": "confirmed",
"email_notifications": true,
"sms_notifications": true,
"voice_notifications": true,
"run_automations": false
}
'const options = {
method: 'PATCH',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
start_at: '2023-11-07T05:31:56Z',
clinician_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
patient_notes: '<string>',
clinic_notes: '<string>',
symptoms_description: '<string>',
status: 'confirmed',
email_notifications: true,
sms_notifications: true,
voice_notifications: true,
run_automations: false
})
};
fetch('https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments/{appointment_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments/{appointment_id}"
payload = {
"start_at": "2023-11-07T05:31:56Z",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"status": "confirmed",
"email_notifications": True,
"sms_notifications": True,
"voice_notifications": True,
"run_automations": False
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "scheduled",
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"service_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_at": "2023-11-07T05:31:56Z",
"end_at": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"timezone": "<string>",
"venue_type": "physical",
"venue_details": {},
"booking_source": "<string>",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"urgency_level": "low",
"ai_category": "<string>",
"ai_priority_score": 123,
"ai_suggested_duration": 123,
"predicted_show_probability": 123,
"confirmation_sent_at": "2023-11-07T05:31:56Z",
"confirmation_method": "<string>",
"reminder_sent_at": "2023-11-07T05:31:56Z",
"reminder_method": "<string>",
"reminder_sent": true,
"payment_status": "pending",
"payment_method": "<string>",
"payment_amount": 123,
"payment_due_date": "2023-12-25",
"amount_paid": 123,
"payment_id": "<string>",
"confirmation_code": "<string>",
"cancellation_reason": "<string>",
"cancelled_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"is_group_appointment": true,
"max_participants": 123,
"group_name": "<string>",
"recurrence_pattern_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"series_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"series_index": 123,
"email_notifications": true,
"sms_notifications": true,
"voice_notifications": true,
"notes_session_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"class_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"self_reschedule_count": 123,
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"participants": [
{
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}Update an appointment
Permission: appointments:write
Reschedule or update an appointment. Immutable after create — patient_id, service_id, location_id, every payment field — are refused if sent.
A new start_at or clinician_id is checked exactly as a new booking is (the slot must be free and the clinician bookable). Other fields are plain edits; an absent field is unchanged. status may only move to confirmed here; use the cancel route to cancel. A cancelled, completed or no-show appointment cannot be changed. With a test key, rescheduling is not available: cancel the sandbox appointment and book a new one.
curl --request PATCH \
--url https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments/{appointment_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"start_at": "2023-11-07T05:31:56Z",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"status": "confirmed",
"email_notifications": true,
"sms_notifications": true,
"voice_notifications": true,
"run_automations": false
}
'const options = {
method: 'PATCH',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
start_at: '2023-11-07T05:31:56Z',
clinician_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
patient_notes: '<string>',
clinic_notes: '<string>',
symptoms_description: '<string>',
status: 'confirmed',
email_notifications: true,
sms_notifications: true,
voice_notifications: true,
run_automations: false
})
};
fetch('https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments/{appointment_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments/{appointment_id}"
payload = {
"start_at": "2023-11-07T05:31:56Z",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"status": "confirmed",
"email_notifications": True,
"sms_notifications": True,
"voice_notifications": True,
"run_automations": False
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "scheduled",
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"service_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_at": "2023-11-07T05:31:56Z",
"end_at": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"timezone": "<string>",
"venue_type": "physical",
"venue_details": {},
"booking_source": "<string>",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"urgency_level": "low",
"ai_category": "<string>",
"ai_priority_score": 123,
"ai_suggested_duration": 123,
"predicted_show_probability": 123,
"confirmation_sent_at": "2023-11-07T05:31:56Z",
"confirmation_method": "<string>",
"reminder_sent_at": "2023-11-07T05:31:56Z",
"reminder_method": "<string>",
"reminder_sent": true,
"payment_status": "pending",
"payment_method": "<string>",
"payment_amount": 123,
"payment_due_date": "2023-12-25",
"amount_paid": 123,
"payment_id": "<string>",
"confirmation_code": "<string>",
"cancellation_reason": "<string>",
"cancelled_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"is_group_appointment": true,
"max_participants": 123,
"group_name": "<string>",
"recurrence_pattern_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"series_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"series_index": 123,
"email_notifications": true,
"sms_notifications": true,
"voice_notifications": true,
"notes_session_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"class_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"self_reschedule_count": 123,
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"participants": [
{
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
A unique value you choose for this request, such as a UUID. Sending the same key again returns the first answer instead of doing the work twice, so a timed-out request is safe to retry. Reusing a key for a different request is refused with 409 idempotency_key_conflict, and retrying while the first request is still running with 409 idempotency_key_reused. See Retries and idempotency.
1Body
Immutable after create, and refused if sent: patient_id, service_id, location_id, every payment field.
Present ⇒ reschedule, re-validated against availability/out-of-office/double-booking.
physical, online, mobile_clinic low, normal, high, emergency The only status this route may set.
confirmed Absent ≠ null — no notify_patient shorthand on update.
Response
OK.
Never present here, by name: client_appointment_date/client_start_time/ client_end_time/client_timezone, form_data, custom_color, provider_user_id, time_range, excluded_from_overlap_check, booking_identity_review, provider_busy_minutes, out_of_office_confirmed_at, booking_confirmation_deferred, clinic_id.
Show child attributes
Show child attributes