# info.description
DT API specification for the Menu and Project endpoints.

# paths./api/menu/.get.description
Returns the hierarchical navigation menu for the user's currently selected project. Each item includes a stable `uid` that should be sent back on later updates.

# paths./api/menu/.post.description
Creates the hierarchical navigation menu for the user's currently selected project. Missing item UIDs are generated automatically and returned in the response.

# paths./api/menu/.post.responses.400.description
Validation error / No current project selected

# paths./api/menu/.put.description
Replaces the entire menu for the user's currently selected project using stable item UIDs. Existing items that keep the same UID preserve their database identity and corresponding Wagtail pages.

# paths./api/menu/.put.responses.400.description
Validation error / No current project selected

# paths./api/menu/.delete.description
Deletes all menu items for the user's currently selected project.

# paths./api/menu/project/{id}/.get.description
Returns the hierarchical navigation menu for the given project id. Each item includes a stable `uid` that the front end should keep and send back on later updates.

# paths./api/menu/project/{id}/.post.description
Creates the hierarchical navigation menu for the given project id. Returns 409 Conflict if the project already has a menu. Missing item UIDs are generated automatically and returned in the response.

# paths./api/menu/project/{id}/.put.description
Replaces the entire menu for the given project id using stable item UIDs. Existing items that keep the same UID preserve their database identity and corresponding Wagtail pages.

# paths./api/menu/project/{id}/delete/.delete.description
Deletes all menu items (MenuProjectItem) for the given project id.

# paths./api/menu/selection/.get.description
Returns the user's last selected menu item for a given project. Provide `projectId` as a query parameter; if omitted, the user's `current_project` is used when available.

# paths./api/menu/selection/.get.parameters[].description
Project id to get the selection for. Optional if the user has `current_project` set.

# paths./api/menu/selection/.post.description
Persists the last selected menu item for the given project so subsequent calls to `Menu_get` can reflect the active path. Returns a simple status.

# paths./api/organisation/.post.description
Create a new organisation (staff/superuser only).

# paths./api/organisation/{id}/.put.description
Update an organisation by id (staff/superuser). PUT and PATCH both support partial updates.

# paths./api/organisation/{id}/.patch.description
Update an organisation by id (staff/superuser). PUT and PATCH both support partial updates.

# paths./api/organisation/{id}/.delete.description
Delete an organisation by id (staff/superuser).

# paths./api/organisation/list/.get.description
List all organisations (authenticated users).

# paths./api/project/.post.description
Create a new project (staff/superuser only). Use multipart/form-data to include a logo file.

# paths./api/project/{id}/.put.description
Update a project by id (staff/superuser). Use multipart/form-data to include a logo file.

# paths./api/project/{id}/.patch.description
Update a project by id (staff/superuser). Use multipart/form-data to include a logo file.

# paths./api/project/{id}/.delete.description
Delete a project by id (staff/superuser).

# paths./api/project/{id}/logo/.put.description
Upload or replace the logo for a project (staff/superuser only). Send a multipart/form-data request with the image in the 'logo' field.

# paths./api/project/{id}/logo/.delete.description
Remove the logo from a project (staff/superuser only).

# paths./api/project/list/.get.description
List projects visible to the current user.

# paths./api/project/selection/.get.description
Returns the current user's selected project (User.current_project).

# paths./api/project/selection/.post.description
Sets the current user's selected project (User.current_project) to the provided project id. The user must be allowed to access the project.

# paths./api/user/.get.description
Returns the profile of the authenticated requesting user.

# paths./service/api/raster/tiff/{id}/data/histogram.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/data/histogram.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/data/histogram.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/data/pixel.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/data/pixel.get.parameters[].description
The maximum value for the color mapping.

# paths./service/api/raster/tiff/{id}/data/pixel.get.parameters[].description
The minimum value for the color mapping.

# paths./service/api/raster/tiff/{id}/data/pixel.get.parameters[].description
The value to map as no data (often made transparent).

