List EHR actions
curl --request GET \
--url https://api.healos.ai/ext-api/v1/ehr/actions \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.healos.ai/ext-api/v1/ehr/actions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.healos.ai/ext-api/v1/ehr/actions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"name": "athena.search_patients",
"version": 123,
"ehr": "athena",
"ehr_name": "athenahealth",
"action": "search_patients",
"title": "<string>",
"category": "patients",
"description": "<string>",
"input_schema": {},
"output_schema": {},
"schema_completeness": "best_effort",
"safety": {
"writes": true,
"external_effect": "read",
"idempotent": true,
"retry_safe": true,
"dry_run_supported": true,
"touches_live_ehr": true,
"ownership_check": true,
"duplicate_check": true,
"requires_org_enablement": true
},
"notes": [
"<string>"
],
"available_via": [
"<string>"
],
"executable_via_api": true
}
],
"meta": {
"total": 123,
"catalog_version": 123,
"ehrs": [
{
"ehr": "athena",
"name": "athenahealth",
"action_count": 123
}
]
}
}{
"error": "<string>",
"details": {}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "Rate limit exceeded. Please retry after the window resets.",
"code": "daily_cap_reached",
"reset_at": "2026-10-28T00:00:00.000Z"
}EHR
List EHR actions
The catalog of actions HealOS supports per EHR, with input and output schemas and a safety contract for each. The catalog is the same for every organization. It describes actions only: running them through the API is not available yet.
GET
/
ehr
/
actions
List EHR actions
curl --request GET \
--url https://api.healos.ai/ext-api/v1/ehr/actions \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.healos.ai/ext-api/v1/ehr/actions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.healos.ai/ext-api/v1/ehr/actions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"name": "athena.search_patients",
"version": 123,
"ehr": "athena",
"ehr_name": "athenahealth",
"action": "search_patients",
"title": "<string>",
"category": "patients",
"description": "<string>",
"input_schema": {},
"output_schema": {},
"schema_completeness": "best_effort",
"safety": {
"writes": true,
"external_effect": "read",
"idempotent": true,
"retry_safe": true,
"dry_run_supported": true,
"touches_live_ehr": true,
"ownership_check": true,
"duplicate_check": true,
"requires_org_enablement": true
},
"notes": [
"<string>"
],
"available_via": [
"<string>"
],
"executable_via_api": true
}
],
"meta": {
"total": 123,
"catalog_version": 123,
"ehrs": [
{
"ehr": "athena",
"name": "athenahealth",
"action_count": 123
}
]
}
}{
"error": "<string>",
"details": {}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "Rate limit exceeded. Please retry after the window resets.",
"code": "daily_cap_reached",
"reset_at": "2026-10-28T00:00:00.000Z"
}| Requirement | Detail |
|---|---|
| Scope | ehr:read |
| Rate limit | About 60 requests per minute per API key (shared by all endpoints; approximate) |
| Cost | Free |
Safety
- Writes data: No
- Safe to retry: Yes
- Contacts an outside system: None. Reads HealOS’s catalog; your EHR is not contacted.
- Dry run: Not needed (read-only).
This endpoint only describes EHR actions. Running them through the HealOS API is not available yet: there is no endpoint that executes an action.
?ehr=athena.
Guide: EHR integrations. Errors: Error catalog.Was this page helpful?

