---
title: "Add Shelter By Structure Id"
method: POST
path: "/v1/structures/{structure_id}/shelters"
tags: ["structures"]
---

# Add Shelter By Structure Id

`POST /v1/structures/{structure_id}/shelters`

## Request

- Base URL: `https://api.shapemaker.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.shapemaker.io/v1/structures/{structure_id}/shelters`
- Auth: OAuth 2
  - Password
  - Token URL: `/v1/auth`

This endpoint places a shelter from the organization's library on the
structure. The placement carries only which type stands there and its
position; omitted x/y means auto-position beside the tower. A structure
holds one shelter: placing a second is rejected, change the existing one
instead.

## Path parameters

- `structure_id` string, required

## Request body

- StructureShelterCreateInput
  - `shelterDefinitionId` integer, required
  - `xM` number, nullable
  - `yM` number, nullable
  - `rotationDEG` number, nullable

## Response `201`

Successful Response

- StructureShelterView: A placed shelter: the library definition's geometry flattened onto the placement, so the 3D scene and the dialogs read one object.
  - `id` integer, required
  - `structureId` integer, required
  - `shelterDefinitionId` integer, required
  - `name` string, required
  - `widthM` number, required
  - `depthM` number, required
  - `heightM` number, required
  - `roofHeightM` number, required
  - `xM` number, nullable
  - `yM` number, nullable
  - `rotationDEG` number, nullable
  - `doorWall` 'FRONT' | 'BACK' | 'LEFT' | 'RIGHT': Which shelter wall the door, or the feeder tray, sits in. Named from the shelter's own shape rather than the site: the duopitch ridge runs along the width axis, so FRONT and BACK are the gable ends and LEFT and RIGHT are the long eave walls. In shelter-local axes (x along the width, y along the depth), the wall each name refers to is: - FRONT: the +x gable end - BACK: the -x gable end - LEFT: the -y long wall - RIGHT: the +y long wall shelter_wall_axes in app/modules/geometry_definitions/shelter/position.py is the single source of these directions; keep the two in step. Alembic does not detect changes in enums, so the enum constraint has to be manually migrated when changing this enum
  - `doorOffsetM` number, nullable
  - `doorWidthM` number, nullable
  - `trayWall` 'FRONT' | 'BACK' | 'LEFT' | 'RIGHT': Which shelter wall the door, or the feeder tray, sits in. Named from the shelter's own shape rather than the site: the duopitch ridge runs along the width axis, so FRONT and BACK are the gable ends and LEFT and RIGHT are the long eave walls. In shelter-local axes (x along the width, y along the depth), the wall each name refers to is: - FRONT: the +x gable end - BACK: the -x gable end - LEFT: the -y long wall - RIGHT: the +y long wall shelter_wall_axes in app/modules/geometry_definitions/shelter/position.py is the single source of these directions; keep the two in step. Alembic does not detect changes in enums, so the enum constraint has to be manually migrated when changing this enum
  - `trayOffsetM` number, nullable
  - `partitionOffsetM` number, nullable
  - `partitionDoorWidthM` number, nullable
  - `partitionDoorOffsetM` number, nullable
  - `partitionHasDoor` boolean
  - `isPositionManual` boolean, required

## Other responses

- `400`: Bad Request
- `404`: Not found
- `422`: Validation Error

---

[API](https://skmtc.dev/shapemaker/apis/shapemaker-api.md) - [All operations](https://skmtc.dev/shapemaker/apis/shapemaker-api/llms.txt) - [OpenAPI document](https://skmtc.dev/shapemaker/apis/shapemaker-api/revisions/b8461cf1236c?raw)