# paths./service/api/raster/tiff/{id}/data/pixel.get.parameters[].description
The color palette to map the band values (named Matplotlib colormaps or palettable palettes). `cmap` alias supported.

# paths./service/api/raster/tiff/{id}/data/pixel.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/data/pixel.get.parameters[].description
This is either ``linear`` (the default) or ``discrete``. If a palette is specified, ``linear`` uses a piecewise linear interpolation, and ``discrete`` uses exact colors from the palette with the range of the data mapped into the specified number of colors (e.g., a palette with two colors will split exactly halfway between the min and max values).

# paths./service/api/raster/tiff/{id}/data/pixel.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.description
Return the region tile binary from world coordinates in given EPSG.

Note
----
Use the `units` query parameter to inidicate the projection of the given
coordinates. This can be different than the `projection` parameter used
to open the tile source. `units` defaults to `EPSG:4326` for geospatial
images, otherwise, must use `pixels`.

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
Image format (jpeg | png | tiff | tiled | jfif | heif | avif | bmp | dib | pcx | eps | gif | jpeg2000 | mpo | ppm | sgi | tga | webp | xbm | jpg | jp2 | tif)

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
The maximum value for the color mapping.

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
The minimum value for the color mapping.

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
The value to map as no data (often made transparent).

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
The color palette to map the band values (named Matplotlib colormaps or palettable palettes). `cmap` alias supported.

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
This is either ``linear`` (the default) or ``discrete``. If a palette is specified, ``linear`` uses a piecewise linear interpolation, and ``discrete`` uses exact colors from the palette with the range of the data mapped into the specified number of colors (e.g., a palette with two colors will split exactly halfway between the min and max values).

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/data/region.{fmt}.get.parameters[].description
The projection/units of the region coordinates.

# paths./service/api/raster/tiff/{id}/data/thumbnail.{fmt}.get.parameters[].description
Image format (jpeg | png | tiff | tiled | jfif | heif | avif | bmp | dib | pcx | eps | gif | jpeg2000 | mpo | ppm | sgi | tga | webp | xbm | jpg | jp2 | tif)

# paths./service/api/raster/tiff/{id}/data/thumbnail.{fmt}.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/data/thumbnail.{fmt}.get.parameters[].description
The maximum value for the color mapping.

# paths./service/api/raster/tiff/{id}/data/thumbnail.{fmt}.get.parameters[].description
The minimum value for the color mapping.

# paths./service/api/raster/tiff/{id}/data/thumbnail.{fmt}.get.parameters[].description
The value to map as no data (often made transparent).

# paths./service/api/raster/tiff/{id}/data/thumbnail.{fmt}.get.parameters[].description
The color palette to map the band values (named Matplotlib colormaps or palettable palettes). `cmap` alias supported.

# paths./service/api/raster/tiff/{id}/data/thumbnail.{fmt}.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/data/thumbnail.{fmt}.get.parameters[].description
This is either ``linear`` (the default) or ``discrete``. If a palette is specified, ``linear`` uses a piecewise linear interpolation, and ``discrete`` uses exact colors from the palette with the range of the data mapped into the specified number of colors (e.g., a palette with two colors will split exactly halfway between the min and max values).

# paths./service/api/raster/tiff/{id}/data/thumbnail.{fmt}.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/info/band.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/info/band.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/info/band.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/info/bands.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/info/bands.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/info/bands.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/info/frames.get.summary
Retrieve all channels/bands for each frame. This is used to generate a UI to control how the image is displayed.

# paths./service/api/raster/tiff/{id}/info/frames.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/info/frames.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/info/frames.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/info/metadata.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/info/metadata.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/info/metadata.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/info/metadata_internal.get.summary
Returns additional known metadata about the tile source.

