curl --request PATCH \
--url https://app.hipp.health/api/v1/sessions/{sessionId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"technicianId": "usr_tech123",
"clientId": "usr_client789",
"clinicianId": "usr_clin456",
"date": "2026-01-05",
"startTime": "09:00",
"endTime": "10:00",
"timezone": "America/New_York",
"locationId": "loc_1a2b3c",
"providerLocationId": "loc_9x8y7z",
"services": "svc_1a2b3c",
"nonBillableCodeId": "nbc_1a2b3c",
"isTelehealth": true,
"isSupervision": true,
"isClientPresent": true,
"title": "<string>"
}
'import requests
url = "https://app.hipp.health/api/v1/sessions/{sessionId}"
payload = {
"technicianId": "usr_tech123",
"clientId": "usr_client789",
"clinicianId": "usr_clin456",
"date": "2026-01-05",
"startTime": "09:00",
"endTime": "10:00",
"timezone": "America/New_York",
"locationId": "loc_1a2b3c",
"providerLocationId": "loc_9x8y7z",
"services": "svc_1a2b3c",
"nonBillableCodeId": "nbc_1a2b3c",
"isTelehealth": True,
"isSupervision": True,
"isClientPresent": True,
"title": "<string>"
}
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({
technicianId: 'usr_tech123',
clientId: 'usr_client789',
clinicianId: 'usr_clin456',
date: '2026-01-05',
startTime: '09:00',
endTime: '10:00',
timezone: 'America/New_York',
locationId: 'loc_1a2b3c',
providerLocationId: 'loc_9x8y7z',
services: 'svc_1a2b3c',
nonBillableCodeId: 'nbc_1a2b3c',
isTelehealth: true,
isSupervision: true,
isClientPresent: true,
title: '<string>'
})
};
fetch('https://app.hipp.health/api/v1/sessions/{sessionId}', 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://app.hipp.health/api/v1/sessions/{sessionId}",
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([
'technicianId' => 'usr_tech123',
'clientId' => 'usr_client789',
'clinicianId' => 'usr_clin456',
'date' => '2026-01-05',
'startTime' => '09:00',
'endTime' => '10:00',
'timezone' => 'America/New_York',
'locationId' => 'loc_1a2b3c',
'providerLocationId' => 'loc_9x8y7z',
'services' => 'svc_1a2b3c',
'nonBillableCodeId' => 'nbc_1a2b3c',
'isTelehealth' => true,
'isSupervision' => true,
'isClientPresent' => true,
'title' => '<string>'
]),
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://app.hipp.health/api/v1/sessions/{sessionId}"
payload := strings.NewReader("{\n \"technicianId\": \"usr_tech123\",\n \"clientId\": \"usr_client789\",\n \"clinicianId\": \"usr_clin456\",\n \"date\": \"2026-01-05\",\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\",\n \"timezone\": \"America/New_York\",\n \"locationId\": \"loc_1a2b3c\",\n \"providerLocationId\": \"loc_9x8y7z\",\n \"services\": \"svc_1a2b3c\",\n \"nonBillableCodeId\": \"nbc_1a2b3c\",\n \"isTelehealth\": true,\n \"isSupervision\": true,\n \"isClientPresent\": true,\n \"title\": \"<string>\"\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://app.hipp.health/api/v1/sessions/{sessionId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"technicianId\": \"usr_tech123\",\n \"clientId\": \"usr_client789\",\n \"clinicianId\": \"usr_clin456\",\n \"date\": \"2026-01-05\",\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\",\n \"timezone\": \"America/New_York\",\n \"locationId\": \"loc_1a2b3c\",\n \"providerLocationId\": \"loc_9x8y7z\",\n \"services\": \"svc_1a2b3c\",\n \"nonBillableCodeId\": \"nbc_1a2b3c\",\n \"isTelehealth\": true,\n \"isSupervision\": true,\n \"isClientPresent\": true,\n \"title\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.hipp.health/api/v1/sessions/{sessionId}")
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 \"technicianId\": \"usr_tech123\",\n \"clientId\": \"usr_client789\",\n \"clinicianId\": \"usr_clin456\",\n \"date\": \"2026-01-05\",\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\",\n \"timezone\": \"America/New_York\",\n \"locationId\": \"loc_1a2b3c\",\n \"providerLocationId\": \"loc_9x8y7z\",\n \"services\": \"svc_1a2b3c\",\n \"nonBillableCodeId\": \"nbc_1a2b3c\",\n \"isTelehealth\": true,\n \"isSupervision\": true,\n \"isClientPresent\": true,\n \"title\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"publicId": "apt_1a2b3c4d5e",
"title": "John Doe — Adaptive behavior treatment",
"status": "CONFIRMED",
"startTime": "2026-01-05T14:00:00.000Z",
"endTime": "2026-01-05T15:00:00.000Z",
"isSupervision": false,
"isClientPresent": true,
"placeOfService": "TELEHEALTH_PROVIDED_ELSEWHERE",
"locationId": "loc_1a2b3c",
"technicianId": "usr_tech123",
"clientId": "usr_client789",
"isBillable": true,
"isTelehealth": false,
"clinicianId": "usr_clin456",
"providerLocationId": "loc_9f8e7d",
"services": "svc_1a2b3c"
}{
"error": "Cannot modify or delete a session that has encounters.",
"statusCode": 400
}{
"error": "API key required",
"statusCode": 401
}{
"error": "Access denied",
"statusCode": 403
}{
"error": "Session not found",
"statusCode": 404
}{
"error": "Method not allowed",
"statusCode": 405
}Update Session
Partially update a session (appointment) by its public id, scoped to the authenticated organization. Any subset of fields may be sent; each is overlaid on the stored session and the MERGED final state is validated with the exact same rules as create. Time changes require date, startTime, endTime and timezone together.
curl --request PATCH \
--url https://app.hipp.health/api/v1/sessions/{sessionId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"technicianId": "usr_tech123",
"clientId": "usr_client789",
"clinicianId": "usr_clin456",
"date": "2026-01-05",
"startTime": "09:00",
"endTime": "10:00",
"timezone": "America/New_York",
"locationId": "loc_1a2b3c",
"providerLocationId": "loc_9x8y7z",
"services": "svc_1a2b3c",
"nonBillableCodeId": "nbc_1a2b3c",
"isTelehealth": true,
"isSupervision": true,
"isClientPresent": true,
"title": "<string>"
}
'import requests
url = "https://app.hipp.health/api/v1/sessions/{sessionId}"
payload = {
"technicianId": "usr_tech123",
"clientId": "usr_client789",
"clinicianId": "usr_clin456",
"date": "2026-01-05",
"startTime": "09:00",
"endTime": "10:00",
"timezone": "America/New_York",
"locationId": "loc_1a2b3c",
"providerLocationId": "loc_9x8y7z",
"services": "svc_1a2b3c",
"nonBillableCodeId": "nbc_1a2b3c",
"isTelehealth": True,
"isSupervision": True,
"isClientPresent": True,
"title": "<string>"
}
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({
technicianId: 'usr_tech123',
clientId: 'usr_client789',
clinicianId: 'usr_clin456',
date: '2026-01-05',
startTime: '09:00',
endTime: '10:00',
timezone: 'America/New_York',
locationId: 'loc_1a2b3c',
providerLocationId: 'loc_9x8y7z',
services: 'svc_1a2b3c',
nonBillableCodeId: 'nbc_1a2b3c',
isTelehealth: true,
isSupervision: true,
isClientPresent: true,
title: '<string>'
})
};
fetch('https://app.hipp.health/api/v1/sessions/{sessionId}', 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://app.hipp.health/api/v1/sessions/{sessionId}",
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([
'technicianId' => 'usr_tech123',
'clientId' => 'usr_client789',
'clinicianId' => 'usr_clin456',
'date' => '2026-01-05',
'startTime' => '09:00',
'endTime' => '10:00',
'timezone' => 'America/New_York',
'locationId' => 'loc_1a2b3c',
'providerLocationId' => 'loc_9x8y7z',
'services' => 'svc_1a2b3c',
'nonBillableCodeId' => 'nbc_1a2b3c',
'isTelehealth' => true,
'isSupervision' => true,
'isClientPresent' => true,
'title' => '<string>'
]),
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://app.hipp.health/api/v1/sessions/{sessionId}"
payload := strings.NewReader("{\n \"technicianId\": \"usr_tech123\",\n \"clientId\": \"usr_client789\",\n \"clinicianId\": \"usr_clin456\",\n \"date\": \"2026-01-05\",\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\",\n \"timezone\": \"America/New_York\",\n \"locationId\": \"loc_1a2b3c\",\n \"providerLocationId\": \"loc_9x8y7z\",\n \"services\": \"svc_1a2b3c\",\n \"nonBillableCodeId\": \"nbc_1a2b3c\",\n \"isTelehealth\": true,\n \"isSupervision\": true,\n \"isClientPresent\": true,\n \"title\": \"<string>\"\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://app.hipp.health/api/v1/sessions/{sessionId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"technicianId\": \"usr_tech123\",\n \"clientId\": \"usr_client789\",\n \"clinicianId\": \"usr_clin456\",\n \"date\": \"2026-01-05\",\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\",\n \"timezone\": \"America/New_York\",\n \"locationId\": \"loc_1a2b3c\",\n \"providerLocationId\": \"loc_9x8y7z\",\n \"services\": \"svc_1a2b3c\",\n \"nonBillableCodeId\": \"nbc_1a2b3c\",\n \"isTelehealth\": true,\n \"isSupervision\": true,\n \"isClientPresent\": true,\n \"title\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.hipp.health/api/v1/sessions/{sessionId}")
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 \"technicianId\": \"usr_tech123\",\n \"clientId\": \"usr_client789\",\n \"clinicianId\": \"usr_clin456\",\n \"date\": \"2026-01-05\",\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\",\n \"timezone\": \"America/New_York\",\n \"locationId\": \"loc_1a2b3c\",\n \"providerLocationId\": \"loc_9x8y7z\",\n \"services\": \"svc_1a2b3c\",\n \"nonBillableCodeId\": \"nbc_1a2b3c\",\n \"isTelehealth\": true,\n \"isSupervision\": true,\n \"isClientPresent\": true,\n \"title\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"publicId": "apt_1a2b3c4d5e",
"title": "John Doe — Adaptive behavior treatment",
"status": "CONFIRMED",
"startTime": "2026-01-05T14:00:00.000Z",
"endTime": "2026-01-05T15:00:00.000Z",
"isSupervision": false,
"isClientPresent": true,
"placeOfService": "TELEHEALTH_PROVIDED_ELSEWHERE",
"locationId": "loc_1a2b3c",
"technicianId": "usr_tech123",
"clientId": "usr_client789",
"isBillable": true,
"isTelehealth": false,
"clinicianId": "usr_clin456",
"providerLocationId": "loc_9f8e7d",
"services": "svc_1a2b3c"
}{
"error": "Cannot modify or delete a session that has encounters.",
"statusCode": 400
}{
"error": "API key required",
"statusCode": 401
}{
"error": "Access denied",
"statusCode": 403
}{
"error": "Session not found",
"statusCode": 404
}{
"error": "Method not allowed",
"statusCode": 405
}Update Session
Partially update a single session (appointment) by its public id, scoped to the organization that owns the API key. All referenced entities (staff, client, clinician, location, provider location, non-billable code, service lines) must belong to that organization.Headers
Authorization: Bearer <your-api-key>
Content-Type: application/json
Merge-then-validate
A PATCH is a partial update. Every field you send is overlaid on the stored session, and the resulting merged state is validated with the exact same rules as create. A PATCH can therefore never leave a session in a shape that create would reject.- Omit a field to leave it unchanged.
- Send
nullfor a nullable reference (clientId,clinicianId,providerLocationId,nonBillableCodeId) to clear it. servicesreplaces the current service. Sendnullto make the session non-billable — you must then also providenonBillableCodeId.
- Billable (merged state has
services):clientIdandclinicianIdmust be present, and it is mutually exclusive withnonBillableCodeId. - Non-billable (merged state has
nonBillableCodeId): mutually exclusive withservices; supervision requiresclinicianId, while a standard (non-supervision) non-billable session must not have aclinicianId. - Telehealth: allowed only on billable sessions and requires
providerLocationId.
Frozen sessions
A session that already has recorded clinical work cannot be edited (nor deleted), mirroring the calendar. Any of the following freezes the session and makes a PATCH return400:
- a non-archived encounter,
- a non-archived note (activity),
- a completed cancellation.
Time fields
To change the time, senddate, startTime, endTime and timezone together. Sending only some of them is rejected with 400 (To change the time, provide date, startTime, endTime and timezone together.). When all four are provided, they are combined into UTC instants:
date—YYYY-MM-DD, a real calendar date.startTime/endTime—HH:mmorHH:mm:ss.endTimemust be afterstartTime, and the total duration must not exceed 8 hours.timezone— IANA zone (for exampleAmerica/New_York).
Session status
status changes the scheduling status of the session.
- Allowed values:
CONFIRMED,UNCONFIRMED,DECLINED,PATIENT_NO_SHOW,REQUESTED_TO_CANCEL. - Omit
statusto leave the stored value unchanged, so a patch of unrelated fields never re-confirms a session that was declined or marked a no-show. Unlike create, there is no default on update. - Values are matched exactly (uppercase). Any other value returns a
400. - The response includes the session’s current
statusafter the update.
Success Response (200)
Returns the updated session in the same discriminated shape as create and get — billable sessions exposeisBillable: true, isTelehealth, clinicianId, providerLocationId and services; non-billable sessions expose isBillable: false and nonBillableCode instead.
{
"publicId": "apt_1a2b3c4d5e",
"title": "John Doe — Adaptive behavior treatment",
"status": "CONFIRMED",
"startTime": "2026-01-05T14:00:00.000Z",
"endTime": "2026-01-05T15:00:00.000Z",
"isSupervision": false,
"isClientPresent": true,
"placeOfService": "HOME",
"locationId": "loc_1a2b3c",
"technicianId": "usr_tech123",
"clientId": "usr_client789",
"isBillable": true,
"isTelehealth": false,
"clinicianId": "usr_clin456",
"providerLocationId": "loc_9f8e7d",
"services": "svc_1a2b3c"
}
Error Responses
400 - Bad Request
Returned when the session is frozen (it has a non-archived encounter, a non-archived note, or a completed cancellation), when the merged state violates a validation rule (billable/non-billable requirements, telehealth without a provider location,endTime not after startTime, total duration over 8 hours compared at second precision, an invalid calendar date, place of service not allowed by a service line, a technicianId whose role cannot deliver a session, a clientId that is not a patient, a clinicianId that is not a clinical role, or a technician on a non-technician service line), or when a referenced entity does not exist in the organization.
Business-rule rejections — a frozen session, or a merged state that violates a billable/non-billable, telehealth, time, place-of-service, staff-role or referenced-entity rule — are returned as a plain error (no validation list):
{
"error": "Cannot modify or delete a session that has encounters.",
"statusCode": 400
}
null) is returned as a validation list instead (each path is an array of segments):
{
"message": "Validation Error",
"statusCode": 400,
"validationErrors": [
{
"code": "custom",
"path": ["date"],
"message": "To change the time, provide date, startTime, endTime and timezone together."
}
]
}
401 - Unauthorized
{
"error": "API key required",
"statusCode": 401
}
403 - Forbidden
{
"error": "Access denied",
"statusCode": 403
}
404 - Not Found
{
"error": "Session not found",
"statusCode": 404
}
Examples
Reschedule a session (cURL)
curl -X PATCH "https://app.hipp.health/api/v1/sessions/apt_1a2b3c4d5e" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-01-06",
"startTime": "13:00",
"endTime": "14:00",
"timezone": "America/New_York"
}'
Convert a billable session to non-billable (cURL)
curl -X PATCH "https://app.hipp.health/api/v1/sessions/apt_1a2b3c4d5e" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"services": null,
"clinicianId": null,
"nonBillableCodeId": "nbc_1a2b3c"
}'
JavaScript Example
const updateSession = async (sessionId, patch) => {
const response = await fetch(
`https://app.hipp.health/api/v1/sessions/${sessionId}`,
{
method: "PATCH",
headers: {
Authorization: "Bearer your-api-key",
"Content-Type": "application/json",
},
body: JSON.stringify(patch),
}
);
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || error.message || "Failed to update session");
}
return response.json();
};
// Usage
try {
const session = await updateSession("apt_1a2b3c4d5e", {
title: "Renamed session",
isClientPresent: true,
});
console.log("Updated session:", session);
} catch (error) {
console.error("Error updating session:", error.message);
}
Authorizations
API key authentication. Include your API key in the Authorization header as 'Bearer '
Path Parameters
Session public identifier
1Body
Partial update for a single session. Any subset of fields may be sent; each is overlaid on the stored session and the MERGED final state is validated with the exact same rules as create, so a PATCH can never leave a session in a shape create would reject. Nullable reference fields (clientId, clinicianId, providerLocationId, nonBillableCodeId) accept null to clear the reference; omit a field to leave it unchanged. Time changes require date, startTime, endTime and timezone together.
Public id of the staff member delivering the session. Must be a staff role (TECHNICIAN, CLINICIAN, CLINICAL_ADMIN or CLINICAL_SUPERADMIN). A TECHNICIAN can only be assigned to technician-only service lines.
1"usr_tech123"
Public id of the client. Must reference a patient. Send null to clear. Required on the merged state when the session is billable.
1"usr_client789"
Public id of the clinician. Must reference a clinician or clinical admin. Send null to clear. Required on the merged state for billable sessions and for non-billable supervision sessions.
1"usr_clin456"
Calendar date (YYYY-MM-DD). Must be a real calendar date. Provide together with startTime, endTime and timezone to change the time.
^\d{4}-\d{2}-\d{2}$"2026-01-05"
Wall-clock start time (HH:mm or HH:mm:ss). Only applied when date, startTime, endTime and timezone are all sent together.
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$"09:00"
Wall-clock end time (HH:mm or HH:mm:ss). Must be after startTime, and the total duration must not exceed 8 hours.
^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$"10:00"
IANA timezone used to interpret date/startTime/endTime.
1"America/New_York"
Public id of the session location.
1"loc_1a2b3c"
Public id of the location the provider delivers from. Send null to clear. Required on the merged state when isTelehealth is true.
1"loc_9x8y7z"
Public id of the billable service line. Replaces the current service. Send null to clear it (making the merged session non-billable, which then requires nonBillableCodeId); omit to leave it unchanged.
1"svc_1a2b3c"
Public id of the non-billable code. Send null to clear. Mutually exclusive with a billable (services) merged state.
1"nbc_1a2b3c"
CMS place-of-service classification for the session
TELEHEALTH_PROVIDED_ELSEWHERE, TELEHEALTH_PROVIDED_IN_PATIENT_HOME, OFFICE, HOME, SCHOOL, OTHER, TEMPORARY_LODGING, PLACE_OF_EMPLOYMENT, COMMUNITY_MENTAL_HEALTH_CENTER Whether the session is delivered via telehealth. Only allowed on billable sessions and requires providerLocationId on the merged state.
Whether the session is a supervision session. For non-billable supervision, clinicianId is required on the merged state.
Whether the client is present for the session.
Custom title. When provided, replaces the stored title.
1New scheduling status for the session. Omit to leave the stored status unchanged, so a patch of unrelated fields never re-confirms a session that was declined or marked a no-show. Matched exactly (uppercase); any other value returns a 400.
CONFIRMED, UNCONFIRMED, DECLINED, PATIENT_NO_SHOW, REQUESTED_TO_CANCEL Response
Session updated
- Option 1
- Option 2
A scheduled session (appointment). The shape depends on isBillable: billable sessions expose isTelehealth, clinicianId and services; non-billable sessions expose nonBillableCode instead.
"apt_1a2b3c4d5e"
"John Doe — Adaptive behavior treatment"
Scheduling status of the session. Matched exactly (uppercase); any other value returns a 400.
CONFIRMED, UNCONFIRMED, DECLINED, PATIENT_NO_SHOW, REQUESTED_TO_CANCEL Session start instant in UTC (ISO-8601).
"2026-01-05T14:00:00.000Z"
Session end instant in UTC (ISO-8601).
"2026-01-05T15:00:00.000Z"
false
true
CMS place-of-service classification for the session
TELEHEALTH_PROVIDED_ELSEWHERE, TELEHEALTH_PROVIDED_IN_PATIENT_HOME, OFFICE, HOME, SCHOOL, OTHER, TEMPORARY_LODGING, PLACE_OF_EMPLOYMENT, COMMUNITY_MENTAL_HEALTH_CENTER Public id of the session location.
"loc_1a2b3c"
Public id of the assigned technician, if any.
"usr_tech123"
Public id of the client, if any.
"usr_client789"
Always true for billable sessions.
true false
Public id of the assigned clinician, if any.
"usr_clin456"
Public id of the provider location the care was delivered from, if any.
"loc_9f8e7d"
Public id of the billable service line rendered. A session bills exactly one service line.
"svc_1a2b3c"