# Create location

Canonical page: https://docs.ovok.com/api/slim/location/create-location

`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

```bash
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"
  }'
```