# paths./service/api/raster/tiff/{id}/info/metadata_internal.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/info/metadata_internal.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/info/metadata_internal.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/info/tiffdump.get.summary
Returns tifftools tiffdump JSON. This will raise a `ValidationError` if the image is not a Tiff.

# paths./service/api/raster/tiff/{id}/info/tiffdump.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
Image format (jpeg | png | tiff | tiled | jfif | heif | avif | bmp | dib | pcx | eps | gif | jpeg2000 | mpo | ppm | sgi | tga | webp | xbm | jpg | jp2 | tif)

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
The maximum value for the color mapping.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
The minimum value for the color mapping.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
The value to map as no data (often made transparent).

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
The color palette to map the band values (named Matplotlib colormaps or palettable palettes). `cmap` alias supported.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
This is either ``linear`` (the default) or ``discrete``. If a palette is specified, ``linear`` uses a piecewise linear interpolation, and ``discrete`` uses exact colors from the palette with the range of the data mapped into the specified number of colors (e.g., a palette with two colors will split exactly halfway between the min and max values).

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
The 0-based X position of the tile on the specified Z level.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
The 0-based Y position of the tile on the specified Z level.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}.{fmt}.get.parameters[].description
The Z level of the tile. May range from [0, levels], where 0 is the lowest resolution, single tile for the whole source.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}/corners.get.summary
Returns bounds of a tile for a given x, y, z index.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}/corners.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}/corners.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}/corners.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}/corners.get.parameters[].description
The 0-based X position of the tile on the specified Z level.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}/corners.get.parameters[].description
The 0-based Y position of the tile on the specified Z level.

# paths./service/api/raster/tiff/{id}/tiles/{z}/{x}/{y}/corners.get.parameters[].description
The Z level of the tile. May range from [0, levels], where 0 is the lowest resolution, single tile for the whole source.

# paths./service/api/raster/tiff/{id}/tiles/metadata.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/api/raster/tiff/{id}/tiles/metadata.get.parameters[].description
The projection in which to open the image (try `EPSG:3857`).

# paths./service/api/raster/tiff/{id}/tiles/metadata.get.parameters[].description
The source to use when opening the image. Use the `large-image/sources` endpoint to list the available sources.

# paths./service/controlled-properties.get.description
API endpoint that allows projects to be viewed or edited.

# paths./service/controlled-properties/{id}.get.description
API endpoint that allows projects to be viewed or edited.

# paths./service/controlled-properties/{id}.get.parameters[].description
A unique integer value identifying this controlled property.

# paths./service/controlled-properties/{id}.put.parameters[].description
A unique integer value identifying this controlled property.

# paths./service/controlled-properties/{id}.patch.description
API endpoint that allows projects to be viewed or edited.

# paths./service/controlled-properties/{id}.patch.parameters[].description
A unique integer value identifying this controlled property.

# paths./service/controlled-properties/{id}.delete.parameters[].description
A unique integer value identifying this controlled property.

# paths./service/device-models.get.description
API endpoint that allows device models to be viewed or edited.

# paths./service/device-models/{id}.get.description
API endpoint that allows device models to be viewed or edited.

# paths./service/device-models/{id}.get.parameters[].description
A unique integer value identifying this device model.

# paths./service/device-models/{id}.put.parameters[].description
A unique integer value identifying this device model.

# paths./service/device-models/{id}.patch.description
API endpoint that allows device models to be viewed or edited.

# paths./service/device-models/{id}.patch.parameters[].description
A unique integer value identifying this device model.

# paths./service/device-models/{id}.delete.parameters[].description
A unique integer value identifying this device model.

# paths./service/device/{device_id}/{from_date}/{to_date}/historic/data.get.description
API endpoint that allows viewing device historic data filtered by device_id.
parameter: from -> iso from date e.g., 2025-03-12
parameter: to -> iso to date e.g., 2025-10-12

# paths./service/device/{device_id}/{from_date}/{to_date}/historic/data/.get.description
API endpoint that allows viewing device historic data filtered by device_id.
parameter: from -> iso from date e.g., 2025-03-12
parameter: to -> iso to date e.g., 2025-10-12

