Skip to main content

Facilities

Places where shifts happen. Scopes: Read facilities for GET, Manage facilities for everything else.

MethodPathPurpose
GET/facilitiesList active facilities
POST/facilitiesCreate a facility
GET/facilities/{id}Get a facility
PUT/facilities/{id}Update a facility
DELETE/facilities/{id}Delete a facility
GET/facilities/{id}/providersProviders assigned to the facility
GET/facilities/{id}/contactsContacts at the facility
POST/facilities/{id}/contactsAdd a contact
PUT/facility-contacts/{id}Update a contact
DELETE/facility-contacts/{id}Delete a contact

The facility object​

{
"id": "0b7c…",
"organizationId": "680e…",
"name": "Cedar Ridge Medical Center",
"type": "Hospital",
"website": "https://cedarridge.example",
"phone": "+16025550100",
"email": "staffing@cedarridge.example",
"description": null,
"address": "1200 N Central Ave",
"city": "Phoenix",
"state": "AZ",
"zip": "85004",
"timezone": "America/Phoenix",
"defaultStartTime": "07:00:00",
"defaultEndTime": "19:00:00",
"status": "active",
"isActive": true,
"createdAt": "2025-02-01T16:00:00.000Z",
"updatedAt": "2026-09-12T09:31:44.000Z"
}

timezone is the IANA zone every shift time at this facility is expressed in. It is derived from state when not set explicitly. defaultStartTime and defaultEndTime prefill new shifts and may describe an overnight window.

List and get​

curl -H "Authorization: Bearer $KEY" https://app.atlahq.com/api/v1/facilities
curl -H "Authorization: Bearer $KEY" https://app.atlahq.com/api/v1/facilities/0b7c…

Create and update​

curl -X POST https://app.atlahq.com/api/v1/facilities \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{
"name": "Cedar Ridge Medical Center",
"type": "Hospital",
"address": "1200 N Central Ave", "city": "Phoenix", "state": "AZ", "zip": "85004",
"timezone": "America/Phoenix",
"defaultStartTime": "07:00", "defaultEndTime": "19:00"
}'
{ "success": true, "id": "0b7c…" }

Only name is required. PUT /facilities/{id} takes the same fields, all optional; status is one of active, inactive, maintenance, pending.

Delete​

curl -X DELETE https://app.atlahq.com/api/v1/facilities/0b7c… -H "Authorization: Bearer $KEY"

Refused with 409 while any orders or document requirements still reference the facility. Prefer PUT { "status": "inactive" } for a facility you no longer staff.

Providers at a facility​

curl -H "Authorization: Bearer $KEY" https://app.atlahq.com/api/v1/facilities/0b7c…/providers
[
{
"id": "4c1d…", "userId": "8e2a…", "email": "jane.smith@example.com",
"firstName": "Jane", "lastName": "Smith", "displayName": "Jane Smith",
"title": "RN", "titleId": "2f6b…", "specialty": "ICU",
"specialties": [ { "id": "7d3f…", "name": "Intensive Care" } ],
"department": "Float pool", "status": "active"
}
]

Assignments themselves are managed from the provider side: see Providers → Facility assignments.

Contacts​

curl -H "Authorization: Bearer $KEY" https://app.atlahq.com/api/v1/facilities/0b7c…/contacts
[
{
"id": "c9a1…", "facilityId": "0b7c…",
"firstName": "Dana", "lastName": "Ortiz", "title": "Staffing coordinator",
"email": "dortiz@cedarridge.example", "phone": "+16025550101", "mobile": null,
"isPrimary": true, "notes": null,
"createdAt": "2026-03-04T15:10:00.000Z", "updatedAt": "2026-03-04T15:10:00.000Z"
}
]

POST /facilities/{id}/contacts needs at least a name or an email. Setting isPrimary: true clears the previous primary contact. PUT and DELETE /facility-contacts/{id} take the contact id.