Public API
import { ORGANIZATION } from β@agnesuserguide/configβ;
Project: Heimdall Two-Legged
Use this API to authorize two-legged access and return a JWT token. The token is required for authorization in all other API requests.
π Collection: Users
End-point: Get Users
Description:
Use this API to get an array of objects containing organization user data.
Object properties:
Property Key | Property Value | Description |
---|---|---|
org | UUID string | The userβs parent organization id. |
sub | UUID string | Userβs subscriber number. Used for as a unique identifier for the user. |
firstname | string | The userβs first name. |
lastname | string | The userβs last name. |
role | string | The userβs role within the system. βuserβ, βadministratorβ, βsystemβ |
npi | Ten digit number as string | A National Provider Identifier is a unique 10-digit identification number issued to health care providers in the United States by the Centers for Medicare and Medicaid Services. |
Example JSON return object:
[
{
"org": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"sub": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"username": "frodobaggins@email.com",
"firstname": "Frodo",
"lastname": "Baggins",
"role": "user",
"npi": null
},
{
"org": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"sub": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"username": "bilbobaggins@email.com",
"firstname": "Bilbo",
"lastname": "Baggins",
"role": "administrator",
"npi": null
}
]
Method: GET
{{baseUrl}}/api/v1/org/{{orgId}}/users
Query Params
Param | value |
---|---|
sub | {{$guid}} |
group | {{$guid}} |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
π Collection: Portals
End-point: Get Portals
Description:
Use this API to get an array of objects containing organization Portal data.
Portals are the virtual representation of a registered user computer in the system.
Object properties:
Property Key | Property Value | Description |
---|---|---|
data | UUID string | data |
Example JSON return object:
[
{
"data": "data"
},
{
"data": "data"
}
]
Method: GET
{{baseUrl}}/api/v1/org/{{orgId}}/portals
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
π Collection: Groups
End-point: Get Groups
Use this API to get an array of objects containing orginization group data.
Method: GET
{{baseUrl}}/api/v1/org/{{orgId}}/groups
Response: 200
[
{
"id": "3s5*****-****-****-****-************",
"org": "7ag*****-****-****-****-************",
"name": "Administrators",
"meta": {},
"members": []
},
{
"id": "9sd*****-****-****-****-************",
"org": "53f*****-****-****-****-************",
"name": "Test",
"meta": {},
"members": ["9ba*****-****-****-****-************"]
}
]
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Create Group
Use this API to create a new group in an organization.
Method: POST
{{baseUrl}}/api/v1/org/{{orgId}}/groups
Body (raw)
{
"name": "{{$randomAdjective}} {{$randomNoun}}",
"meta": {},
"members": []
}
Response: 200
{
"id": "04a*****-****-****-****-************",
"org": "040*****-****-****-****-************",
"name": "back-end hard drive",
"meta": {
"meta": {}
},
"members": []
}
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Get Group By ID
Use this API to get object containing data for a specified group in an organization.
Method: GET
{{baseUrl}}/api/v1/org/{{orgId}}/groups?id={{temporaryGroupId}}
Query Params
Param | value |
---|---|
id | {{temporaryGroupId}} |
id | 717e4c96-847b-4b87-b22e-8488a7802d9a |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Modify Group
Use this API to modify data for a specified group in an organization.
Method: PATCH
{{baseUrl}}/api/v1/org/{{orgId}}/groups/{{temporaryGroupId}}
Body (raw)
{
"name": "{{$randomAdjective}} {{$randomNoun}}",
"meta": {},
"members": ["{{userId}}"]
}
Response: 204
null
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Delete Group
Use this API to delete a specified group in an organization.
Method: DELETE
{{baseUrl}}/api/v1/org/{{orgId}}/groups/{{temporaryGroupId}}
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
π Collection: Schedule
End-point: Get Schedule
Description:
Use this API to get an array of objects containing an organizationβs scheduled appointments data.
Return object properties:
Property Key | Property Value | Description |
---|---|---|
provider | UUID string | The id of the doctor hosting the session. Retrieved from a userβs sub property. |
patient | object | An object containing properties describing a patient. |
patient.patientID | string | A unique identifier for the patient. |
patient.firstname | string | The patientβs first name. |
patient.lastname | string | The patientβs last name. |
patient.birthdate | Date as year-month-date format: YYYY-MM-DD | The patientβs date of birth. |
patient.sex | string | The biological identifier for the patient. βMβ or βFβ |
sessionID | UUID string | A unique id connecting a scheduled appointment with patient data. Providing a session id when joining a portal will pull in any associated patient data for the scheduled appointment. If patient data was not provided when creating the scheduled appointment, no data will be pulled in. |
portalID | 64 digit number | The portal ID that the appointment is scheduled to take place in. |
startTime | ISO formatted date | Start time off the scheduled appointment. |
stopTime | ISO formatted date | End time of the scheduled appointment. |
Example JSON return object:
[
{
"providerId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"patient": {
"patientId": "c",
"firstName": "Larry",
"lastName": "Friesen",
"birthDate": "2001-12-02",
"sex": "M"
},
"sessionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"portalId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"startTime": "2021-12-02T06:07:49.000Z",
"stopTime": "2021-12-02T08:00:24.000Z"
}
]
Method: GET
{{baseUrl}}/api/v1/org/{{orgId}}/schedule?startDate=2021-01-01&perPage=10&page=0
Query Params
Param | value |
---|---|
startDate | 2021-01-01 |
stopDate | 2021-12-03 |
perPage | 10 |
page | 0 |
portals.name | PortableTeleclinic |
Response: 200
[]
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Create Schedule Item
Description:
Use this API to create a new scheduled appointment for an organization.
Return object properties:
True if the shcheduled appointment was created successfully
False if the shcheduled appointment was created successfully
Example JSON return object:
true
Method: PUT
{{baseUrl}}/api/v1/org/{{orgId}}/schedule
Body (raw)
{
"providerId": "{{userId}}",
"patient": {
"patientId": "{{$randomAlphaNumeric}}",
"firstName": "{{$randomFirstName}}",
"lastName": "{{$randomLastName}}",
"birthDate": "{{randomDatePast}}",
"sex": "M"
},
"sessionId": "{{$randomUUID}}",
"portalId": "{{portalId}}",
"startTime": "{{$randomDateRecent}}",
"stopTime": "{{$randomDateRecent}}"
}
Response: 200
true
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Get Schedule Item By ID
Description:
Use this API to get an object containing data for a specified scheduled appointment of an organization.
Return object properties:
Property Key | Property Value | Description |
---|---|---|
data | data | data |
Example JSON return object:
{
// TODO
}
Method: GET
{{baseUrl}}/api/v1/org/{{orgId}}/schedule/{{temporaryScheduleId}}
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Delete Schedule Item
Use this API to delete a specified scheduled appointment in an organization.
Method: DELETE
{{baseUrl}}/api/v1/org/{{orgId}}/schedule/{{temporaryScheduleId}}
Response: 200
{
"sessionId": "1560f626-117f-4263-a068-46963357f30a",
"providerId": null,
"portalId": "8ad982843f36037b16450dd99c48663ecb6e031364241f146a906642efa9e101",
"startTime": "2021-12-02T06:07:49.000Z",
"stopTime": "2021-12-02T08:00:24.000Z",
"meta": "{\"providerId\":\"b2f8d193-4e72-4d76-9dbf-677c86786ecb\",\"patient\":{\"patientId\":\"c\",\"firstName\":\"Larry\",\"lastName\":\"Friesen\",\"birthDate\":\"{{randomDatePast}}\",\"sex\":\"M\"}}"
}
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
π Collection: Organization
End-point: Get Organizations
Use this API to get an object containing data attributes for an organization.
#Example response object:
[
{
"id": "2xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"parent": "0xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"children": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],
"name": "{ORGANIZATION.names.short} Demo Child",
"slug": "{ORGANIZATION.names.short}-demo-child",
"config": {
"emr_provider": "redox",
"datascan": {
"api": {
"token": ""
}
},
"ldap": {
"url": null,
"bindDN": null,
"bindCredentials": null,
"searchBase": "",
"adminGroupDN": "",
"users": {
"class": "inetOrgPerson",
"subAttribute": "",
"usernameAttribute": ""
},
"groups": {
"class": "groupOfUniqueNames",
"idAttribute": "dn",
"nameAttribute": "cn",
"memberAttribute": "uniqueMember"
}
},
"emr_provider_org": null,
"logo": null,
"pcc": {
"clientId": "",
"clientSecret": ""
},
"identity_provider": "amd",
"azuread": {
"client_id": "",
"client_secret": "",
"tenant": "",
"admin_group": "",
"npi_claim": "sub"
},
"agnes": {
"whitelabel": "",
"webPageTimeout": 15,
"maxUsers": 2,
"leftWindow": "medicalvideo",
"rightWindow": null,
"iframes": [],
"modules": {
"chat": {
"enabled": true
},
"notes": {
"enabled": true,
"templates": []
},
"sessiondocs": {
"coverLogoHeight": 0,
"headerLogoHeight": 0
},
"vc": {
"enabled": true,
"force": false,
"iceTransportPolicy": "all"
},
"vitals": {
"enabled": true,
"temperatureUnits": "fahrenheit",
"bloodpressureUnits": "mmhg",
"heightUnits": "inches",
"weightUnits": "pounds"
}
}
},
"identity_provider_org": null,
"redox": {
"destination_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"patient": {
"id_type": "EHRID"
}
}
},
"metadata": {
"emr_provider": "redox",
"emr_provider_org": null
}
},
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"parent": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"children": [],
"name": "I am a sibling organization",
"slug": "sibling",
"config": {},
"metadata": {
"emr_provider": null,
"emr_provider_org": null
}
},
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
"parent": null,
"children": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],
"name": "{ORGANIZATION.names.short} Demo",
"slug": "{ORGANIZATION.names.short}-demo",
"config": {
"agnes": {
"webPageTimeout": 1500,
"maxUsers": 99,
"modules": {
"notes": {
"templates": [
{
"template": "Telemedicine Patient Intake Form\n\nPatient: {{patient.lastName}}, {{patient.firstName}} {{patient.middleInitial}} \nPatient ID: {{patient.patientId}} \nSex: {{patient.sex}} \nBirthdate {{patient.birthDate}} \n\nOrganization Name: {ORGANIZATION.names.long}\nClinic Location: Chelmsford MA 01824\nLocal Provider: {{user.fname}} {{user.lname}} \n\nChief Complaint/Reason for visit: \n\nVital Signs \n-SpO2: {{vitals.spo2}} -Pulse: {{vitals.pulse}} \n-Blood Pressure: {{vitals.bloodpressure}} -Temperature: {{vitals.temperature}} -Height: {{vitals.height}} -Weight: {{vitals.weight}} \n-Blood Glucose (mg/dL): \n\nAdditional Encounter Notes:",
"name": "Patient Intake Form"
},
{
"template": "Telemedicine Provider Encounter Notes\n\nPatient: {{patient.lastName}}, {{patient.firstName}} {{patient.middleInitial}} \nPatient ID: {{patient.patientId}} \nSex: {{patient.sex}} \nBirthdate {{patient.birthDate}} \n\nOrganization Name: {ORGANIZATION.names.long}\nClinic Location: Chelmsford MA 01824\nObserving Provider: {{user.fname}} {{user.lname}} \n\nChief Complaint of patient:\n\nDiagnosis:\n\nTreatment Plan:\n\nAdditional Encounter Notes:",
"name": "Provider Encounter Notes"
}
]
},
"vitals": {
"temperatureUnits": "celsius"
}
},
"whitelabel": null,
"iframes": [],
"rightWindow": "videoconference",
"leftWindow": "documents"
},
"logo": "url",
"identity_provider": "amd",
"emr_provider_org": "'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'",
"identity_provider_org": "''",
"emr_provider": "redox"
},
"metadata": {
"emr_provider": "redox",
"emr_provider_org": "'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'"
}
}
]
Method: GET
{{baseUrl}}/api/v1/org?page=0
Query Params
Param | value |
---|---|
page | 0 |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Create Organization
Use this API to create a new organization.
Method: PUT
{{baseUrl}}/api/v1/org
Body (raw)
{
"id": "{{$randomUUID}}",
"name": "{{$randomAdjective}} {{$randomNoun}}",
"slug": "{{$randomCatchPhraseNoun}}",
"parent": "{{orgId}}",
"config": {
"agnes": {
"webPageTimeout": 1500,
"maxUsers": 99,
"modules": {
"notes": {
"templates": [
{
"template": "Telemedicine Patient Intake Form\n\nPatient: {{patient.lastName}}, {{patient.firstName}} {{patient.middleInitial}} \nPatient ID: {{patient.patientId}} \nSex: {{patient.sex}} \nBirthdate {{patient.birthDate}} \n\nOrganization Name: {ORGANIZATION.names.long}\nClinic Location: Chelmsford MA 01824\nLocal Provider: {{user.fname}} {{user.lname}} \n\nChief Complaint/Reason for visit: \n\nVital Signs \n-SpO2: {{vitals.spo2}} -Pulse: {{vitals.pulse}} \n-Blood Pressure: {{vitals.bloodpressure}} -Temperature: {{vitals.temperature}} -Height: {{vitals.height}} -Weight: {{vitals.weight}} \n-Blood Glucose (mg/dL): \n\nAdditional Encounter Notes:",
"name": "Patient Intake Form"
},
{
"template": "Telemedicine Provider Encounter Notes\n\nPatient: {{patient.lastName}}, {{patient.firstName}} {{patient.middleInitial}} \nPatient ID: {{patient.patientId}} \nSex: {{patient.sex}} \nBirthdate {{patient.birthDate}} \n\nOrganization Name: {ORGANIZATION.names.long}\nClinic Location: Chelmsford MA 01824\nObserving Provider: {{user.fname}} {{user.lname}} \n\nChief Complaint of patient:\n\nDiagnosis:\n\nTreatment Plan:\n\nAdditional Encounter Notes:",
"name": "Provider Encounter Notes"
}
]
},
"vitals": {
"temperatureUnits": "celsius"
}
},
"whitelabel": null,
"iframes": [],
"rightWindow": "videoconference",
"leftWindow": "documents"
},
"logo": "https://agnes-connect.s3.amazonaws.com/logos/04036433-63cf-4823-b222-af007005720b",
"identity_provider": "amd",
"emr_provider_org": "{{$randomUUID}}",
"identity_provider_org": "{{$randomUUID}}",
"emr_provider": "redox"
},
"metadata": {
"emr_provider": "redox",
"emr_provider_org": "{{$randomUUID}}"
}
}
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Get Organization By ID
Use this API to get an object containing data for a specified organization.
Method: GET
{{baseUrl}}/api/v1/org/{{temporaryOrgId}}
Response: 200
{
"name": "1080p panel",
"id": "9038420b-c49c-4b76-b87d-94052ba4c4df",
"slug": "groupware",
"config": {
"logo": "https://agnes-connect.s3.amazonaws.com/logos/04036433-63cf-4823-b222-af007005720b"
}
}
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Modify Organization By ID
Use this API to modify a specified organizationβs data attributes. The request is made using the organizationβs ID.
Method: PATCH
{{baseUrl}}/api/v1/org/{{temporaryOrgId}}
Body (raw)
{
"id": "{{temporaryOrgId}}",
"name": "{ORGANIZATION.names.short} Mod",
"slug": "{ORGANIZATION.names.short}-mod"
}
Response: 403
{
"type": "ForbiddenError",
"message": "Forbidden",
"stack": "ForbiddenError: Forbidden\n at assert (/hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/http-assert/index.js:8:9)\n at patchOrganizations (/hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/packages/server/lib/api/v1/actions/organization/patch.js:24:9)\n at runMicrotasks (<anonymous>)\n at processTicksAndRejections (internal/process/task_queues.js:93:5)\n at async nocacheMiddleware (/hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/koajs-nocache/index.js:29:5)\n at async bodyParser (/hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/koa-bodyparser/index.js:95:5)\n at async /hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/packages/server/lib/api/v1/index.js:18:13\n at async /hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/koa-mount/index.js:58:5\n at async /hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/oidc-provider/lib/helpers/initialize_app.js:246:5\n at async errorHandler (/hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/oidc-provider/lib/shared/error_handler.js:23:7)\n at async /hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/koa-mount/index.js:52:26\n at async /hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/koa-mount/index.js:52:26\n at async /hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/koa-mount/index.js:52:26\n at async serve (/hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/koa-static/index.js:53:9)\n at async /hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/packages/server/lib/index.js:72:17\n at async /hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/koa-compress/index.js:43:5\n at async logger (/hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/node_modules/koa-logger/index.js:67:7)\n at async /hab/pkgs/amdglobal/heimdall/2.3.5/20211213214300/app/packages/server/lib/index.js:49:13"
}
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Delete Organization By ID
Use this API to get delete a specified organization by its ID.
Method: DELETE
{{baseUrl}}/api/v1/org/{{temporaryOrgId}}
Response: 204
null
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
End-point: Get Organization By Slug
Use this API to get an object containing a specified organizationβs data attributes. The request is made using the organizationβs slug.
Method: GET
{{baseUrl}}/api/v1/org/slug/{{orgSlug}}
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Powered By: postman-to-markdown