# paths./service/device/{device_id}/{from_date}/{to_date}/historic/data/.get.parameters[].description
A unique integer value identifying this observed data.

# paths./service/device/{device_id}/aggregate/{from_date}/{to_date}/{agg.get.description
Retrieves aggregated historical observed data for a specific device within a date range.

This method fetches device data based on the provided device ID and date range,
applying the specified aggregation type to return time-series data points.
The aggregation type determines how the data is grouped and averaged over time intervals.

:param request: The HTTP request object containing metadata and headers.
:param device_id: The unique identifier of the device for which to retrieve data.
:param from_date: The start date of the time range in ISO format (e.g., '2025-03-12').
:param to_date: The end date of the time range in ISO format (e.g., '2025-10-12').
:param agg_type: The aggregation resolution type (e.g., 'hourly', 'daily', 'weekly').
    For the moment it defaults to 'average' aggregation.
:return: Response object containing a list of dictionaries with 'observed_at' and 'value' keys.

# paths./service/device/{device_id}/data/ingest/{id}.delete.parameters[].description
A unique integer value identifying this ingestion job.

# paths./service/device/{device_id}/entities/{id}.get.parameters[].description
A unique integer value identifying this entity.

# paths./service/device/{device_id}/live/data.get.description
API endpoint that allows viewing of device live data filtered by device_id.

# paths./service/device/{device_id}/live/data/{id}.get.description
API endpoint that allows viewing of device live data filtered by device_id.

# paths./service/device/{device_id}/live/data/{id}.get.parameters[].description
A unique integer value identifying this observed data.

# paths./service/devices.get.description
API endpoint that allows devices to be viewed or edited.

# paths./service/devices/{id}.get.description
API endpoint that allows devices to be viewed or edited.

# paths./service/devices/{id}.get.parameters[].description
A unique integer value identifying this device.

# paths./service/devices/{id}.put.parameters[].description
A unique integer value identifying this device.

# paths./service/devices/{id}.patch.description
API endpoint that allows devices to be viewed or edited.

# paths./service/devices/{id}.patch.parameters[].description
A unique integer value identifying this device.

# paths./service/devices/{id}.delete.parameters[].description
A unique integer value identifying this device.

# paths./service/entities.get.description
API endpoint that allows Entities to be viewed or edited.

# paths./service/entities/{id}.get.description
API endpoint that allows Entities to be viewed or edited.

# paths./service/entities/{id}.get.parameters[].description
A unique integer value identifying this entity.

# paths./service/entities/{id}.put.parameters[].description
A unique integer value identifying this entity.

# paths./service/entities/{id}.patch.description
API endpoint that allows Entities to be viewed or edited.

# paths./service/entities/{id}.patch.parameters[].description
A unique integer value identifying this entity.

# paths./service/entities/{id}.delete.parameters[].description
A unique integer value identifying this entity.

# paths./service/entity/{entity_id}/devices.get.description
API endpoint that allows viewing and editing devices associated with a specific entity.

This viewset provides CRUD operations for devices filtered by entity_id. The entity_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/entity/{entity_id}/devices.post.description
API endpoint that allows viewing and editing devices associated with a specific entity.

This viewset provides CRUD operations for devices filtered by entity_id. The entity_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/entity/{entity_id}/devices/{id}.get.description
API endpoint that allows viewing and editing devices associated with a specific entity.

This viewset provides CRUD operations for devices filtered by entity_id. The entity_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/entity/{entity_id}/devices/{id}.get.parameters[].description
A unique integer value identifying this device.

# paths./service/entity/{entity_id}/devices/{id}.put.description
API endpoint that allows viewing and editing devices associated with a specific entity.

This viewset provides CRUD operations for devices filtered by entity_id. The entity_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/entity/{entity_id}/devices/{id}.put.parameters[].description
A unique integer value identifying this device.

