curl --request POST \
--url https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"service_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_at": "2023-11-07T05:31:56Z",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"venue_type": "physical",
"urgency_level": "normal",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"status": "scheduled",
"payment_amount": 123,
"payment_method": "<string>",
"payment_status": "pending",
"notify_patient": true,
"run_automations": false
}
'const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
patient_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
service_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
start_at: '2023-11-07T05:31:56Z',
clinician_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
location_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
venue_type: 'physical',
urgency_level: 'normal',
patient_notes: '<string>',
clinic_notes: '<string>',
symptoms_description: '<string>',
status: 'scheduled',
payment_amount: 123,
payment_method: '<string>',
payment_status: 'pending',
notify_patient: true,
run_automations: false
})
};
fetch('https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments', 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"
payload = {
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"service_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_at": "2023-11-07T05:31:56Z",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"venue_type": "physical",
"urgency_level": "normal",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"status": "scheduled",
"payment_amount": 123,
"payment_method": "<string>",
"payment_status": "pending",
"notify_patient": True,
"run_automations": False
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(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>"
}
]
}Book an appointment
Permission: appointments:write
Book an appointment — the same eligibility, out-of-office and double-booking rules as the app.
REQUIRED FOLLOW-UP: multi-service visit plans, package/deposit/discount redemption, default-document assignment and group appointments are NOT reproduced — a scope cut, not a bug.
curl --request POST \
--url https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"service_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_at": "2023-11-07T05:31:56Z",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"venue_type": "physical",
"urgency_level": "normal",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"status": "scheduled",
"payment_amount": 123,
"payment_method": "<string>",
"payment_status": "pending",
"notify_patient": true,
"run_automations": false
}
'const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
patient_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
service_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
start_at: '2023-11-07T05:31:56Z',
clinician_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
location_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
venue_type: 'physical',
urgency_level: 'normal',
patient_notes: '<string>',
clinic_notes: '<string>',
symptoms_description: '<string>',
status: 'scheduled',
payment_amount: 123,
payment_method: '<string>',
payment_status: 'pending',
notify_patient: true,
run_automations: false
})
};
fetch('https://api.clinikehr.com/v1/clinics/{clinic_id}/appointments', 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"
payload = {
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"service_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_at": "2023-11-07T05:31:56Z",
"clinician_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"venue_type": "physical",
"urgency_level": "normal",
"patient_notes": "<string>",
"clinic_notes": "<string>",
"symptoms_description": "<string>",
"status": "scheduled",
"payment_amount": 123,
"payment_method": "<string>",
"payment_status": "pending",
"notify_patient": True,
"run_automations": False
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(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.
1Path Parameters
Body
ISO 8601 WITH an explicit offset — a value with no offset is invalid_request, never a silent UTC/local guess.
Omit to let the pool pick a free, eligible clinician.
physical, online, mobile_clinic low, normal, high, emergency scheduled, confirmed pending, paid false sets email_notifications/sms_notifications/voice_notifications false on the row itself — a real, persistent setting, not a one-time suppression.
Default false suppresses the appointment.created/*.status Agent Studio dispatch.
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