SlimSlim/Location

Create location

  • Sandbox: available
  • Staging: available
  • Production: unknown
POST
/v1/slim/location

Creates a location (room or bed), optionally in a zone.

Auth: Bearer token. The caller must be a practitioner, an admin, a super admin, or hold the "System Owner" access policy. The access policy must grant Location:create and Device:update (an admin or super admin who holds no access policy skips this check). Scope: The location is created in the caller's project (from the token). A super-admin caller can pass ?projectId=<uuid> to create it in that project instead. Any other caller who passes projectId gets a 403.

Behaviour

  • name must be unique. The check is an exact name match against the locations your token can search. With ?projectId, the check runs in that project only.
  • When any of floor, room or bed is set, the combination of zone, floor, room and bed must also be unique. The comparison ignores case and extra whitespace. A location with only a name has no such check.
  • floor, room and bed are stored as type codes on the location. organizationId sets the zone. The zone must be in your project, one of its sub-projects, or its parent project.
  • The create is guarded against a concurrent create of the same floor, room and bed. If another request creates it first, you get a 409 that names the existing location.
  • No devices or residents are attached. Use PUT /v1/slim/location/{id} for that.
  • A location-created entry is added to the change history. A failure to write that entry does not fail the request.
  • The response is the created location, in the same shape as GET /v1/slim/location/{id}.
  • If a location with the same zone, floor, room and bed exists, the request is refused with 409 and the body carries existingLocationId and existingLocationName.

Example

curl -X POST 'https://api.sandbox.ovok.com/v1/slim/location' \  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NjcyNjg4MDAsImV4cCI6MTc2NzI3MjQwMH0.Ql3B_ztDvctlyZ2z0vp4sl3ExXRQGkzmxdmTAqxNzZk' \  -H 'Content-Type: application/json' \  -d '{    "name": "Room 201",    "floor": "2",    "room": "201",    "bed": "A",    "organizationId": "87ea5dfc-8b8e-384d-8489-79496e706390"  }'

Authorization

bearer
headerAuthorizationBearer <JWT>

Request Body

application/json
  1. body
name*string
Length1 <= length
floor?string
room?string
bed?string
organizationId?string

Response Body

Location created successfully.

application/json
  1. response
id*string

Location id.

name*string
floor?string
room?string
bed?string
organizationId?string
organizationName?string
deviceId?array<string>

Every device at the location. Omitted when the location has none.

deviceName?string

Alphabetically first name among the devices at the location.

patientId?string

Resident on the first device at the location that has one.

patientName?string
Example Request
curl -X POST 'https://api.sandbox.ovok.com/v1/slim/location' \  -H 'Content-Type: application/json' \  -d '{  "name": "string"}'
Example Response
{  "id": "string",  "name": "string",  "floor": "string",  "room": "string",  "bed": "string",  "organizationId": "string",  "organizationName": "string",  "deviceId": [    "string"  ],  "deviceName": "string",  "patientId": "string",  "patientName": "string"}

List locations GET

Lists the locations (rooms and beds) in your project, with the device, resident and zone at each one. Use it for the location table in the Slim dashboard. **Auth:** Bearer token. The caller must be a practitioner, an admin, a super admin, or hold the "System Owner" access policy. The access policy must grant `Location:search` and `Location:read` (an admin or super admin who holds no access policy skips this check). **Scope:** The caller's project (from the token). Only locations, devices and residents in that project are returned. ## Behaviour - Read-only. - **One row per device.** A location with several devices appears once per device. A location with no device appears once, without device and resident fields. `total` counts rows, not locations. - `patientId` and `patientName` are the resident assigned to that row's device. `organizationId` and `organizationName` are the location's zone. - `search` matches, as a case-insensitive substring, the location name, the name of a device at the location, the name of a resident on such a device, or the zone name. - `floor`, `room` and `bed` match the location's codes exactly. `organizationId` keeps locations in that zone. `deviceId` keeps only the row for that device. - Rows are sorted by floor, room, bed, device name, then location name. The sort is case-insensitive and numeric-aware ("2" before "10"). Rows with a missing value sort after rows that have one. - Pagination is zero-based: `page` (default `0`) and `count` (default `20`, max `100`). - Unknown query parameters are rejected. ## Example ```bash curl -X GET 'https://api.sandbox.ovok.com/v1/slim/location?search=Room%20201&page=0&count=20' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NjcyNjg4MDAsImV4cCI6MTc2NzI3MjQwMH0.Ql3B_ztDvctlyZ2z0vp4sl3ExXRQGkzmxdmTAqxNzZk' ```

List locations in a project (admin) GET

Lists the locations of a given project. The admin dashboard uses it to fill the location picker after you choose a project. **Auth:** Bearer token. The caller must be a Medplum project admin. Super admins without the admin role, practitioners and System Owner callers are refused. The access-policy check (`Location:search`, `Location:read`) is skipped only for an admin who holds no access policy. **Scope:** The project named by the required `projectId` query parameter. The search runs with Ovok's admin client, not the caller's token. ## Behaviour - Read-only. - Locations are sorted by name. - Pagination is zero-based: `page` (default `0`) and `count` (default `50`, max `100`). - `total` is an estimate: when a page is full it is one more than the rows seen so far, so a full page means more may follow. - Unlike `GET /v1/slim/location`, rows carry no device or resident fields: one row per location. ## Example ```bash curl -X GET 'https://api.sandbox.ovok.com/v1/slim/location/admin/list?projectId=c3499c27-2973-0a7f-807e-fb8676a92dcb&page=0&count=50' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NjcyNjg4MDAsImV4cCI6MTc2NzI3MjQwMH0.Ql3B_ztDvctlyZ2z0vp4sl3ExXRQGkzmxdmTAqxNzZk' ```