# paths./service/entity/{entity_id}/devices/{id}.patch.description
API endpoint that allows viewing and editing devices associated with a specific entity.

This viewset provides CRUD operations for devices filtered by entity_id. The entity_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/entity/{entity_id}/devices/{id}.patch.parameters[].description
A unique integer value identifying this device.

# paths./service/entity/{entity_id}/devices/{id}.delete.description
API endpoint that allows viewing and editing devices associated with a specific entity.

This viewset provides CRUD operations for devices filtered by entity_id. The entity_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/entity/{entity_id}/devices/{id}.delete.parameters[].description
A unique integer value identifying this device.

# paths./service/project/{project_id}/bbox.get.description
Return the combined bounding box of project entities and devices.

Response: ``{"bbox": [minLon, minLat, maxLon, maxLat]}`` or
``{"bbox": null}`` when nothing in the project has a non-null location.

# paths./service/project/{project_id}/devices.get.description
API endpoint that allows viewing and editing devices associated with a specific project.

This viewset provides CRUD operations for devices filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/project/{project_id}/devices.post.description
API endpoint that allows viewing and editing devices associated with a specific project.

This viewset provides CRUD operations for devices filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/project/{project_id}/devices/{id}.get.description
API endpoint that allows viewing and editing devices associated with a specific project.

This viewset provides CRUD operations for devices filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/project/{project_id}/devices/{id}.get.parameters[].description
A unique integer value identifying this device.

# paths./service/project/{project_id}/devices/{id}.put.description
API endpoint that allows viewing and editing devices associated with a specific project.

This viewset provides CRUD operations for devices filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/project/{project_id}/devices/{id}.put.parameters[].description
A unique integer value identifying this device.

# paths./service/project/{project_id}/devices/{id}.patch.description
API endpoint that allows viewing and editing devices associated with a specific project.

This viewset provides CRUD operations for devices filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/project/{project_id}/devices/{id}.patch.parameters[].description
A unique integer value identifying this device.

# paths./service/project/{project_id}/devices/{id}.delete.description
API endpoint that allows viewing and editing devices associated with a specific project.

This viewset provides CRUD operations for devices filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the devices that belong
to that specific entity.

# paths./service/project/{project_id}/devices/{id}.delete.parameters[].description
A unique integer value identifying this device.

# paths./service/project/{project_id}/entities.get.description
API endpoint that allows viewing and editing entities associated with a specific project.

This viewset provides CRUD operations for entities filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the entities that belong
to that specific project.

# paths./service/project/{project_id}/entities.post.description
API endpoint that allows viewing and editing entities associated with a specific project.

This viewset provides CRUD operations for entities filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the entities that belong
to that specific project.

# paths./service/project/{project_id}/entities/{id}.get.description
API endpoint that allows viewing and editing entities associated with a specific project.

This viewset provides CRUD operations for entities filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the entities that belong
to that specific project.

# paths./service/project/{project_id}/entities/{id}.get.parameters[].description
A unique integer value identifying this device.

# paths./service/project/{project_id}/entities/{id}.put.description
API endpoint that allows viewing and editing entities associated with a specific project.

This viewset provides CRUD operations for entities filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the entities that belong
to that specific project.

# paths./service/project/{project_id}/entities/{id}.put.parameters[].description
A unique integer value identifying this device.

# paths./service/project/{project_id}/entities/{id}.patch.description
API endpoint that allows viewing and editing entities associated with a specific project.

This viewset provides CRUD operations for entities filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the entities that belong
to that specific project.

# paths./service/project/{project_id}/entities/{id}.patch.parameters[].description
A unique integer value identifying this device.

# paths./service/project/{project_id}/entities/{id}.delete.description
API endpoint that allows viewing and editing entities associated with a specific project.

This viewset provides CRUD operations for entities filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the entities that belong
to that specific project.

