Get an EHR action
curl --request GET \
--url https://api.healos.ai/ext-api/v1/ehr/actions/{actionName} \
--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/{actionName}', 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/{actionName}"
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
}
}{
"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
Get an EHR action
One action’s input and output schemas and safety contract, by its stable <ehr>.<action> name.
GET
/
ehr
/
actions
/
{actionName}
Get an EHR action
curl --request GET \
--url https://api.healos.ai/ext-api/v1/ehr/actions/{actionName} \
--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/{actionName}', 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/{actionName}"
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
}
}{
"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>.<action> name, for example athena.search_patients.
Guide: EHR integrations. Errors: Error catalog.Was this page helpful?

