curl --request GET \
--url https://api.maxcare.ai/v4/patient-tracking/snapshot \
--header 'Authorization: Bearer <token>' \
--header 'X-Organization-Id: <x-organization-id>'import requests
url = "https://api.maxcare.ai/v4/patient-tracking/snapshot"
headers = {
"X-Organization-Id": "<x-organization-id>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Organization-Id': '<x-organization-id>', Authorization: 'Bearer <token>'}
};
fetch('https://api.maxcare.ai/v4/patient-tracking/snapshot', 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://api.maxcare.ai/v4/patient-tracking/snapshot",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-Organization-Id: <x-organization-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.maxcare.ai/v4/patient-tracking/snapshot"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Organization-Id", "<x-organization-id>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.maxcare.ai/v4/patient-tracking/snapshot")
.header("X-Organization-Id", "<x-organization-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maxcare.ai/v4/patient-tracking/snapshot")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Organization-Id"] = '<x-organization-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"code": "success",
"data": {
"sourceId": "pts_00000000000040008000000000000001",
"instanceId": "ins_00000000000040008000000000000002",
"ehr": "modmed",
"date": "2026-10-16",
"timezone": "America/New_York",
"rows": [
{
"trackingKey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"recordKind": "modmed_appointment",
"nativeId": "90001",
"patientDisplay": {
"initials": "JD",
"gender": "F"
},
"facility": {
"externalId": "101",
"name": "Main Street Clinic"
},
"providers": {
"primary": {
"externalId": "2001",
"name": "Dana Example",
"source": "visit_physician"
},
"attendees": [
{
"externalId": "2002",
"name": "Pat Example",
"role": "SECONDARY_PROVIDER"
}
]
},
"appointment": {
"scheduledStart": "2026-10-16T13:00:00.000Z",
"durationMinutes": 15,
"type": "Follow-up",
"color": "#33aa55",
"nativeStatus": "ARRIVED",
"normalizedStatus": "arrived"
},
"officeFlow": {
"status": "WITH_STAFF",
"label": "With Staff",
"color": "#ffaa00"
},
"effectiveStatus": {
"value": "WITH_STAFF",
"source": "office_flow"
},
"room": {
"value": "WITH_STAFF",
"source": "office_flow"
},
"checkInTime": "2026-10-16T12:55:00.000Z",
"arrivalTime": null,
"timeInStatus": {
"value": 12,
"unit": "unknown"
},
"patient": {
"nativePatientId": "50001",
"firstName": "Jane",
"lastName": "Doe",
"dateOfBirth": "1980-01-01",
"mrn": "MRN-1",
"sex": null,
"gender": "F"
},
"contact": {
"phone": "5555550100",
"email": "jane@example.com"
},
"visitDetails": {
"chiefComplaint": "Rash",
"paymentMethod": null
},
"insurance": {
"primaryInsuranceName": "Example Health",
"copayAmount": 25
}
}
],
"counts": {
"returned": 12,
"seenAppointments": 12,
"scheduledAppointments": 40,
"scope": {
"returned": "filtered_rows",
"seenAppointments": "selected_facilities_and_providers",
"scheduledAppointments": "selected_facilities"
}
},
"freshness": {
"readStartedAt": "2026-10-16T14:00:00.000Z",
"readCompletedAt": "2026-10-16T14:00:01.000Z",
"snapshotId": "0123456789abcdef.7",
"state": "fresh",
"maxUsableAgeSeconds": 60
},
"completeness": {
"primary": "complete",
"officeFlow": "complete",
"colors": "complete",
"warnings": [
{
"code": "colors_unavailable",
"component": "colors"
}
]
},
"access": {
"granted": [
"patient"
],
"requested": [
"patient"
]
}
}
}{
"code": "bad_request",
"message": "'id' must be a valid UUID",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "unauthorized",
"message": "Invalid or missing API key",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "forbidden",
"message": "Insufficient scope",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "not_found",
"message": "Resource not found",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Maximum 1000 requests per 60 seconds.",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "server_unresponsive",
"message": "EHR integration is not available for this note",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}Read the tracking board
Whole-day tracking rows for the selected facilities, with counts, freshness and completeness. Poll at the source’s recommendedPollIntervalSeconds. A snapshot that cannot be read completely is served stale while a recent complete one exists, otherwise 503 snapshot_unavailable with Retry-After. Expansions need extra scopes (see include); a denied expansion is a 403, never an omission.
curl --request GET \
--url https://api.maxcare.ai/v4/patient-tracking/snapshot \
--header 'Authorization: Bearer <token>' \
--header 'X-Organization-Id: <x-organization-id>'import requests
url = "https://api.maxcare.ai/v4/patient-tracking/snapshot"
headers = {
"X-Organization-Id": "<x-organization-id>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Organization-Id': '<x-organization-id>', Authorization: 'Bearer <token>'}
};
fetch('https://api.maxcare.ai/v4/patient-tracking/snapshot', 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://api.maxcare.ai/v4/patient-tracking/snapshot",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-Organization-Id: <x-organization-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.maxcare.ai/v4/patient-tracking/snapshot"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Organization-Id", "<x-organization-id>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.maxcare.ai/v4/patient-tracking/snapshot")
.header("X-Organization-Id", "<x-organization-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maxcare.ai/v4/patient-tracking/snapshot")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Organization-Id"] = '<x-organization-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"code": "success",
"data": {
"sourceId": "pts_00000000000040008000000000000001",
"instanceId": "ins_00000000000040008000000000000002",
"ehr": "modmed",
"date": "2026-10-16",
"timezone": "America/New_York",
"rows": [
{
"trackingKey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"recordKind": "modmed_appointment",
"nativeId": "90001",
"patientDisplay": {
"initials": "JD",
"gender": "F"
},
"facility": {
"externalId": "101",
"name": "Main Street Clinic"
},
"providers": {
"primary": {
"externalId": "2001",
"name": "Dana Example",
"source": "visit_physician"
},
"attendees": [
{
"externalId": "2002",
"name": "Pat Example",
"role": "SECONDARY_PROVIDER"
}
]
},
"appointment": {
"scheduledStart": "2026-10-16T13:00:00.000Z",
"durationMinutes": 15,
"type": "Follow-up",
"color": "#33aa55",
"nativeStatus": "ARRIVED",
"normalizedStatus": "arrived"
},
"officeFlow": {
"status": "WITH_STAFF",
"label": "With Staff",
"color": "#ffaa00"
},
"effectiveStatus": {
"value": "WITH_STAFF",
"source": "office_flow"
},
"room": {
"value": "WITH_STAFF",
"source": "office_flow"
},
"checkInTime": "2026-10-16T12:55:00.000Z",
"arrivalTime": null,
"timeInStatus": {
"value": 12,
"unit": "unknown"
},
"patient": {
"nativePatientId": "50001",
"firstName": "Jane",
"lastName": "Doe",
"dateOfBirth": "1980-01-01",
"mrn": "MRN-1",
"sex": null,
"gender": "F"
},
"contact": {
"phone": "5555550100",
"email": "jane@example.com"
},
"visitDetails": {
"chiefComplaint": "Rash",
"paymentMethod": null
},
"insurance": {
"primaryInsuranceName": "Example Health",
"copayAmount": 25
}
}
],
"counts": {
"returned": 12,
"seenAppointments": 12,
"scheduledAppointments": 40,
"scope": {
"returned": "filtered_rows",
"seenAppointments": "selected_facilities_and_providers",
"scheduledAppointments": "selected_facilities"
}
},
"freshness": {
"readStartedAt": "2026-10-16T14:00:00.000Z",
"readCompletedAt": "2026-10-16T14:00:01.000Z",
"snapshotId": "0123456789abcdef.7",
"state": "fresh",
"maxUsableAgeSeconds": 60
},
"completeness": {
"primary": "complete",
"officeFlow": "complete",
"colors": "complete",
"warnings": [
{
"code": "colors_unavailable",
"component": "colors"
}
]
},
"access": {
"granted": [
"patient"
],
"requested": [
"patient"
]
}
}
}{
"code": "bad_request",
"message": "'id' must be a valid UUID",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "unauthorized",
"message": "Invalid or missing API key",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "forbidden",
"message": "Insufficient scope",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "not_found",
"message": "Resource not found",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Maximum 1000 requests per 60 seconds.",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"code": "server_unresponsive",
"message": "EHR integration is not available for this note",
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}Authorizations
Marketplace API key
Headers
Target clinic organization ID
Query Parameters
Tracking source from GET /v4/patient-tracking/sources.
"pts_00000000000040008000000000000001"
Comma-separated native facility ids. ModMed requires exactly one; EZDerm providers are practice-wide and ignore it, but any id sent must belong to the source.
"101"
Comma-separated native provider ids, at most 100. Matches the primary provider on ModMed and any encounter role on EZDerm (see the source's capabilities.providerFilter). An id the source does not know is a 400.
"2001,2002"
Calendar day YYYY-MM-DD in the source's timezone. Defaults to today there. Future days are refused; EZDerm reads today only (capability_unsupported).
"2026-10-16"
Comma-separated row expansions: patient (read:patients), contact (read:patients and read:patient_pii), visitDetails (read:appointments), insurance (read:patients and read:insurance_policies). A requested expansion without every listed scope is a 403 include_not_permitted.
"patient,visitDetails"