# paths./service/project/{project_id}/entities/{id}.delete.parameters[].description
A unique integer value identifying this device.

# paths./service/project/{project_id}/shapes.get.description
API endpoint that allows viewing and editing shapes associated with a specific project.

This viewset provides READ-ONLY operations for shapes filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the shapes that belong
to that specific project.

# paths./service/project/{project_id}/shapes.post.description
API endpoint that allows viewing and editing shapes associated with a specific project.

This viewset provides READ-ONLY operations for shapes filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the shapes that belong
to that specific project.

# paths./service/project/{project_id}/shapes/{id}.get.description
API endpoint that allows viewing and editing shapes associated with a specific project.

This viewset provides READ-ONLY operations for shapes filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the shapes that belong
to that specific project.

# paths./service/project/{project_id}/shapes/{id}.get.parameters[].description
A unique integer value identifying this shape file.

# paths./service/project/{project_id}/shapes/{id}.put.description
API endpoint that allows viewing and editing shapes associated with a specific project.

This viewset provides READ-ONLY operations for shapes filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the shapes that belong
to that specific project.

# paths./service/project/{project_id}/shapes/{id}.put.parameters[].description
A unique integer value identifying this shape file.

# paths./service/project/{project_id}/shapes/{id}.patch.description
API endpoint that allows viewing and editing shapes associated with a specific project.

This viewset provides READ-ONLY operations for shapes filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the shapes that belong
to that specific project.

# paths./service/project/{project_id}/shapes/{id}.patch.parameters[].description
A unique integer value identifying this shape file.

# paths./service/project/{project_id}/shapes/{id}.delete.description
API endpoint that allows viewing and editing shapes associated with a specific project.

This viewset provides READ-ONLY operations for shapes filtered by project_id. The project_id
is extracted from the URL parameters and used to retrieve only the shapes that belong
to that specific project.

# paths./service/project/{project_id}/shapes/{id}.delete.parameters[].description
A unique integer value identifying this shape file.

# paths./service/rasters.get.description
API endpoint that allows projects to be viewed or edited.

# paths./service/rasters.post.description
API endpoint that allows projects to be viewed or edited.

# paths./service/rasters/{id}.get.description
API endpoint that allows projects to be viewed or edited.

# paths./service/rasters/{id}.get.parameters[].description
A unique integer value identifying this raster file.

# paths./service/rasters/{id}.put.description
API endpoint that allows projects to be viewed or edited.

# paths./service/rasters/{id}.put.parameters[].description
A unique integer value identifying this raster file.

# paths./service/rasters/{id}.patch.description
API endpoint that allows projects to be viewed or edited.

# paths./service/rasters/{id}.patch.parameters[].description
A unique integer value identifying this raster file.

# paths./service/rasters/{id}.delete.description
API endpoint that allows projects to be viewed or edited.

# paths./service/rasters/{id}.delete.parameters[].description
A unique integer value identifying this raster file.

# paths./service/shapefile/{shapefile_id}/line.get.description
API endpoint that allows viewing and editing shapefile polygons.

# paths./service/shapefile/{shapefile_id}/line/{id}.get.description
API endpoint that allows viewing and editing shapefile polygons.

# paths./service/shapefile/{shapefile_id}/multiline.get.description
API endpoint that allows viewing and editing shapefile polygons.

# paths./service/shapefile/{shapefile_id}/multiline/{id}.get.description
API endpoint that allows viewing and editing shapefile polygons.

# paths./service/shapefile/{shapefile_id}/multipolygon.get.description
API endpoint that allows viewing and editing shapefile multi polygons.

# paths./service/shapefile/{shapefile_id}/multipolygon/{id}.get.description
API endpoint that allows viewing and editing shapefile multi polygons.

# paths./service/shapefile/{shapefile_id}/point.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/{shapefile_id}/point/{id}.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/{shapefile_id}/polygon.get.description
API endpoint that allows viewing and editing shapefile polygons.

