If you get stuck at any point and need assistance, please don’t hesitate to message us in our shared communication channel (eg. Slack) or contact Bryan at [email protected].
<aside>
❗ You need a client_id and client_secret to interact with the Cobalt API. You will also need an access_token for each user which can be obtained in through the Cobalt Link flow.
</aside>
The base URL to send all API requests is https://api.usecobalt.com/v1. HTTPS is required for all API requests.The API follows RESTful conventions when possible. Request and response bodies are encoded as JSON.
| Parameter | Type | Description |
|---|---|---|
| client_id | string | Your Cobalt API client id |
| client_secret | string | Your Cobalt API secret |
| access_token | string | The access token for the individual provider that was obtained during the Link flow |
Example request:
curl -X GET <https://api.usecobalt.com/v1/appointments\\>
-H 'Content-Type: application/json' \\
-H 'client_id: "%COBALT_CLIENT_ID%"' \\
-H 'client_secret: "%COBALT_CLIENT_SECRET%"' \\
-H 'access_token: "%USER_ACCESS_TOKEN%"' \\
-d '{
...
}'
The /appointments endpoint gets schedule data for a given clinic or provider.
| Parameter | Type | Required | Description |
|---|---|---|---|
| start_date | string | Yes | The start of the date range (ISO 8601 format) |
| end_date | string | Yes | The end of the date range (ISO 8601 format) |
| patient_mrn | string | No | The mrn of the the patient to filter appointments by. |
| patient_name | string | No | The name of the the patient to filter appointments by (case-insensitive, partial match) |
| patient_phone | string | No | The phone number of the the patient to filter appointments by. |
| include_note | string | No | Indicate whether progress notes should be included when available. Options are “true” or “false”. Default is “false” to reduce the transfer of PII when not needed. |
| appointment_mode | string | No | Filter by “office” or “telemedicine” appointments. Default is to include all appointments. |
Example request:
curl -X GET <https://api.usecobalt.com/v1/appointments> \\
-H 'Content-Type: application/json' \\
-H 'client_id: ci_live_198908HJDKJSH98789OHKJL' \\
-H 'client_secret: cs_live_9827hofdsklOYYHJLJh' \\
-H 'access_token: 493JKLHIU98789hLKH9HHJH' \\
-G \\
--data-urlencode "start_date=2024-03-14" \\
--data-urlencode "end_date=2024-04-14"
Example response:
{
"success": true,
"results": {
"appointments": [
{
"id": "2109607",
"datetime": "2024-03-14T00:00:00-07:00",
"duration": 15,
"ehr_appointment_id": "536444",
"appointment_mode": "office",
"appointment_type": "f/u",
"location": "54252",
"patient_name": "Jane Doe",
"patient_mrn": "414421",
"patient_dob": "1994-08-12",
"patient_phone": "222-333-4444",
"patient_gender": "female",
"insurance": "Blue Shield",
"insurance_subscriber": "John Doe",
"insurance_number": "19228934",
"insurance_group_number": "FDL992829qe",
"provider_ehr_id": "6644",
"provider_npi": "2453453453",
"status": "completed"
},
...
],
}
}
The /appointment/{id} endpoint get an individual appointment.
Example request:
curl -X GET <https://api.usecobalt.com/v1/appointments/1276397812> \\
-H 'Content-Type: application/json' \\
-H 'client_id: ci_live_198908HJDKJSH98789OHKJL' \\
-H 'client_secret: cs_live_9827hofdsklOYYHJLJh' \\
-H 'access_token: 493JKLHIU98789hLKH9HHJH'
Example response:
{
"success": true,
"appointments": {
"id": "1276397812",
"datetime": "2024-03-14T00:00:00-07:00",
"appointment_mode": "office",
"appointment_type": "f/u",
"location": "54252",
"patient_name": "Jane Doe",
"patient_mrn": "414421",
"patient_dob": "1994-08-12",
"patient_sex": "female",
"insurance": "Blue Shield",
"insurance_subscriber": "John Doe",
"insurance_number": "19228934",
"insurance_group_number": "FDL992829qe",
"provider_ehr_id": "6644",
"provider_npi": "2453453453",
"status": "completed"
}
}
The /appointments endpoint creates a new appointment for a patient.
| Parameter | Type | Required | Description |
|---|---|---|---|
| mrn | string | Yes, if patient_name empty. | The MRN of the patient. One of mrn/patient_name is required. |
| patient_name | string | Yes, if mrn empty. | The first and last name of the patient (eg. “Jane Doe”). One of mrn/patient_name is required. |
| location | string | Yes | The location of the visit. |
| datetime | string | Yes | The date of the visit in ISO 8601 format (eg. "2024-03-14T00:00:00-07:00"). |
| date | string | ——— | DEPRECATED. The date of the visit (ISO 8601 format). |
| time | string | ——— | DEPRECATED. The time of the visit (HH:MM AM/PM). |
| duration | string | No | Th duration of the visit in minutes. If not included, the duration will use the default value for the appointment type in the EHR. |
| provider | string | Yes | The provider for the visit. |
| type | string | Yes | See table below for definitions. Use value from table in your request. |
| note | string | No | This can be any text that you want added to the appointment (eg. a note on symptoms discussed with the patient over the phone). |
| reason | string | No | This can be any text that you want to use to describe the reason for the appointment. |
Visit Type Options for eCW
| Value | Definition |
|---|---|
| bh pre-adm | Behavioral Health Pre-Admission |
| bh visit | Behavioral Health Admission & Treatment |
| f/u | Follow Up Visit |
| hosp | Hospital Follow up |
| hss | Home Sleep Study |
| mask | Mask Fitting |
| np | New Patient |
| nv | Nurse Visit |
| ovp | Overnight Pulse |
| pdr | PFT Dr Appointment |
| pft | Pulmonary Function Test |
| sk | SickLine |
| telephone | Televisit Phone |
| televisit | Televisit |
| televisit1 | Televisit / OSA |
| televisit2 | Televisit / Review Tests |
| televisit3 | TeleVisit / Discuss medications |
Visit Type Options for WebPT
| Value | Definition |
|---|---|
| f/u | Follow-Up |
| ie | Initial Examination |
| re | Re-Examination |
| c | Consultation |
| of | Orthosis Fabrication |
| ce | Calendar End |
| cs | Calendar Start |
| ava | Available |
| oth | Other |
| is | Injury Screen |
| te | Telehealth eval |
| tf | Telehealth followup |
| pel | Pelvic |
| tmj | TMJ |
| spe | Specialty |
| ope | Open |
| ct | Co Treat |
Example request:
curl -X POST <https://api.usecobalt.com/v1/appointments> \\
-H 'Content-Type: application/json' \\
-H 'client_id: ci_live_198908HJDKJSH98789OHKJL' \\
-H 'client_secret: cs_live_9827hofdsklOYYHJLJh' \\
-H 'access_token: 493JKLHIU98789hLKH9HHJH' \\
-d '{
"mrn": "9988776655443322",
"location": "Good Clinic",
"date": "2024-01-15",
"time": "1:30 PM",
"provider": "Good Doctor",
"type": "FollowUp"
}'
Example response:
{
"success": true,
"message": "Appointment created.",
"data": {
"appointment_id": "23456789"
}
}
The /appointments/{id} endpoint updates an existing appointment for a patient. The update process differs based on the current status of the appointment.
1. Updating Pending or Failed Appointments
For appointments with a status of 'pending' or 'failed', you can update any attribute of the appointment.
| --- | --- | --- | --- |
2. Updating Scheduled Appointments
For appointments with a status of 'scheduled', you can only update the status or note property.
| --- | --- | --- | --- |
Example request for updating a pending/failed appointment:
curl -X PATCH <https://api.usecobalt.com/v1/appointments/23456789> \\
-H 'Content-Type: application/json' \\
-H 'client_id: ci_live_198908HJDKJSH98789OHKJL' \\
-H 'client_secret: cs_live_9827hofdsklOYYHJLJh' \\
-H 'access_token: 493JKLHIU98789hLKH9HHJH' \\
-d '{
"appointment_datetime": "2024-01-15T14:00:00-07:00",
"location": "New Clinic",
"type": "f/u"
}'
Example request for updating a scheduled appointment:
curl -X PATCH <https://api.usecobalt.com/v1/appointments/23456789> \\
-H 'Content-Type: application/json' \\
-H 'client_id: ci_live_198908HJDKJSH98789OHKJL' \\
-H 'client_secret: cs_live_9827hofdsklOYYHJLJh' \\
-H 'access_token: 493JKLHIU98789hLKH9HHJH' \\
-d '{
"status": "cancelled"
}'
Example response for a successful update:
{
"success": true,
"message": "Appointment updated successfully.",
"appointment_id": "23456789"
}