# paths./service/shapefile/{shapefile_id}/polygon/{id}.get.description
API endpoint that allows viewing and editing shapefile polygons.

# paths./service/shapefile/features{shapefile_id}/multipolygon.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/features{shapefile_id}/multipolygon/{id}.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/features/{shapefile_id}/linestring.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/features/{shapefile_id}/linestring/{id}.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/features/{shapefile_id}/multilinestring.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/features/{shapefile_id}/multilinestring/{id}.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/features/{shapefile_id}/point.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/features/{shapefile_id}/point/{id}.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/features/{shapefile_id}/polygon.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefile/features/{shapefile_id}/polygon/{id}.get.description
API endpoint that allows viewing and editing shapefile Points.

# paths./service/shapefiles.get.description
API endpoint that allows projects to be viewed or edited.

# paths./service/shapefiles.post.description
API endpoint that allows projects to be viewed or edited.

# paths./service/shapefiles/{id}.get.description
API endpoint that allows projects to be viewed or edited.

# paths./service/shapefiles/{id}.get.parameters[].description
A unique integer value identifying this shape file.

# paths./service/shapefiles/{id}.put.description
API endpoint that allows projects to be viewed or edited.

# paths./service/shapefiles/{id}.put.parameters[].description
A unique integer value identifying this shape file.

# paths./service/shapefiles/{id}.patch.description
API endpoint that allows projects to be viewed or edited.

# paths./service/shapefiles/{id}.patch.parameters[].description
A unique integer value identifying this shape file.

# paths./service/shapefiles/{id}.delete.description
API endpoint that allows projects to be viewed or edited.

# paths./service/shapefiles/{id}.delete.parameters[].description
A unique integer value identifying this shape file.

# paths./service/variable-type.get.description
API endpoint that allows global variables to be viewed or edited.

# paths./service/variable-type.post.description
Create a new variable type. Variable types are project wise

# paths./service/variable-type/{id}.get.description
API endpoint that allows global variables to be viewed or edited.

# paths./service/variable-type/{id}.get.parameters[].description
A unique integer value identifying this variable type.

# paths./service/variable-type/{id}.put.description
Update a variable type. Variable types are project wise

# paths./service/variable-type/{id}.put.parameters[].description
A unique integer value identifying this variable type.

# paths./service/variable-type/{id}.patch.description
API endpoint that allows global variables to be viewed or edited.

# paths./service/variable-type/{id}.patch.parameters[].description
A unique integer value identifying this variable type.

# paths./service/variable-type/{id}.delete.description
Delete a variable type. Variable types are project wise

# paths./service/variable-type/{id}.delete.parameters[].description
A unique integer value identifying this variable type.

# components.schemas.CategoryEnum.description
* `sensor` - Sensor
* `actuator` - Actuator
* `multi` - Multi-Target
* `meter` - Meter
* `hvac` - HVAC
* `network` - Network
* `implement` - Implement
* `irr-system` - irrSystem
* `irr-section` - irrSection
* `end-gun` - Endgun
* `other` - Other

# components.schemas.DeviceClassEnum.description
* `C0` - Class 0
* `C1` - Class 1
* `C2` - Class 2
* `na` - Not Applicable

# components.schemas.IngestionJobStatusEnum.description
* `queued` - Queued
* `processing` - Processing
* `completed` - Completed
* `failed` - Failed

# components.schemas.MenuItemInRequest.description
Input shape for creating/updating a project's menu.

The API accepts a hierarchical structure (children under `items`).
Sibling ordering is controlled by `order` (optional). If omitted, items are
ordered by their position in the input list.

`uid` is optional for new items and should be sent back unchanged on later
updates so the backend can preserve database and Wagtail page identity.

# components.schemas.MenuItemInRequest.properties.uid.description
Stable client-side UID. Omit only for brand-new items.

# components.schemas.MenuItemInRequest.properties.type.description
Item type, e.g. 'link', 'group', 'command'.

# components.schemas.MenuItemOut.properties.uid.description
Stable identity of the menu node across updates.

# components.schemas.MenuItemOut.properties.url.description
Original stored URL of the menu item, if any.

# components.schemas.MenuItemOut.properties.viewUrl.description
Backend-controlled URL for opening the linked CMS page in the browser.

# components.schemas.MenuItemOut.properties.headlessViewUrl.description
Backend-controlled URL that returns the linked CMS page as JSON.

# components.schemas.MenuItemOut.properties.wagtailAdminEditUrl.description
Backend-controlled URL that redirects to Wagtail edit.

# components.schemas.MenuItemOut.properties.wagtailAdminPreviewUrl.description
Backend-controlled URL that redirects to Wagtail preview.

# components.schemas.MenuSelectionGetOut.properties.menuItemId.description
Last selected menu item id for that project (null if none stored).

# components.schemas.MenuSelectionInRequest.properties.menuItemId.description
Id of the clicked or selected menu item.

# components.schemas.NameEnum.description
* `aqi` - Air Quality Index
* `temperature` - Temperature
* `co2` - CO2
* `humidity` - Humidity
* `light` - Light
* `motion` - Motion
* `fillingLevel` - Filling Level
* `occupancy` - Occupancy
* `power` - Power
* `pressure` - Pressure
* `smoke` - Smoke
* `energy` - Energy
* `airPollution` - Air Pollution
* `co` - CO
* `no` - NO
* `no2` - NO2
* `o3` - O3
* `so2` - SO2
* `pm1` - PM1
* `pm25` - PM2.5
* `pm10` - PM10
* `noiseLevel` - Noise Level
* `weatherConditions` - Weather Conditions
* `precipitation` - Precipitation
* `windSpeed` - Wind Speed
* `windDirection` - Wind Direction
* `atmosphericPressure` - Atmospheric Pressure
* `solarRadiation` - Solar Radiation
* `depth` - Depth
* `pH` - pH
* `conductivity` - Conductivity
* `conductance` - Conductance
* `tss` - TSS
* `tds` - TDS
* `turbidity` - Turbidity
* `salinity` - Salinity
* `orp` - ORP
* `cdom` - CDOM
* `waterPollution` - Water Pollution
* `location` - Location
* `speed` - Speed
* `heading` - Heading
* `weight` - Weight
* `waterConsumption` - Water Consumption
* `gasConsumption` - Gas Consumption
* `electricityConsumption` - Electricity Consumption
* `soilMoisture` - Soil Moisture
* `trafficFlow` - Traffic Flow
* `eatingActivity` - Eating Activity
* `milking` - Milking
* `movementActivity` - Movement Activity

# components.schemas.PatchedProjectMultipartRequest.description
Schema-only serializer for multipart/form-data project requests (create & update).
FileField is used for logo so drf-spectacular emits format:binary instead of format:uri.

# components.schemas.PatchedProjectRequest.properties.abbreviation.description
A user-facing project identifier, up to 16 characters long. Letters, digits, '_', '.', '-' and single spaces are allowed.

# components.schemas.Project.properties.abbreviation.description
A user-facing project identifier, up to 16 characters long. Letters, digits, '_', '.', '-' and single spaces are allowed.

# components.schemas.Project.properties.slug.description
URN/URL-safe identifier derived from the abbreviation.

# components.schemas.ProjectMultipartRequest.description
Schema-only serializer for multipart/form-data project requests (create & update).
FileField is used for logo so drf-spectacular emits format:binary instead of format:uri.

# components.schemas.ProjectRequest.properties.abbreviation.description
A user-facing project identifier, up to 16 characters long. Letters, digits, '_', '.', '-' and single spaces are allowed.

# components.schemas.StatusDd1Enum.description
* `Active` - Active
* `Draft` - Draft
* `Inactive` - Inactive