From 52e7bd0b693eb719f401012a3c0c065816b83fd4 Mon Sep 17 00:00:00 2001 From: Anthony Marcozzi Date: Mon, 25 Aug 2025 12:02:05 -0600 Subject: [PATCH 1/3] Update client library with new treemap versions --- fastfuels_sdk/client_library/__init__.py | 573 ++++++++---------- .../client_library/api/api_keys_api.py | 48 +- .../client_library/api/applications_api.py | 48 +- .../client_library/api/cookies_api.py | 18 +- .../client_library/api/tree_inventory_api.py | 426 ++++++++----- fastfuels_sdk/client_library/api_spec.json | 2 +- .../client_library/models/tree_map_version.py | 2 + fastfuels_sdk/inventories.py | 10 +- 8 files changed, 588 insertions(+), 539 deletions(-) diff --git a/fastfuels_sdk/client_library/__init__.py b/fastfuels_sdk/client_library/__init__.py index ae04e32..c2633a5 100644 --- a/fastfuels_sdk/client_library/__init__.py +++ b/fastfuels_sdk/client_library/__init__.py @@ -16,38 +16,171 @@ __version__ = "1.0.0" +# Define package exports +__all__ = [ + "APIKeysApi", + "ApplicationsApi", + "CookiesApi", + "DomainsApi", + "FeatureGridApi", + "FeaturesApi", + "GridsApi", + "IndexApi", + "InventoriesApi", + "RoadFeatureApi", + "SurfaceGridApi", + "TopographyGridApi", + "TreeGridApi", + "TreeInventoryApi", + "WaterFeatureApi", + "ApiResponse", + "ApiClient", + "Configuration", + "OpenApiException", + "ApiTypeError", + "ApiValueError", + "ApiKeyError", + "ApiAttributeError", + "ApiException", + "Access", + "Application", + "CreateApplicationRequest", + "CreateDomainRequest", + "CreateDomainRequestFeature", + "CreateDomainRequestFeatureCollection", + "CreateFeatureGridRequest", + "CreateKeyRequest", + "CreateRoadFeatureRequest", + "CreateSurfaceGridRequest", + "CreateTopographyGridRequest", + "CreateTreeGridRequest", + "CreateTreeInventoryRequest", + "CreateWaterFeatureRequest", + "Domain", + "DomainSortField", + "DomainSortOrder", + "Export", + "ExportStatus", + "FBFM40", + "FeatureGrid", + "FeatureGridAttribute", + "FeatureType", + "Features", + "GeoJSONFeature", + "GeoJSONFeatureCollection", + "GeoJSONStyleProperties", + "GeoJsonCRS", + "GeoJsonCRSProperties", + "Geometry", + "GridAttributeMetadataResponse", + "Grids", + "HTTPValidationError", + "Inventories", + "JobStatus", + "Key", + "LineString", + "ListApplicationsResponse", + "ListDomainResponse", + "ListKeysResponse", + "MetaCanopyHeightMapSource", + "Modifier", + "MultiLineString", + "MultiPoint", + "MultiPolygon", + "Operator", + "Point", + "Polygon", + "ProcessingError", + "RoadFeature", + "RoadFeatureSource", + "Scope", + "SurfaceGrid", + "SurfaceGridAttribute", + "SurfaceGridFBFMSource", + "SurfaceGridFuelDepthSource", + "SurfaceGridFuelLoadSource", + "SurfaceGridFuelMoistureSource", + "SurfaceGridInterpolationMethod", + "SurfaceGridLandfireFBFM40FuelLoadSource", + "SurfaceGridLandfireFBFM40Group", + "SurfaceGridLandfireFBFM40SAVRSource", + "SurfaceGridLandfireFBFM40Source", + "SurfaceGridModification", + "SurfaceGridModificationAction", + "SurfaceGridModificationCondition", + "SurfaceGridModificationFBFMAction", + "SurfaceGridModificationFBFMCondition", + "SurfaceGridModificationFuelHeightAction", + "SurfaceGridModificationFuelHeightCondition", + "SurfaceGridModificationFuelLoadAction", + "SurfaceGridModificationFuelLoadCondition", + "SurfaceGridModificationFuelMoistureAction", + "SurfaceGridModificationFuelMoistureCondition", + "SurfaceGridSAVRSource", + "SurfaceGridUniformFBFM40Value", + "SurfaceGridUniformValue", + "SurfaceGridUniformValueBySizeClass", + "TopographyGrid", + "TopographyGrid3DEPSource", + "TopographyGrid3DEPSourceAspect", + "TopographyGridAspectSource", + "TopographyGridAttribute", + "TopographyGridElevationSource", + "TopographyGridInterpolationMethod", + "TopographyGridLandfireSource", + "TopographyGridLandfireSourceAspect", + "TopographyGridSlopeSource", + "TopographyGridUniformValue", + "TreeGrid", + "TreeGridAttribute", + "TreeGridBulkDensitySource", + "TreeGridInventorySource", + "TreeGridSAVRSource", + "TreeGridSPCDSource", + "TreeGridUniformValue", + "TreeInventory", + "TreeInventoryModification", + "TreeInventoryModificationAction", + "TreeInventoryModificationCRAction", + "TreeInventoryModificationCRCondition", + "TreeInventoryModificationCondition", + "TreeInventoryModificationDIAAction", + "TreeInventoryModificationDIACondition", + "TreeInventoryModificationHTAction", + "TreeInventoryModificationHTCondition", + "TreeInventoryModificationRemoveAction", + "TreeInventoryModificationSPCDAction", + "TreeInventoryModificationSPCDCondition", + "TreeInventorySource", + "TreeInventoryTreatment", + "TreeInventoryTreatmentDirectionalThinning", + "TreeInventoryTreatmentProportionalThinning", + "TreeMapSource", + "TreeMapVersion", + "UpdateDomainRequest", + "UploadResponse", + "ValidationError", + "ValidationErrorLocInner", + "WaterFeature", + "WaterFeatureSource", +] + # import apis into sdk package from fastfuels_sdk.client_library.api.api_keys_api import APIKeysApi as APIKeysApi -from fastfuels_sdk.client_library.api.applications_api import ( - ApplicationsApi as ApplicationsApi, -) +from fastfuels_sdk.client_library.api.applications_api import ApplicationsApi as ApplicationsApi from fastfuels_sdk.client_library.api.cookies_api import CookiesApi as CookiesApi from fastfuels_sdk.client_library.api.domains_api import DomainsApi as DomainsApi -from fastfuels_sdk.client_library.api.feature_grid_api import ( - FeatureGridApi as FeatureGridApi, -) +from fastfuels_sdk.client_library.api.feature_grid_api import FeatureGridApi as FeatureGridApi from fastfuels_sdk.client_library.api.features_api import FeaturesApi as FeaturesApi from fastfuels_sdk.client_library.api.grids_api import GridsApi as GridsApi from fastfuels_sdk.client_library.api.index_api import IndexApi as IndexApi -from fastfuels_sdk.client_library.api.inventories_api import ( - InventoriesApi as InventoriesApi, -) -from fastfuels_sdk.client_library.api.road_feature_api import ( - RoadFeatureApi as RoadFeatureApi, -) -from fastfuels_sdk.client_library.api.surface_grid_api import ( - SurfaceGridApi as SurfaceGridApi, -) -from fastfuels_sdk.client_library.api.topography_grid_api import ( - TopographyGridApi as TopographyGridApi, -) +from fastfuels_sdk.client_library.api.inventories_api import InventoriesApi as InventoriesApi +from fastfuels_sdk.client_library.api.road_feature_api import RoadFeatureApi as RoadFeatureApi +from fastfuels_sdk.client_library.api.surface_grid_api import SurfaceGridApi as SurfaceGridApi +from fastfuels_sdk.client_library.api.topography_grid_api import TopographyGridApi as TopographyGridApi from fastfuels_sdk.client_library.api.tree_grid_api import TreeGridApi as TreeGridApi -from fastfuels_sdk.client_library.api.tree_inventory_api import ( - TreeInventoryApi as TreeInventoryApi, -) -from fastfuels_sdk.client_library.api.water_feature_api import ( - WaterFeatureApi as WaterFeatureApi, -) +from fastfuels_sdk.client_library.api.tree_inventory_api import TreeInventoryApi as TreeInventoryApi +from fastfuels_sdk.client_library.api.water_feature_api import WaterFeatureApi as WaterFeatureApi # import ApiClient from fastfuels_sdk.client_library.api_response import ApiResponse as ApiResponse @@ -57,324 +190,128 @@ from fastfuels_sdk.client_library.exceptions import ApiTypeError as ApiTypeError from fastfuels_sdk.client_library.exceptions import ApiValueError as ApiValueError from fastfuels_sdk.client_library.exceptions import ApiKeyError as ApiKeyError -from fastfuels_sdk.client_library.exceptions import ( - ApiAttributeError as ApiAttributeError, -) +from fastfuels_sdk.client_library.exceptions import ApiAttributeError as ApiAttributeError from fastfuels_sdk.client_library.exceptions import ApiException as ApiException # import models into sdk package from fastfuels_sdk.client_library.models.access import Access as Access from fastfuels_sdk.client_library.models.application import Application as Application -from fastfuels_sdk.client_library.models.create_application_request import ( - CreateApplicationRequest as CreateApplicationRequest, -) -from fastfuels_sdk.client_library.models.create_domain_request import ( - CreateDomainRequest as CreateDomainRequest, -) -from fastfuels_sdk.client_library.models.create_domain_request_feature import ( - CreateDomainRequestFeature as CreateDomainRequestFeature, -) -from fastfuels_sdk.client_library.models.create_domain_request_feature_collection import ( - CreateDomainRequestFeatureCollection as CreateDomainRequestFeatureCollection, -) -from fastfuels_sdk.client_library.models.create_feature_grid_request import ( - CreateFeatureGridRequest as CreateFeatureGridRequest, -) -from fastfuels_sdk.client_library.models.create_key_request import ( - CreateKeyRequest as CreateKeyRequest, -) -from fastfuels_sdk.client_library.models.create_road_feature_request import ( - CreateRoadFeatureRequest as CreateRoadFeatureRequest, -) -from fastfuels_sdk.client_library.models.create_surface_grid_request import ( - CreateSurfaceGridRequest as CreateSurfaceGridRequest, -) -from fastfuels_sdk.client_library.models.create_topography_grid_request import ( - CreateTopographyGridRequest as CreateTopographyGridRequest, -) -from fastfuels_sdk.client_library.models.create_tree_grid_request import ( - CreateTreeGridRequest as CreateTreeGridRequest, -) -from fastfuels_sdk.client_library.models.create_tree_inventory_request import ( - CreateTreeInventoryRequest as CreateTreeInventoryRequest, -) -from fastfuels_sdk.client_library.models.create_water_feature_request import ( - CreateWaterFeatureRequest as CreateWaterFeatureRequest, -) +from fastfuels_sdk.client_library.models.create_application_request import CreateApplicationRequest as CreateApplicationRequest +from fastfuels_sdk.client_library.models.create_domain_request import CreateDomainRequest as CreateDomainRequest +from fastfuels_sdk.client_library.models.create_domain_request_feature import CreateDomainRequestFeature as CreateDomainRequestFeature +from fastfuels_sdk.client_library.models.create_domain_request_feature_collection import CreateDomainRequestFeatureCollection as CreateDomainRequestFeatureCollection +from fastfuels_sdk.client_library.models.create_feature_grid_request import CreateFeatureGridRequest as CreateFeatureGridRequest +from fastfuels_sdk.client_library.models.create_key_request import CreateKeyRequest as CreateKeyRequest +from fastfuels_sdk.client_library.models.create_road_feature_request import CreateRoadFeatureRequest as CreateRoadFeatureRequest +from fastfuels_sdk.client_library.models.create_surface_grid_request import CreateSurfaceGridRequest as CreateSurfaceGridRequest +from fastfuels_sdk.client_library.models.create_topography_grid_request import CreateTopographyGridRequest as CreateTopographyGridRequest +from fastfuels_sdk.client_library.models.create_tree_grid_request import CreateTreeGridRequest as CreateTreeGridRequest +from fastfuels_sdk.client_library.models.create_tree_inventory_request import CreateTreeInventoryRequest as CreateTreeInventoryRequest +from fastfuels_sdk.client_library.models.create_water_feature_request import CreateWaterFeatureRequest as CreateWaterFeatureRequest from fastfuels_sdk.client_library.models.domain import Domain as Domain -from fastfuels_sdk.client_library.models.domain_sort_field import ( - DomainSortField as DomainSortField, -) -from fastfuels_sdk.client_library.models.domain_sort_order import ( - DomainSortOrder as DomainSortOrder, -) +from fastfuels_sdk.client_library.models.domain_sort_field import DomainSortField as DomainSortField +from fastfuels_sdk.client_library.models.domain_sort_order import DomainSortOrder as DomainSortOrder from fastfuels_sdk.client_library.models.export import Export as Export -from fastfuels_sdk.client_library.models.export_status import ( - ExportStatus as ExportStatus, -) +from fastfuels_sdk.client_library.models.export_status import ExportStatus as ExportStatus from fastfuels_sdk.client_library.models.fbfm40 import FBFM40 as FBFM40 from fastfuels_sdk.client_library.models.feature_grid import FeatureGrid as FeatureGrid -from fastfuels_sdk.client_library.models.feature_grid_attribute import ( - FeatureGridAttribute as FeatureGridAttribute, -) +from fastfuels_sdk.client_library.models.feature_grid_attribute import FeatureGridAttribute as FeatureGridAttribute from fastfuels_sdk.client_library.models.feature_type import FeatureType as FeatureType from fastfuels_sdk.client_library.models.features import Features as Features -from fastfuels_sdk.client_library.models.geo_json_feature import ( - GeoJSONFeature as GeoJSONFeature, -) -from fastfuels_sdk.client_library.models.geo_json_feature_collection import ( - GeoJSONFeatureCollection as GeoJSONFeatureCollection, -) -from fastfuels_sdk.client_library.models.geo_json_style_properties import ( - GeoJSONStyleProperties as GeoJSONStyleProperties, -) +from fastfuels_sdk.client_library.models.geo_json_feature import GeoJSONFeature as GeoJSONFeature +from fastfuels_sdk.client_library.models.geo_json_feature_collection import GeoJSONFeatureCollection as GeoJSONFeatureCollection +from fastfuels_sdk.client_library.models.geo_json_style_properties import GeoJSONStyleProperties as GeoJSONStyleProperties from fastfuels_sdk.client_library.models.geo_json_crs import GeoJsonCRS as GeoJsonCRS -from fastfuels_sdk.client_library.models.geo_json_crs_properties import ( - GeoJsonCRSProperties as GeoJsonCRSProperties, -) +from fastfuels_sdk.client_library.models.geo_json_crs_properties import GeoJsonCRSProperties as GeoJsonCRSProperties from fastfuels_sdk.client_library.models.geometry import Geometry as Geometry -from fastfuels_sdk.client_library.models.grid_attribute_metadata_response import ( - GridAttributeMetadataResponse as GridAttributeMetadataResponse, -) +from fastfuels_sdk.client_library.models.grid_attribute_metadata_response import GridAttributeMetadataResponse as GridAttributeMetadataResponse from fastfuels_sdk.client_library.models.grids import Grids as Grids -from fastfuels_sdk.client_library.models.http_validation_error import ( - HTTPValidationError as HTTPValidationError, -) +from fastfuels_sdk.client_library.models.http_validation_error import HTTPValidationError as HTTPValidationError from fastfuels_sdk.client_library.models.inventories import Inventories as Inventories from fastfuels_sdk.client_library.models.job_status import JobStatus as JobStatus from fastfuels_sdk.client_library.models.key import Key as Key from fastfuels_sdk.client_library.models.line_string import LineString as LineString -from fastfuels_sdk.client_library.models.list_applications_response import ( - ListApplicationsResponse as ListApplicationsResponse, -) -from fastfuels_sdk.client_library.models.list_domain_response import ( - ListDomainResponse as ListDomainResponse, -) -from fastfuels_sdk.client_library.models.list_keys_response import ( - ListKeysResponse as ListKeysResponse, -) -from fastfuels_sdk.client_library.models.meta_canopy_height_map_source import ( - MetaCanopyHeightMapSource as MetaCanopyHeightMapSource, -) +from fastfuels_sdk.client_library.models.list_applications_response import ListApplicationsResponse as ListApplicationsResponse +from fastfuels_sdk.client_library.models.list_domain_response import ListDomainResponse as ListDomainResponse +from fastfuels_sdk.client_library.models.list_keys_response import ListKeysResponse as ListKeysResponse +from fastfuels_sdk.client_library.models.meta_canopy_height_map_source import MetaCanopyHeightMapSource as MetaCanopyHeightMapSource from fastfuels_sdk.client_library.models.modifier import Modifier as Modifier -from fastfuels_sdk.client_library.models.multi_line_string import ( - MultiLineString as MultiLineString, -) +from fastfuels_sdk.client_library.models.multi_line_string import MultiLineString as MultiLineString from fastfuels_sdk.client_library.models.multi_point import MultiPoint as MultiPoint -from fastfuels_sdk.client_library.models.multi_polygon import ( - MultiPolygon as MultiPolygon, -) +from fastfuels_sdk.client_library.models.multi_polygon import MultiPolygon as MultiPolygon from fastfuels_sdk.client_library.models.operator import Operator as Operator from fastfuels_sdk.client_library.models.point import Point as Point from fastfuels_sdk.client_library.models.polygon import Polygon as Polygon -from fastfuels_sdk.client_library.models.processing_error import ( - ProcessingError as ProcessingError, -) +from fastfuels_sdk.client_library.models.processing_error import ProcessingError as ProcessingError from fastfuels_sdk.client_library.models.road_feature import RoadFeature as RoadFeature -from fastfuels_sdk.client_library.models.road_feature_source import ( - RoadFeatureSource as RoadFeatureSource, -) +from fastfuels_sdk.client_library.models.road_feature_source import RoadFeatureSource as RoadFeatureSource from fastfuels_sdk.client_library.models.scope import Scope as Scope from fastfuels_sdk.client_library.models.surface_grid import SurfaceGrid as SurfaceGrid -from fastfuels_sdk.client_library.models.surface_grid_attribute import ( - SurfaceGridAttribute as SurfaceGridAttribute, -) -from fastfuels_sdk.client_library.models.surface_grid_fbfm_source import ( - SurfaceGridFBFMSource as SurfaceGridFBFMSource, -) -from fastfuels_sdk.client_library.models.surface_grid_fuel_depth_source import ( - SurfaceGridFuelDepthSource as SurfaceGridFuelDepthSource, -) -from fastfuels_sdk.client_library.models.surface_grid_fuel_load_source import ( - SurfaceGridFuelLoadSource as SurfaceGridFuelLoadSource, -) -from fastfuels_sdk.client_library.models.surface_grid_fuel_moisture_source import ( - SurfaceGridFuelMoistureSource as SurfaceGridFuelMoistureSource, -) -from fastfuels_sdk.client_library.models.surface_grid_interpolation_method import ( - SurfaceGridInterpolationMethod as SurfaceGridInterpolationMethod, -) -from fastfuels_sdk.client_library.models.surface_grid_landfire_fbfm40_fuel_load_source import ( - SurfaceGridLandfireFBFM40FuelLoadSource as SurfaceGridLandfireFBFM40FuelLoadSource, -) -from fastfuels_sdk.client_library.models.surface_grid_landfire_fbfm40_group import ( - SurfaceGridLandfireFBFM40Group as SurfaceGridLandfireFBFM40Group, -) -from fastfuels_sdk.client_library.models.surface_grid_landfire_fbfm40_savr_source import ( - SurfaceGridLandfireFBFM40SAVRSource as SurfaceGridLandfireFBFM40SAVRSource, -) -from fastfuels_sdk.client_library.models.surface_grid_landfire_fbfm40_source import ( - SurfaceGridLandfireFBFM40Source as SurfaceGridLandfireFBFM40Source, -) -from fastfuels_sdk.client_library.models.surface_grid_modification import ( - SurfaceGridModification as SurfaceGridModification, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_action import ( - SurfaceGridModificationAction as SurfaceGridModificationAction, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_condition import ( - SurfaceGridModificationCondition as SurfaceGridModificationCondition, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_fbfm_action import ( - SurfaceGridModificationFBFMAction as SurfaceGridModificationFBFMAction, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_fbfm_condition import ( - SurfaceGridModificationFBFMCondition as SurfaceGridModificationFBFMCondition, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_height_action import ( - SurfaceGridModificationFuelHeightAction as SurfaceGridModificationFuelHeightAction, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_height_condition import ( - SurfaceGridModificationFuelHeightCondition as SurfaceGridModificationFuelHeightCondition, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_load_action import ( - SurfaceGridModificationFuelLoadAction as SurfaceGridModificationFuelLoadAction, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_load_condition import ( - SurfaceGridModificationFuelLoadCondition as SurfaceGridModificationFuelLoadCondition, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_moisture_action import ( - SurfaceGridModificationFuelMoistureAction as SurfaceGridModificationFuelMoistureAction, -) -from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_moisture_condition import ( - SurfaceGridModificationFuelMoistureCondition as SurfaceGridModificationFuelMoistureCondition, -) -from fastfuels_sdk.client_library.models.surface_grid_savr_source import ( - SurfaceGridSAVRSource as SurfaceGridSAVRSource, -) -from fastfuels_sdk.client_library.models.surface_grid_uniform_fbfm40_value import ( - SurfaceGridUniformFBFM40Value as SurfaceGridUniformFBFM40Value, -) -from fastfuels_sdk.client_library.models.surface_grid_uniform_value import ( - SurfaceGridUniformValue as SurfaceGridUniformValue, -) -from fastfuels_sdk.client_library.models.surface_grid_uniform_value_by_size_class import ( - SurfaceGridUniformValueBySizeClass as SurfaceGridUniformValueBySizeClass, -) -from fastfuels_sdk.client_library.models.topography_grid import ( - TopographyGrid as TopographyGrid, -) -from fastfuels_sdk.client_library.models.topography_grid3_dep_source import ( - TopographyGrid3DEPSource as TopographyGrid3DEPSource, -) -from fastfuels_sdk.client_library.models.topography_grid3_dep_source_aspect import ( - TopographyGrid3DEPSourceAspect as TopographyGrid3DEPSourceAspect, -) -from fastfuels_sdk.client_library.models.topography_grid_aspect_source import ( - TopographyGridAspectSource as TopographyGridAspectSource, -) -from fastfuels_sdk.client_library.models.topography_grid_attribute import ( - TopographyGridAttribute as TopographyGridAttribute, -) -from fastfuels_sdk.client_library.models.topography_grid_elevation_source import ( - TopographyGridElevationSource as TopographyGridElevationSource, -) -from fastfuels_sdk.client_library.models.topography_grid_interpolation_method import ( - TopographyGridInterpolationMethod as TopographyGridInterpolationMethod, -) -from fastfuels_sdk.client_library.models.topography_grid_landfire_source import ( - TopographyGridLandfireSource as TopographyGridLandfireSource, -) -from fastfuels_sdk.client_library.models.topography_grid_landfire_source_aspect import ( - TopographyGridLandfireSourceAspect as TopographyGridLandfireSourceAspect, -) -from fastfuels_sdk.client_library.models.topography_grid_slope_source import ( - TopographyGridSlopeSource as TopographyGridSlopeSource, -) -from fastfuels_sdk.client_library.models.topography_grid_uniform_value import ( - TopographyGridUniformValue as TopographyGridUniformValue, -) +from fastfuels_sdk.client_library.models.surface_grid_attribute import SurfaceGridAttribute as SurfaceGridAttribute +from fastfuels_sdk.client_library.models.surface_grid_fbfm_source import SurfaceGridFBFMSource as SurfaceGridFBFMSource +from fastfuels_sdk.client_library.models.surface_grid_fuel_depth_source import SurfaceGridFuelDepthSource as SurfaceGridFuelDepthSource +from fastfuels_sdk.client_library.models.surface_grid_fuel_load_source import SurfaceGridFuelLoadSource as SurfaceGridFuelLoadSource +from fastfuels_sdk.client_library.models.surface_grid_fuel_moisture_source import SurfaceGridFuelMoistureSource as SurfaceGridFuelMoistureSource +from fastfuels_sdk.client_library.models.surface_grid_interpolation_method import SurfaceGridInterpolationMethod as SurfaceGridInterpolationMethod +from fastfuels_sdk.client_library.models.surface_grid_landfire_fbfm40_fuel_load_source import SurfaceGridLandfireFBFM40FuelLoadSource as SurfaceGridLandfireFBFM40FuelLoadSource +from fastfuels_sdk.client_library.models.surface_grid_landfire_fbfm40_group import SurfaceGridLandfireFBFM40Group as SurfaceGridLandfireFBFM40Group +from fastfuels_sdk.client_library.models.surface_grid_landfire_fbfm40_savr_source import SurfaceGridLandfireFBFM40SAVRSource as SurfaceGridLandfireFBFM40SAVRSource +from fastfuels_sdk.client_library.models.surface_grid_landfire_fbfm40_source import SurfaceGridLandfireFBFM40Source as SurfaceGridLandfireFBFM40Source +from fastfuels_sdk.client_library.models.surface_grid_modification import SurfaceGridModification as SurfaceGridModification +from fastfuels_sdk.client_library.models.surface_grid_modification_action import SurfaceGridModificationAction as SurfaceGridModificationAction +from fastfuels_sdk.client_library.models.surface_grid_modification_condition import SurfaceGridModificationCondition as SurfaceGridModificationCondition +from fastfuels_sdk.client_library.models.surface_grid_modification_fbfm_action import SurfaceGridModificationFBFMAction as SurfaceGridModificationFBFMAction +from fastfuels_sdk.client_library.models.surface_grid_modification_fbfm_condition import SurfaceGridModificationFBFMCondition as SurfaceGridModificationFBFMCondition +from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_height_action import SurfaceGridModificationFuelHeightAction as SurfaceGridModificationFuelHeightAction +from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_height_condition import SurfaceGridModificationFuelHeightCondition as SurfaceGridModificationFuelHeightCondition +from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_load_action import SurfaceGridModificationFuelLoadAction as SurfaceGridModificationFuelLoadAction +from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_load_condition import SurfaceGridModificationFuelLoadCondition as SurfaceGridModificationFuelLoadCondition +from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_moisture_action import SurfaceGridModificationFuelMoistureAction as SurfaceGridModificationFuelMoistureAction +from fastfuels_sdk.client_library.models.surface_grid_modification_fuel_moisture_condition import SurfaceGridModificationFuelMoistureCondition as SurfaceGridModificationFuelMoistureCondition +from fastfuels_sdk.client_library.models.surface_grid_savr_source import SurfaceGridSAVRSource as SurfaceGridSAVRSource +from fastfuels_sdk.client_library.models.surface_grid_uniform_fbfm40_value import SurfaceGridUniformFBFM40Value as SurfaceGridUniformFBFM40Value +from fastfuels_sdk.client_library.models.surface_grid_uniform_value import SurfaceGridUniformValue as SurfaceGridUniformValue +from fastfuels_sdk.client_library.models.surface_grid_uniform_value_by_size_class import SurfaceGridUniformValueBySizeClass as SurfaceGridUniformValueBySizeClass +from fastfuels_sdk.client_library.models.topography_grid import TopographyGrid as TopographyGrid +from fastfuels_sdk.client_library.models.topography_grid3_dep_source import TopographyGrid3DEPSource as TopographyGrid3DEPSource +from fastfuels_sdk.client_library.models.topography_grid3_dep_source_aspect import TopographyGrid3DEPSourceAspect as TopographyGrid3DEPSourceAspect +from fastfuels_sdk.client_library.models.topography_grid_aspect_source import TopographyGridAspectSource as TopographyGridAspectSource +from fastfuels_sdk.client_library.models.topography_grid_attribute import TopographyGridAttribute as TopographyGridAttribute +from fastfuels_sdk.client_library.models.topography_grid_elevation_source import TopographyGridElevationSource as TopographyGridElevationSource +from fastfuels_sdk.client_library.models.topography_grid_interpolation_method import TopographyGridInterpolationMethod as TopographyGridInterpolationMethod +from fastfuels_sdk.client_library.models.topography_grid_landfire_source import TopographyGridLandfireSource as TopographyGridLandfireSource +from fastfuels_sdk.client_library.models.topography_grid_landfire_source_aspect import TopographyGridLandfireSourceAspect as TopographyGridLandfireSourceAspect +from fastfuels_sdk.client_library.models.topography_grid_slope_source import TopographyGridSlopeSource as TopographyGridSlopeSource +from fastfuels_sdk.client_library.models.topography_grid_uniform_value import TopographyGridUniformValue as TopographyGridUniformValue from fastfuels_sdk.client_library.models.tree_grid import TreeGrid as TreeGrid -from fastfuels_sdk.client_library.models.tree_grid_attribute import ( - TreeGridAttribute as TreeGridAttribute, -) -from fastfuels_sdk.client_library.models.tree_grid_bulk_density_source import ( - TreeGridBulkDensitySource as TreeGridBulkDensitySource, -) -from fastfuels_sdk.client_library.models.tree_grid_inventory_source import ( - TreeGridInventorySource as TreeGridInventorySource, -) -from fastfuels_sdk.client_library.models.tree_grid_savr_source import ( - TreeGridSAVRSource as TreeGridSAVRSource, -) -from fastfuels_sdk.client_library.models.tree_grid_spcd_source import ( - TreeGridSPCDSource as TreeGridSPCDSource, -) -from fastfuels_sdk.client_library.models.tree_grid_uniform_value import ( - TreeGridUniformValue as TreeGridUniformValue, -) -from fastfuels_sdk.client_library.models.tree_inventory import ( - TreeInventory as TreeInventory, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification import ( - TreeInventoryModification as TreeInventoryModification, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_action import ( - TreeInventoryModificationAction as TreeInventoryModificationAction, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_cr_action import ( - TreeInventoryModificationCRAction as TreeInventoryModificationCRAction, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_cr_condition import ( - TreeInventoryModificationCRCondition as TreeInventoryModificationCRCondition, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_condition import ( - TreeInventoryModificationCondition as TreeInventoryModificationCondition, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_dia_action import ( - TreeInventoryModificationDIAAction as TreeInventoryModificationDIAAction, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_dia_condition import ( - TreeInventoryModificationDIACondition as TreeInventoryModificationDIACondition, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_ht_action import ( - TreeInventoryModificationHTAction as TreeInventoryModificationHTAction, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_ht_condition import ( - TreeInventoryModificationHTCondition as TreeInventoryModificationHTCondition, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_remove_action import ( - TreeInventoryModificationRemoveAction as TreeInventoryModificationRemoveAction, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_spcd_action import ( - TreeInventoryModificationSPCDAction as TreeInventoryModificationSPCDAction, -) -from fastfuels_sdk.client_library.models.tree_inventory_modification_spcd_condition import ( - TreeInventoryModificationSPCDCondition as TreeInventoryModificationSPCDCondition, -) -from fastfuels_sdk.client_library.models.tree_inventory_source import ( - TreeInventorySource as TreeInventorySource, -) -from fastfuels_sdk.client_library.models.tree_inventory_treatment import ( - TreeInventoryTreatment as TreeInventoryTreatment, -) -from fastfuels_sdk.client_library.models.tree_inventory_treatment_directional_thinning import ( - TreeInventoryTreatmentDirectionalThinning as TreeInventoryTreatmentDirectionalThinning, -) -from fastfuels_sdk.client_library.models.tree_inventory_treatment_proportional_thinning import ( - TreeInventoryTreatmentProportionalThinning as TreeInventoryTreatmentProportionalThinning, -) -from fastfuels_sdk.client_library.models.tree_map_source import ( - TreeMapSource as TreeMapSource, -) -from fastfuels_sdk.client_library.models.tree_map_version import ( - TreeMapVersion as TreeMapVersion, -) -from fastfuels_sdk.client_library.models.update_domain_request import ( - UpdateDomainRequest as UpdateDomainRequest, -) -from fastfuels_sdk.client_library.models.upload_response import ( - UploadResponse as UploadResponse, -) -from fastfuels_sdk.client_library.models.validation_error import ( - ValidationError as ValidationError, -) -from fastfuels_sdk.client_library.models.validation_error_loc_inner import ( - ValidationErrorLocInner as ValidationErrorLocInner, -) -from fastfuels_sdk.client_library.models.water_feature import ( - WaterFeature as WaterFeature, -) -from fastfuels_sdk.client_library.models.water_feature_source import ( - WaterFeatureSource as WaterFeatureSource, -) +from fastfuels_sdk.client_library.models.tree_grid_attribute import TreeGridAttribute as TreeGridAttribute +from fastfuels_sdk.client_library.models.tree_grid_bulk_density_source import TreeGridBulkDensitySource as TreeGridBulkDensitySource +from fastfuels_sdk.client_library.models.tree_grid_inventory_source import TreeGridInventorySource as TreeGridInventorySource +from fastfuels_sdk.client_library.models.tree_grid_savr_source import TreeGridSAVRSource as TreeGridSAVRSource +from fastfuels_sdk.client_library.models.tree_grid_spcd_source import TreeGridSPCDSource as TreeGridSPCDSource +from fastfuels_sdk.client_library.models.tree_grid_uniform_value import TreeGridUniformValue as TreeGridUniformValue +from fastfuels_sdk.client_library.models.tree_inventory import TreeInventory as TreeInventory +from fastfuels_sdk.client_library.models.tree_inventory_modification import TreeInventoryModification as TreeInventoryModification +from fastfuels_sdk.client_library.models.tree_inventory_modification_action import TreeInventoryModificationAction as TreeInventoryModificationAction +from fastfuels_sdk.client_library.models.tree_inventory_modification_cr_action import TreeInventoryModificationCRAction as TreeInventoryModificationCRAction +from fastfuels_sdk.client_library.models.tree_inventory_modification_cr_condition import TreeInventoryModificationCRCondition as TreeInventoryModificationCRCondition +from fastfuels_sdk.client_library.models.tree_inventory_modification_condition import TreeInventoryModificationCondition as TreeInventoryModificationCondition +from fastfuels_sdk.client_library.models.tree_inventory_modification_dia_action import TreeInventoryModificationDIAAction as TreeInventoryModificationDIAAction +from fastfuels_sdk.client_library.models.tree_inventory_modification_dia_condition import TreeInventoryModificationDIACondition as TreeInventoryModificationDIACondition +from fastfuels_sdk.client_library.models.tree_inventory_modification_ht_action import TreeInventoryModificationHTAction as TreeInventoryModificationHTAction +from fastfuels_sdk.client_library.models.tree_inventory_modification_ht_condition import TreeInventoryModificationHTCondition as TreeInventoryModificationHTCondition +from fastfuels_sdk.client_library.models.tree_inventory_modification_remove_action import TreeInventoryModificationRemoveAction as TreeInventoryModificationRemoveAction +from fastfuels_sdk.client_library.models.tree_inventory_modification_spcd_action import TreeInventoryModificationSPCDAction as TreeInventoryModificationSPCDAction +from fastfuels_sdk.client_library.models.tree_inventory_modification_spcd_condition import TreeInventoryModificationSPCDCondition as TreeInventoryModificationSPCDCondition +from fastfuels_sdk.client_library.models.tree_inventory_source import TreeInventorySource as TreeInventorySource +from fastfuels_sdk.client_library.models.tree_inventory_treatment import TreeInventoryTreatment as TreeInventoryTreatment +from fastfuels_sdk.client_library.models.tree_inventory_treatment_directional_thinning import TreeInventoryTreatmentDirectionalThinning as TreeInventoryTreatmentDirectionalThinning +from fastfuels_sdk.client_library.models.tree_inventory_treatment_proportional_thinning import TreeInventoryTreatmentProportionalThinning as TreeInventoryTreatmentProportionalThinning +from fastfuels_sdk.client_library.models.tree_map_source import TreeMapSource as TreeMapSource +from fastfuels_sdk.client_library.models.tree_map_version import TreeMapVersion as TreeMapVersion +from fastfuels_sdk.client_library.models.update_domain_request import UpdateDomainRequest as UpdateDomainRequest +from fastfuels_sdk.client_library.models.upload_response import UploadResponse as UploadResponse +from fastfuels_sdk.client_library.models.validation_error import ValidationError as ValidationError +from fastfuels_sdk.client_library.models.validation_error_loc_inner import ValidationErrorLocInner as ValidationErrorLocInner +from fastfuels_sdk.client_library.models.water_feature import WaterFeature as WaterFeature +from fastfuels_sdk.client_library.models.water_feature_source import WaterFeatureSource as WaterFeatureSource diff --git a/fastfuels_sdk/client_library/api/api_keys_api.py b/fastfuels_sdk/client_library/api/api_keys_api.py index 06da949..917dbda 100644 --- a/fastfuels_sdk/client_library/api/api_keys_api.py +++ b/fastfuels_sdk/client_library/api/api_keys_api.py @@ -58,9 +58,9 @@ def create_key( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> Key: - """New API key + """Create API key - Create a new API key + Create a new API key for authentication :param create_key_request: (required) :type create_key_request: CreateKeyRequest @@ -126,9 +126,9 @@ def create_key_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[Key]: - """New API key + """Create API key - Create a new API key + Create a new API key for authentication :param create_key_request: (required) :type create_key_request: CreateKeyRequest @@ -194,9 +194,9 @@ def create_key_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """New API key + """Create API key - Create a new API key + Create a new API key for authentication :param create_key_request: (required) :type create_key_request: CreateKeyRequest @@ -336,9 +336,9 @@ def delete_key( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> None: - """Delete key + """Delete API key - Delete an API key by ID + Permanently delete an API key by ID :param key_id: (required) :type key_id: str @@ -404,9 +404,9 @@ def delete_key_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[None]: - """Delete key + """Delete API key - Delete an API key by ID + Permanently delete an API key by ID :param key_id: (required) :type key_id: str @@ -472,9 +472,9 @@ def delete_key_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Delete key + """Delete API key - Delete an API key by ID + Permanently delete an API key by ID :param key_id: (required) :type key_id: str @@ -601,9 +601,9 @@ def get_key_by_id( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> Key: - """Get key + """Get API key - Get an API key by ID + Get API key details by ID :param key_id: (required) :type key_id: str @@ -669,9 +669,9 @@ def get_key_by_id_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[Key]: - """Get key + """Get API key - Get an API key by ID + Get API key details by ID :param key_id: (required) :type key_id: str @@ -737,9 +737,9 @@ def get_key_by_id_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Get key + """Get API key - Get an API key by ID + Get API key details by ID :param key_id: (required) :type key_id: str @@ -867,9 +867,9 @@ def list_keys( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ListKeysResponse: - """List keys + """List API keys - List API keys for both users and applications + Get paginated list of accessible API keys :param page: :type page: int @@ -939,9 +939,9 @@ def list_keys_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[ListKeysResponse]: - """List keys + """List API keys - List API keys for both users and applications + Get paginated list of accessible API keys :param page: :type page: int @@ -1011,9 +1011,9 @@ def list_keys_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """List keys + """List API keys - List API keys for both users and applications + Get paginated list of accessible API keys :param page: :type page: int diff --git a/fastfuels_sdk/client_library/api/applications_api.py b/fastfuels_sdk/client_library/api/applications_api.py index ab21737..2f761fe 100644 --- a/fastfuels_sdk/client_library/api/applications_api.py +++ b/fastfuels_sdk/client_library/api/applications_api.py @@ -58,9 +58,9 @@ def create_application( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> Application: - """New application + """Create application - Create a new application + Create a new application for API access :param create_application_request: (required) :type create_application_request: CreateApplicationRequest @@ -126,9 +126,9 @@ def create_application_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[Application]: - """New application + """Create application - Create a new application + Create a new application for API access :param create_application_request: (required) :type create_application_request: CreateApplicationRequest @@ -194,9 +194,9 @@ def create_application_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """New application + """Create application - Create a new application + Create a new application for API access :param create_application_request: (required) :type create_application_request: CreateApplicationRequest @@ -601,9 +601,9 @@ def get_application( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> Application: - """Get Application + """Get application - Get an application by ID + Get application details by ID :param application_id: (required) :type application_id: str @@ -669,9 +669,9 @@ def get_application_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[Application]: - """Get Application + """Get application - Get an application by ID + Get application details by ID :param application_id: (required) :type application_id: str @@ -737,9 +737,9 @@ def get_application_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Get Application + """Get application - Get an application by ID + Get application details by ID :param application_id: (required) :type application_id: str @@ -867,9 +867,9 @@ def list_applications( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ListApplicationsResponse: - """List application + """List applications - List applications for authenticated user + Get paginated list of user's applications :param page: :type page: int @@ -939,9 +939,9 @@ def list_applications_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[ListApplicationsResponse]: - """List application + """List applications - List applications for authenticated user + Get paginated list of user's applications :param page: :type page: int @@ -1011,9 +1011,9 @@ def list_applications_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """List application + """List applications - List applications for authenticated user + Get paginated list of user's applications :param page: :type page: int @@ -1151,9 +1151,9 @@ def update_application( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> Application: - """Update Application + """Update application - Update an application by ID + Update application details :param application_id: (required) :type application_id: str @@ -1223,9 +1223,9 @@ def update_application_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[Application]: - """Update Application + """Update application - Update an application by ID + Update application details :param application_id: (required) :type application_id: str @@ -1295,9 +1295,9 @@ def update_application_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Update Application + """Update application - Update an application by ID + Update application details :param application_id: (required) :type application_id: str diff --git a/fastfuels_sdk/client_library/api/cookies_api.py b/fastfuels_sdk/client_library/api/cookies_api.py index fd7ac1a..ec22b87 100644 --- a/fastfuels_sdk/client_library/api/cookies_api.py +++ b/fastfuels_sdk/client_library/api/cookies_api.py @@ -52,8 +52,9 @@ def delete_cookie( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> object: - """Delete Cookie + """Delete session cookie + Remove session cookie for logout :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -114,8 +115,9 @@ def delete_cookie_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[object]: - """Delete Cookie + """Delete session cookie + Remove session cookie for logout :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -176,8 +178,9 @@ def delete_cookie_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Delete Cookie + """Delete session cookie + Remove session cookie for logout :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -294,8 +297,9 @@ def get_cookie( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> object: - """Get Cookie + """Create session cookie + Create a session cookie for authentication :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -356,8 +360,9 @@ def get_cookie_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[object]: - """Get Cookie + """Create session cookie + Create a session cookie for authentication :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -418,8 +423,9 @@ def get_cookie_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Get Cookie + """Create session cookie + Create a session cookie for authentication :param _request_timeout: timeout setting for this request. If one number provided, it will be total request diff --git a/fastfuels_sdk/client_library/api/tree_inventory_api.py b/fastfuels_sdk/client_library/api/tree_inventory_api.py index 79f15b9..b923524 100644 --- a/fastfuels_sdk/client_library/api/tree_inventory_api.py +++ b/fastfuels_sdk/client_library/api/tree_inventory_api.py @@ -16,9 +16,8 @@ from typing import Any, Dict, List, Optional, Tuple, Union from typing_extensions import Annotated -from fastfuels_sdk.client_library.models.create_tree_inventory_request import ( - CreateTreeInventoryRequest, -) +from pydantic import StrictStr, field_validator +from fastfuels_sdk.client_library.models.create_tree_inventory_request import CreateTreeInventoryRequest from fastfuels_sdk.client_library.models.export import Export from fastfuels_sdk.client_library.models.tree_inventory import TreeInventory @@ -39,6 +38,7 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client + @validate_call def create_tree_inventory( self, @@ -48,8 +48,9 @@ def create_tree_inventory( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -58,7 +59,7 @@ def create_tree_inventory( ) -> TreeInventory: """Create Tree Inventory - # Create Tree Inventory This endpoint creates a new tree inventory resource for a specific domain. Tree Inventory data represents a complete forest inventory that exists within the spatial context of a domain. The tree inventory data can be generated using various data products and models that provide either national coverage (e.g., TreeMap) or local coverage. On resource creation, the tree inventory data is set to a status of \"pending\". The tree inventory data is generated in the background using the specified method (e.g., TreeMap). Once the tree inventory data is generated and available for user access, the status is updated to \"completed\". ## Endpoint ``` POST /v1/domains/{domainId}/inventories/tree ``` ## Path Parameters - `domainId` (string, required): The unique identifier of the domain for which you want to create the tree inventory. ## Request Body The request body should be a JSON object containing the following fields: - `sources` (array of strings, required): List of data sources to be used for building the tree inventory. Currently, only one data source at a time is supported. Possible values are: - `\"TreeMap\"`: Indicates that the tree inventory should be created using the TreeMap raster product. This approach generates a tree inventory with national coverage. - `\"file\"`: Indicates that you will upload a file via a signed url. Please see File Source Configuration for more info. - `modifications` (array of objects, optional): List of modifications to apply to the tree inventory data. Maximum 1000 modifications allowed. - `treatments` (array of objects, optional): List of silvicultural treatments to apply to the tree inventory. Maximum 1000 treatments allowed. - `featureMasks` (array of strings, optional): List of Features to mask tree inventory data. ### TreeMap Source Configuration If `\"TreeMap\"` is included in the `sources`, the request body can include additional configurations for `TreeMap`: - `TreeMap` (object, optional): Advanced configurations for the TreeMap data source. - `version` (string, optional): The version of TreeMap to use. Default is `\"2016\"`. Possible values are: - `\"2014\"`: Use the 2014 version of TreeMap. - `\"2016\"`: Use the 2016 version of TreeMap. - `seed` (integer, optional): The random seed to use for generating the tree inventory. If not provided, a random seed will be generated. - `canopyHeightMapConfiguration` (object, optional): Canopy height map configuration for TreeMap data source. If provided, the canopy height map will be used to segment and impute the coarse 30m TreeMap data with high-resolution canopy height data. Details of this approach will be provided in an upcoming publication. Please contact support.fastfuels@silvxlabs.com for more information. - `source` (string, required): The source of the canopy height map data. Possible values are: - `\"Meta2024\"`: Use the Meta2024 canopy height map data. More information about this data source can be found here: https://www.sciencedirect.com/science/article/pii/S003442572300439X ### File Source Configuration Generate Signed URL for Tree Inventory Upload If the source is `\"file\"`, this endpoint generates a signed URL that allows users to upload a CSV file representing the tree inventory data. The signed URL is valid for 1 hour and has a maximum upload size of 500 MB. The full work flow consists of the following steps: 1. Call this endpoint to get a signed URL 2. Perform a put request to send your file to the signed url. Here is a python example: ```[python] with open(\"your_file_goes_here.csv\", \"rb\") as file: upload_response = requests.put( signed_url_response[\"file\"][\"url\"], data=file, headers=signed_url_response[\"file\"][\"headers\"], ) ``` **Note**: the signed_url_response has a field named \"file\" with the relevant info for the put request. 3. Your file will be validated and processed in the background 4. The status of your upload can be retrieved via and inventory get() request #### Required Columns The CSV file must include the following columns with their specified data types and constraints: 1. **SPCD** (Integer) - FIA species code - Must be an integer - Represents standard FIA species classifications 2. **STATUSCD** (Integer) - Tree status code - Must be one of these values: - 0: No status - 1: Live - 2: Dead - 3: Missing 3. **DIA** (Float) - Diameter at breast height (DBH) - Unit: centimeters (cm) - Range: 0 to 1200 cm - Measured at 1.37 meters above ground 4. **HT** (Float) - Tree height - Unit: meters (m) - Range: 0 to 116 meters - Measured from ground to tree top 5. **CR** (Float) - Crown ratio - Unit: ratio (dimensionless) - Range: 0 to 1 - Represents the ratio of crown length to total tree height 6. **X** (Float) - X coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (west to east) - Required: Yes - Used for spatial positioning 7. **Y** (Float) - Y coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (south to north) - Required: Yes - Used for spatial positioning ### Treatments The `treatments` field is an array of treatment objects. Each treatment object represents a silvicultural treatment to be applied to the tree inventory. Currently, there are two types of treatment types available: 1. Proportional Thinning 2. Directional Thinning #### Proportional Thinning - `method`: \"proportionalThinning\" (string, required) - `targetMetric`: \"basalArea\" (string, required) - `targetValue`: float (required) - Unit: square meters per hectare (m²/ha) - Represents the target basal area after thinning #### Directional Thinning - `method`: \"directionalThinning\" (string, required) - `direction`: (string, required) - Possible values: \"below\" or \"above\" - Indicates whether to thin from below (smallest to largest) or above (largest to smallest) - `targetMetric`: (string, required) - Possible values: \"diameter\" or \"basalArea\" - `targetValue`: float (required) - Units of the targetValue quantity depends on the targetMetric: - For \"diameter\": centimeters (cm) - For \"basalArea\": square meters per hectare (m²/ha) - Represents the threshold for thinning (diameter) or the target basal area after thinning Note: The order of treatments in the array determines the sequence in which they will be applied to the tree inventory. ## Response If the request is successful, the endpoint will return a `201 Created` status code and the created tree inventory resource in the response body. The response body will be a JSON object with the following fields: - `status` (string): The status of the tree inventory. Will be set to `\"pending\"` initially. - `createdOn` (string): The timestamp when the tree inventory was created. - `modifiedOn` (string): The timestamp when the tree inventory was last modified. - `checksum` (string): A unique checksum for the tree inventory resource. ## Error Responses - `404 Not Found`: The specified domain does not exist or the user does not have access to it. - `422 Unprocessable Entity`: The request body is invalid or missing required fields. - `429 Too Many Requests`: An error occurred while submitting the job due to resource exhaustion. + # Create Tree Inventory This endpoint creates a new tree inventory resource for a specific domain. Tree Inventory data represents a complete forest inventory that exists within the spatial context of a domain. The tree inventory data can be generated using various data products and models that provide either national coverage (e.g., TreeMap) or local coverage. On resource creation, the tree inventory data is set to a status of \"pending\". The tree inventory data is generated in the background using the specified method (e.g., TreeMap). Once the tree inventory data is generated and available for user access, the status is updated to \"completed\". ## Endpoint ``` POST /v1/domains/{domainId}/inventories/tree ``` ## Path Parameters - `domainId` (string, required): The unique identifier of the domain for which you want to create the tree inventory. ## Request Body The request body should be a JSON object containing the following fields: - `sources` (array of strings, required): List of data sources to be used for building the tree inventory. Currently, only one data source at a time is supported. Possible values are: - `\"TreeMap\"`: Indicates that the tree inventory should be created using the TreeMap raster product. This approach generates a tree inventory with national coverage. - `\"file\"`: Indicates that you will upload a file via a signed url. Please see File Source Configuration for more info. - `modifications` (array of objects, optional): List of modifications to apply to the tree inventory data. Maximum 1000 modifications allowed. - `treatments` (array of objects, optional): List of silvicultural treatments to apply to the tree inventory. Maximum 1000 treatments allowed. - `featureMasks` (array of strings, optional): List of Features to mask tree inventory data. ### TreeMap Source Configuration If `\"TreeMap\"` is included in the `sources`, the request body can include additional configurations for `TreeMap`: - `TreeMap` (object, optional): Advanced configurations for the TreeMap data source. - `version` (string, optional): The version of TreeMap to use. Default is `\"2022\"`. Possible values are: - `\"2014\"`: Use the 2014 version of TreeMap. - `\"2016\"`: Use the 2016 version of TreeMap. - `\"2020\"`: Use the 2020 version of TreeMap. - `\"2022\"`: Use the 2022 version of TreeMap. - `seed` (integer, optional): The random seed to use for generating the tree inventory. If not provided, a random seed will be generated. - `canopyHeightMapConfiguration` (object, optional): Canopy height map configuration for TreeMap data source. If provided, the canopy height map will be used to segment and impute the coarse 30m TreeMap data with high-resolution canopy height data. Details of this approach will be provided in an upcoming publication. Please contact support.fastfuels@silvxlabs.com for more information. - `source` (string, required): The source of the canopy height map data. Possible values are: - `\"Meta2024\"`: Use the Meta2024 canopy height map data. More information about this data source can be found here: https://www.sciencedirect.com/science/article/pii/S003442572300439X ### File Source Configuration Generate Signed URL for Tree Inventory Upload If the source is `\"file\"`, this endpoint generates a signed URL that allows users to upload a CSV file representing the tree inventory data. The signed URL is valid for 1 hour and has a maximum upload size of 500 MB. The full work flow consists of the following steps: 1. Call this endpoint to get a signed URL 2. Perform a put request to send your file to the signed url. Here is a python example: ```[python] with open(\"your_file_goes_here.csv\", \"rb\") as file: upload_response = requests.put( signed_url_response[\"file\"][\"url\"], data=file, headers=signed_url_response[\"file\"][\"headers\"], ) ``` **Note**: the signed_url_response has a field named \"file\" with the relevant info for the put request. 3. Your file will be validated and processed in the background 4. The status of your upload can be retrieved via and inventory get() request #### Required Columns The CSV file must include the following columns with their specified data types and constraints: 1. **SPCD** (Integer) - FIA species code - Must be an integer - Represents standard FIA species classifications 2. **STATUSCD** (Integer) - Tree status code - Must be one of these values: - 0: No status - 1: Live - 2: Dead - 3: Missing 3. **DIA** (Float) - Diameter at breast height (DBH) - Unit: centimeters (cm) - Range: 0 to 1200 cm - Measured at 1.37 meters above ground 4. **HT** (Float) - Tree height - Unit: meters (m) - Range: 0 to 116 meters - Measured from ground to tree top 5. **CR** (Float) - Crown ratio - Unit: ratio (dimensionless) - Range: 0 to 1 - Represents the ratio of crown length to total tree height 6. **X** (Float) - X coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (west to east) - Required: Yes - Used for spatial positioning 7. **Y** (Float) - Y coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (south to north) - Required: Yes - Used for spatial positioning ### Treatments The `treatments` field is an array of treatment objects. Each treatment object represents a silvicultural treatment to be applied to the tree inventory. Currently, there are two types of treatment types available: 1. Proportional Thinning 2. Directional Thinning #### Proportional Thinning - `method`: \"proportionalThinning\" (string, required) - `targetMetric`: \"basalArea\" (string, required) - `targetValue`: float (required) - Unit: square meters per hectare (m²/ha) - Represents the target basal area after thinning #### Directional Thinning - `method`: \"directionalThinning\" (string, required) - `direction`: (string, required) - Possible values: \"below\" or \"above\" - Indicates whether to thin from below (smallest to largest) or above (largest to smallest) - `targetMetric`: (string, required) - Possible values: \"diameter\" or \"basalArea\" - `targetValue`: float (required) - Units of the targetValue quantity depends on the targetMetric: - For \"diameter\": centimeters (cm) - For \"basalArea\": square meters per hectare (m²/ha) - Represents the threshold for thinning (diameter) or the target basal area after thinning Note: The order of treatments in the array determines the sequence in which they will be applied to the tree inventory. ## Response If the request is successful, the endpoint will return a `201 Created` status code and the created tree inventory resource in the response body. The response body will be a JSON object with the following fields: - `status` (string): The status of the tree inventory. Will be set to `\"pending\"` initially. - `createdOn` (string): The timestamp when the tree inventory was created. - `modifiedOn` (string): The timestamp when the tree inventory was last modified. - `checksum` (string): A unique checksum for the tree inventory resource. ## Error Responses - `404 Not Found`: The specified domain does not exist or the user does not have access to it. - `422 Unprocessable Entity`: The request body is invalid or missing required fields. - `429 Too Many Requests`: An error occurred while submitting the job due to resource exhaustion. :param domain_id: (required) :type domain_id: str @@ -84,7 +85,7 @@ def create_tree_inventory( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_tree_inventory_serialize( domain_id=domain_id, @@ -92,15 +93,16 @@ def create_tree_inventory( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "201": "TreeInventory", - "422": "HTTPValidationError", + '201': "TreeInventory", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -108,6 +110,7 @@ def create_tree_inventory( response_types_map=_response_types_map, ).data + @validate_call def create_tree_inventory_with_http_info( self, @@ -117,8 +120,9 @@ def create_tree_inventory_with_http_info( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -127,7 +131,7 @@ def create_tree_inventory_with_http_info( ) -> ApiResponse[TreeInventory]: """Create Tree Inventory - # Create Tree Inventory This endpoint creates a new tree inventory resource for a specific domain. Tree Inventory data represents a complete forest inventory that exists within the spatial context of a domain. The tree inventory data can be generated using various data products and models that provide either national coverage (e.g., TreeMap) or local coverage. On resource creation, the tree inventory data is set to a status of \"pending\". The tree inventory data is generated in the background using the specified method (e.g., TreeMap). Once the tree inventory data is generated and available for user access, the status is updated to \"completed\". ## Endpoint ``` POST /v1/domains/{domainId}/inventories/tree ``` ## Path Parameters - `domainId` (string, required): The unique identifier of the domain for which you want to create the tree inventory. ## Request Body The request body should be a JSON object containing the following fields: - `sources` (array of strings, required): List of data sources to be used for building the tree inventory. Currently, only one data source at a time is supported. Possible values are: - `\"TreeMap\"`: Indicates that the tree inventory should be created using the TreeMap raster product. This approach generates a tree inventory with national coverage. - `\"file\"`: Indicates that you will upload a file via a signed url. Please see File Source Configuration for more info. - `modifications` (array of objects, optional): List of modifications to apply to the tree inventory data. Maximum 1000 modifications allowed. - `treatments` (array of objects, optional): List of silvicultural treatments to apply to the tree inventory. Maximum 1000 treatments allowed. - `featureMasks` (array of strings, optional): List of Features to mask tree inventory data. ### TreeMap Source Configuration If `\"TreeMap\"` is included in the `sources`, the request body can include additional configurations for `TreeMap`: - `TreeMap` (object, optional): Advanced configurations for the TreeMap data source. - `version` (string, optional): The version of TreeMap to use. Default is `\"2016\"`. Possible values are: - `\"2014\"`: Use the 2014 version of TreeMap. - `\"2016\"`: Use the 2016 version of TreeMap. - `seed` (integer, optional): The random seed to use for generating the tree inventory. If not provided, a random seed will be generated. - `canopyHeightMapConfiguration` (object, optional): Canopy height map configuration for TreeMap data source. If provided, the canopy height map will be used to segment and impute the coarse 30m TreeMap data with high-resolution canopy height data. Details of this approach will be provided in an upcoming publication. Please contact support.fastfuels@silvxlabs.com for more information. - `source` (string, required): The source of the canopy height map data. Possible values are: - `\"Meta2024\"`: Use the Meta2024 canopy height map data. More information about this data source can be found here: https://www.sciencedirect.com/science/article/pii/S003442572300439X ### File Source Configuration Generate Signed URL for Tree Inventory Upload If the source is `\"file\"`, this endpoint generates a signed URL that allows users to upload a CSV file representing the tree inventory data. The signed URL is valid for 1 hour and has a maximum upload size of 500 MB. The full work flow consists of the following steps: 1. Call this endpoint to get a signed URL 2. Perform a put request to send your file to the signed url. Here is a python example: ```[python] with open(\"your_file_goes_here.csv\", \"rb\") as file: upload_response = requests.put( signed_url_response[\"file\"][\"url\"], data=file, headers=signed_url_response[\"file\"][\"headers\"], ) ``` **Note**: the signed_url_response has a field named \"file\" with the relevant info for the put request. 3. Your file will be validated and processed in the background 4. The status of your upload can be retrieved via and inventory get() request #### Required Columns The CSV file must include the following columns with their specified data types and constraints: 1. **SPCD** (Integer) - FIA species code - Must be an integer - Represents standard FIA species classifications 2. **STATUSCD** (Integer) - Tree status code - Must be one of these values: - 0: No status - 1: Live - 2: Dead - 3: Missing 3. **DIA** (Float) - Diameter at breast height (DBH) - Unit: centimeters (cm) - Range: 0 to 1200 cm - Measured at 1.37 meters above ground 4. **HT** (Float) - Tree height - Unit: meters (m) - Range: 0 to 116 meters - Measured from ground to tree top 5. **CR** (Float) - Crown ratio - Unit: ratio (dimensionless) - Range: 0 to 1 - Represents the ratio of crown length to total tree height 6. **X** (Float) - X coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (west to east) - Required: Yes - Used for spatial positioning 7. **Y** (Float) - Y coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (south to north) - Required: Yes - Used for spatial positioning ### Treatments The `treatments` field is an array of treatment objects. Each treatment object represents a silvicultural treatment to be applied to the tree inventory. Currently, there are two types of treatment types available: 1. Proportional Thinning 2. Directional Thinning #### Proportional Thinning - `method`: \"proportionalThinning\" (string, required) - `targetMetric`: \"basalArea\" (string, required) - `targetValue`: float (required) - Unit: square meters per hectare (m²/ha) - Represents the target basal area after thinning #### Directional Thinning - `method`: \"directionalThinning\" (string, required) - `direction`: (string, required) - Possible values: \"below\" or \"above\" - Indicates whether to thin from below (smallest to largest) or above (largest to smallest) - `targetMetric`: (string, required) - Possible values: \"diameter\" or \"basalArea\" - `targetValue`: float (required) - Units of the targetValue quantity depends on the targetMetric: - For \"diameter\": centimeters (cm) - For \"basalArea\": square meters per hectare (m²/ha) - Represents the threshold for thinning (diameter) or the target basal area after thinning Note: The order of treatments in the array determines the sequence in which they will be applied to the tree inventory. ## Response If the request is successful, the endpoint will return a `201 Created` status code and the created tree inventory resource in the response body. The response body will be a JSON object with the following fields: - `status` (string): The status of the tree inventory. Will be set to `\"pending\"` initially. - `createdOn` (string): The timestamp when the tree inventory was created. - `modifiedOn` (string): The timestamp when the tree inventory was last modified. - `checksum` (string): A unique checksum for the tree inventory resource. ## Error Responses - `404 Not Found`: The specified domain does not exist or the user does not have access to it. - `422 Unprocessable Entity`: The request body is invalid or missing required fields. - `429 Too Many Requests`: An error occurred while submitting the job due to resource exhaustion. + # Create Tree Inventory This endpoint creates a new tree inventory resource for a specific domain. Tree Inventory data represents a complete forest inventory that exists within the spatial context of a domain. The tree inventory data can be generated using various data products and models that provide either national coverage (e.g., TreeMap) or local coverage. On resource creation, the tree inventory data is set to a status of \"pending\". The tree inventory data is generated in the background using the specified method (e.g., TreeMap). Once the tree inventory data is generated and available for user access, the status is updated to \"completed\". ## Endpoint ``` POST /v1/domains/{domainId}/inventories/tree ``` ## Path Parameters - `domainId` (string, required): The unique identifier of the domain for which you want to create the tree inventory. ## Request Body The request body should be a JSON object containing the following fields: - `sources` (array of strings, required): List of data sources to be used for building the tree inventory. Currently, only one data source at a time is supported. Possible values are: - `\"TreeMap\"`: Indicates that the tree inventory should be created using the TreeMap raster product. This approach generates a tree inventory with national coverage. - `\"file\"`: Indicates that you will upload a file via a signed url. Please see File Source Configuration for more info. - `modifications` (array of objects, optional): List of modifications to apply to the tree inventory data. Maximum 1000 modifications allowed. - `treatments` (array of objects, optional): List of silvicultural treatments to apply to the tree inventory. Maximum 1000 treatments allowed. - `featureMasks` (array of strings, optional): List of Features to mask tree inventory data. ### TreeMap Source Configuration If `\"TreeMap\"` is included in the `sources`, the request body can include additional configurations for `TreeMap`: - `TreeMap` (object, optional): Advanced configurations for the TreeMap data source. - `version` (string, optional): The version of TreeMap to use. Default is `\"2022\"`. Possible values are: - `\"2014\"`: Use the 2014 version of TreeMap. - `\"2016\"`: Use the 2016 version of TreeMap. - `\"2020\"`: Use the 2020 version of TreeMap. - `\"2022\"`: Use the 2022 version of TreeMap. - `seed` (integer, optional): The random seed to use for generating the tree inventory. If not provided, a random seed will be generated. - `canopyHeightMapConfiguration` (object, optional): Canopy height map configuration for TreeMap data source. If provided, the canopy height map will be used to segment and impute the coarse 30m TreeMap data with high-resolution canopy height data. Details of this approach will be provided in an upcoming publication. Please contact support.fastfuels@silvxlabs.com for more information. - `source` (string, required): The source of the canopy height map data. Possible values are: - `\"Meta2024\"`: Use the Meta2024 canopy height map data. More information about this data source can be found here: https://www.sciencedirect.com/science/article/pii/S003442572300439X ### File Source Configuration Generate Signed URL for Tree Inventory Upload If the source is `\"file\"`, this endpoint generates a signed URL that allows users to upload a CSV file representing the tree inventory data. The signed URL is valid for 1 hour and has a maximum upload size of 500 MB. The full work flow consists of the following steps: 1. Call this endpoint to get a signed URL 2. Perform a put request to send your file to the signed url. Here is a python example: ```[python] with open(\"your_file_goes_here.csv\", \"rb\") as file: upload_response = requests.put( signed_url_response[\"file\"][\"url\"], data=file, headers=signed_url_response[\"file\"][\"headers\"], ) ``` **Note**: the signed_url_response has a field named \"file\" with the relevant info for the put request. 3. Your file will be validated and processed in the background 4. The status of your upload can be retrieved via and inventory get() request #### Required Columns The CSV file must include the following columns with their specified data types and constraints: 1. **SPCD** (Integer) - FIA species code - Must be an integer - Represents standard FIA species classifications 2. **STATUSCD** (Integer) - Tree status code - Must be one of these values: - 0: No status - 1: Live - 2: Dead - 3: Missing 3. **DIA** (Float) - Diameter at breast height (DBH) - Unit: centimeters (cm) - Range: 0 to 1200 cm - Measured at 1.37 meters above ground 4. **HT** (Float) - Tree height - Unit: meters (m) - Range: 0 to 116 meters - Measured from ground to tree top 5. **CR** (Float) - Crown ratio - Unit: ratio (dimensionless) - Range: 0 to 1 - Represents the ratio of crown length to total tree height 6. **X** (Float) - X coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (west to east) - Required: Yes - Used for spatial positioning 7. **Y** (Float) - Y coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (south to north) - Required: Yes - Used for spatial positioning ### Treatments The `treatments` field is an array of treatment objects. Each treatment object represents a silvicultural treatment to be applied to the tree inventory. Currently, there are two types of treatment types available: 1. Proportional Thinning 2. Directional Thinning #### Proportional Thinning - `method`: \"proportionalThinning\" (string, required) - `targetMetric`: \"basalArea\" (string, required) - `targetValue`: float (required) - Unit: square meters per hectare (m²/ha) - Represents the target basal area after thinning #### Directional Thinning - `method`: \"directionalThinning\" (string, required) - `direction`: (string, required) - Possible values: \"below\" or \"above\" - Indicates whether to thin from below (smallest to largest) or above (largest to smallest) - `targetMetric`: (string, required) - Possible values: \"diameter\" or \"basalArea\" - `targetValue`: float (required) - Units of the targetValue quantity depends on the targetMetric: - For \"diameter\": centimeters (cm) - For \"basalArea\": square meters per hectare (m²/ha) - Represents the threshold for thinning (diameter) or the target basal area after thinning Note: The order of treatments in the array determines the sequence in which they will be applied to the tree inventory. ## Response If the request is successful, the endpoint will return a `201 Created` status code and the created tree inventory resource in the response body. The response body will be a JSON object with the following fields: - `status` (string): The status of the tree inventory. Will be set to `\"pending\"` initially. - `createdOn` (string): The timestamp when the tree inventory was created. - `modifiedOn` (string): The timestamp when the tree inventory was last modified. - `checksum` (string): A unique checksum for the tree inventory resource. ## Error Responses - `404 Not Found`: The specified domain does not exist or the user does not have access to it. - `422 Unprocessable Entity`: The request body is invalid or missing required fields. - `429 Too Many Requests`: An error occurred while submitting the job due to resource exhaustion. :param domain_id: (required) :type domain_id: str @@ -153,7 +157,7 @@ def create_tree_inventory_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_tree_inventory_serialize( domain_id=domain_id, @@ -161,15 +165,16 @@ def create_tree_inventory_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "201": "TreeInventory", - "422": "HTTPValidationError", + '201': "TreeInventory", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -177,6 +182,7 @@ def create_tree_inventory_with_http_info( response_types_map=_response_types_map, ) + @validate_call def create_tree_inventory_without_preload_content( self, @@ -186,8 +192,9 @@ def create_tree_inventory_without_preload_content( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -196,7 +203,7 @@ def create_tree_inventory_without_preload_content( ) -> RESTResponseType: """Create Tree Inventory - # Create Tree Inventory This endpoint creates a new tree inventory resource for a specific domain. Tree Inventory data represents a complete forest inventory that exists within the spatial context of a domain. The tree inventory data can be generated using various data products and models that provide either national coverage (e.g., TreeMap) or local coverage. On resource creation, the tree inventory data is set to a status of \"pending\". The tree inventory data is generated in the background using the specified method (e.g., TreeMap). Once the tree inventory data is generated and available for user access, the status is updated to \"completed\". ## Endpoint ``` POST /v1/domains/{domainId}/inventories/tree ``` ## Path Parameters - `domainId` (string, required): The unique identifier of the domain for which you want to create the tree inventory. ## Request Body The request body should be a JSON object containing the following fields: - `sources` (array of strings, required): List of data sources to be used for building the tree inventory. Currently, only one data source at a time is supported. Possible values are: - `\"TreeMap\"`: Indicates that the tree inventory should be created using the TreeMap raster product. This approach generates a tree inventory with national coverage. - `\"file\"`: Indicates that you will upload a file via a signed url. Please see File Source Configuration for more info. - `modifications` (array of objects, optional): List of modifications to apply to the tree inventory data. Maximum 1000 modifications allowed. - `treatments` (array of objects, optional): List of silvicultural treatments to apply to the tree inventory. Maximum 1000 treatments allowed. - `featureMasks` (array of strings, optional): List of Features to mask tree inventory data. ### TreeMap Source Configuration If `\"TreeMap\"` is included in the `sources`, the request body can include additional configurations for `TreeMap`: - `TreeMap` (object, optional): Advanced configurations for the TreeMap data source. - `version` (string, optional): The version of TreeMap to use. Default is `\"2016\"`. Possible values are: - `\"2014\"`: Use the 2014 version of TreeMap. - `\"2016\"`: Use the 2016 version of TreeMap. - `seed` (integer, optional): The random seed to use for generating the tree inventory. If not provided, a random seed will be generated. - `canopyHeightMapConfiguration` (object, optional): Canopy height map configuration for TreeMap data source. If provided, the canopy height map will be used to segment and impute the coarse 30m TreeMap data with high-resolution canopy height data. Details of this approach will be provided in an upcoming publication. Please contact support.fastfuels@silvxlabs.com for more information. - `source` (string, required): The source of the canopy height map data. Possible values are: - `\"Meta2024\"`: Use the Meta2024 canopy height map data. More information about this data source can be found here: https://www.sciencedirect.com/science/article/pii/S003442572300439X ### File Source Configuration Generate Signed URL for Tree Inventory Upload If the source is `\"file\"`, this endpoint generates a signed URL that allows users to upload a CSV file representing the tree inventory data. The signed URL is valid for 1 hour and has a maximum upload size of 500 MB. The full work flow consists of the following steps: 1. Call this endpoint to get a signed URL 2. Perform a put request to send your file to the signed url. Here is a python example: ```[python] with open(\"your_file_goes_here.csv\", \"rb\") as file: upload_response = requests.put( signed_url_response[\"file\"][\"url\"], data=file, headers=signed_url_response[\"file\"][\"headers\"], ) ``` **Note**: the signed_url_response has a field named \"file\" with the relevant info for the put request. 3. Your file will be validated and processed in the background 4. The status of your upload can be retrieved via and inventory get() request #### Required Columns The CSV file must include the following columns with their specified data types and constraints: 1. **SPCD** (Integer) - FIA species code - Must be an integer - Represents standard FIA species classifications 2. **STATUSCD** (Integer) - Tree status code - Must be one of these values: - 0: No status - 1: Live - 2: Dead - 3: Missing 3. **DIA** (Float) - Diameter at breast height (DBH) - Unit: centimeters (cm) - Range: 0 to 1200 cm - Measured at 1.37 meters above ground 4. **HT** (Float) - Tree height - Unit: meters (m) - Range: 0 to 116 meters - Measured from ground to tree top 5. **CR** (Float) - Crown ratio - Unit: ratio (dimensionless) - Range: 0 to 1 - Represents the ratio of crown length to total tree height 6. **X** (Float) - X coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (west to east) - Required: Yes - Used for spatial positioning 7. **Y** (Float) - Y coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (south to north) - Required: Yes - Used for spatial positioning ### Treatments The `treatments` field is an array of treatment objects. Each treatment object represents a silvicultural treatment to be applied to the tree inventory. Currently, there are two types of treatment types available: 1. Proportional Thinning 2. Directional Thinning #### Proportional Thinning - `method`: \"proportionalThinning\" (string, required) - `targetMetric`: \"basalArea\" (string, required) - `targetValue`: float (required) - Unit: square meters per hectare (m²/ha) - Represents the target basal area after thinning #### Directional Thinning - `method`: \"directionalThinning\" (string, required) - `direction`: (string, required) - Possible values: \"below\" or \"above\" - Indicates whether to thin from below (smallest to largest) or above (largest to smallest) - `targetMetric`: (string, required) - Possible values: \"diameter\" or \"basalArea\" - `targetValue`: float (required) - Units of the targetValue quantity depends on the targetMetric: - For \"diameter\": centimeters (cm) - For \"basalArea\": square meters per hectare (m²/ha) - Represents the threshold for thinning (diameter) or the target basal area after thinning Note: The order of treatments in the array determines the sequence in which they will be applied to the tree inventory. ## Response If the request is successful, the endpoint will return a `201 Created` status code and the created tree inventory resource in the response body. The response body will be a JSON object with the following fields: - `status` (string): The status of the tree inventory. Will be set to `\"pending\"` initially. - `createdOn` (string): The timestamp when the tree inventory was created. - `modifiedOn` (string): The timestamp when the tree inventory was last modified. - `checksum` (string): A unique checksum for the tree inventory resource. ## Error Responses - `404 Not Found`: The specified domain does not exist or the user does not have access to it. - `422 Unprocessable Entity`: The request body is invalid or missing required fields. - `429 Too Many Requests`: An error occurred while submitting the job due to resource exhaustion. + # Create Tree Inventory This endpoint creates a new tree inventory resource for a specific domain. Tree Inventory data represents a complete forest inventory that exists within the spatial context of a domain. The tree inventory data can be generated using various data products and models that provide either national coverage (e.g., TreeMap) or local coverage. On resource creation, the tree inventory data is set to a status of \"pending\". The tree inventory data is generated in the background using the specified method (e.g., TreeMap). Once the tree inventory data is generated and available for user access, the status is updated to \"completed\". ## Endpoint ``` POST /v1/domains/{domainId}/inventories/tree ``` ## Path Parameters - `domainId` (string, required): The unique identifier of the domain for which you want to create the tree inventory. ## Request Body The request body should be a JSON object containing the following fields: - `sources` (array of strings, required): List of data sources to be used for building the tree inventory. Currently, only one data source at a time is supported. Possible values are: - `\"TreeMap\"`: Indicates that the tree inventory should be created using the TreeMap raster product. This approach generates a tree inventory with national coverage. - `\"file\"`: Indicates that you will upload a file via a signed url. Please see File Source Configuration for more info. - `modifications` (array of objects, optional): List of modifications to apply to the tree inventory data. Maximum 1000 modifications allowed. - `treatments` (array of objects, optional): List of silvicultural treatments to apply to the tree inventory. Maximum 1000 treatments allowed. - `featureMasks` (array of strings, optional): List of Features to mask tree inventory data. ### TreeMap Source Configuration If `\"TreeMap\"` is included in the `sources`, the request body can include additional configurations for `TreeMap`: - `TreeMap` (object, optional): Advanced configurations for the TreeMap data source. - `version` (string, optional): The version of TreeMap to use. Default is `\"2022\"`. Possible values are: - `\"2014\"`: Use the 2014 version of TreeMap. - `\"2016\"`: Use the 2016 version of TreeMap. - `\"2020\"`: Use the 2020 version of TreeMap. - `\"2022\"`: Use the 2022 version of TreeMap. - `seed` (integer, optional): The random seed to use for generating the tree inventory. If not provided, a random seed will be generated. - `canopyHeightMapConfiguration` (object, optional): Canopy height map configuration for TreeMap data source. If provided, the canopy height map will be used to segment and impute the coarse 30m TreeMap data with high-resolution canopy height data. Details of this approach will be provided in an upcoming publication. Please contact support.fastfuels@silvxlabs.com for more information. - `source` (string, required): The source of the canopy height map data. Possible values are: - `\"Meta2024\"`: Use the Meta2024 canopy height map data. More information about this data source can be found here: https://www.sciencedirect.com/science/article/pii/S003442572300439X ### File Source Configuration Generate Signed URL for Tree Inventory Upload If the source is `\"file\"`, this endpoint generates a signed URL that allows users to upload a CSV file representing the tree inventory data. The signed URL is valid for 1 hour and has a maximum upload size of 500 MB. The full work flow consists of the following steps: 1. Call this endpoint to get a signed URL 2. Perform a put request to send your file to the signed url. Here is a python example: ```[python] with open(\"your_file_goes_here.csv\", \"rb\") as file: upload_response = requests.put( signed_url_response[\"file\"][\"url\"], data=file, headers=signed_url_response[\"file\"][\"headers\"], ) ``` **Note**: the signed_url_response has a field named \"file\" with the relevant info for the put request. 3. Your file will be validated and processed in the background 4. The status of your upload can be retrieved via and inventory get() request #### Required Columns The CSV file must include the following columns with their specified data types and constraints: 1. **SPCD** (Integer) - FIA species code - Must be an integer - Represents standard FIA species classifications 2. **STATUSCD** (Integer) - Tree status code - Must be one of these values: - 0: No status - 1: Live - 2: Dead - 3: Missing 3. **DIA** (Float) - Diameter at breast height (DBH) - Unit: centimeters (cm) - Range: 0 to 1200 cm - Measured at 1.37 meters above ground 4. **HT** (Float) - Tree height - Unit: meters (m) - Range: 0 to 116 meters - Measured from ground to tree top 5. **CR** (Float) - Crown ratio - Unit: ratio (dimensionless) - Range: 0 to 1 - Represents the ratio of crown length to total tree height 6. **X** (Float) - X coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (west to east) - Required: Yes - Used for spatial positioning 7. **Y** (Float) - Y coordinate in projected coordinate system - Unit: meters (m) - Range: Must fall within domain bounds (south to north) - Required: Yes - Used for spatial positioning ### Treatments The `treatments` field is an array of treatment objects. Each treatment object represents a silvicultural treatment to be applied to the tree inventory. Currently, there are two types of treatment types available: 1. Proportional Thinning 2. Directional Thinning #### Proportional Thinning - `method`: \"proportionalThinning\" (string, required) - `targetMetric`: \"basalArea\" (string, required) - `targetValue`: float (required) - Unit: square meters per hectare (m²/ha) - Represents the target basal area after thinning #### Directional Thinning - `method`: \"directionalThinning\" (string, required) - `direction`: (string, required) - Possible values: \"below\" or \"above\" - Indicates whether to thin from below (smallest to largest) or above (largest to smallest) - `targetMetric`: (string, required) - Possible values: \"diameter\" or \"basalArea\" - `targetValue`: float (required) - Units of the targetValue quantity depends on the targetMetric: - For \"diameter\": centimeters (cm) - For \"basalArea\": square meters per hectare (m²/ha) - Represents the threshold for thinning (diameter) or the target basal area after thinning Note: The order of treatments in the array determines the sequence in which they will be applied to the tree inventory. ## Response If the request is successful, the endpoint will return a `201 Created` status code and the created tree inventory resource in the response body. The response body will be a JSON object with the following fields: - `status` (string): The status of the tree inventory. Will be set to `\"pending\"` initially. - `createdOn` (string): The timestamp when the tree inventory was created. - `modifiedOn` (string): The timestamp when the tree inventory was last modified. - `checksum` (string): A unique checksum for the tree inventory resource. ## Error Responses - `404 Not Found`: The specified domain does not exist or the user does not have access to it. - `422 Unprocessable Entity`: The request body is invalid or missing required fields. - `429 Too Many Requests`: An error occurred while submitting the job due to resource exhaustion. :param domain_id: (required) :type domain_id: str @@ -222,7 +229,7 @@ def create_tree_inventory_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_tree_inventory_serialize( domain_id=domain_id, @@ -230,18 +237,20 @@ def create_tree_inventory_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "201": "TreeInventory", - "422": "HTTPValidationError", + '201': "TreeInventory", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) return response_data.response + def _create_tree_inventory_serialize( self, domain_id, @@ -254,7 +263,8 @@ def _create_tree_inventory_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -267,7 +277,7 @@ def _create_tree_inventory_serialize( # process the path parameters if domain_id is not None: - _path_params["domainId"] = domain_id + _path_params['domainId'] = domain_id # process the query parameters # process the header parameters # process the form parameters @@ -275,28 +285,38 @@ def _create_tree_inventory_serialize( if create_tree_inventory_request is not None: _body_params = create_tree_inventory_request + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] ) # set the HTTP header `Content-Type` if _content_type: - _header_params["Content-Type"] = _content_type + _header_params['Content-Type'] = _content_type else: - _default_content_type = self.api_client.select_header_content_type( - ["application/json"] + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) ) if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["APIKeyHeader", "HTTPBearer"] + _auth_settings: List[str] = [ + 'APIKeyHeader', + 'HTTPBearer' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/v1/domains/{domainId}/inventories/tree", + method='POST', + resource_path='/v1/domains/{domainId}/inventories/tree', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -306,9 +326,12 @@ def _create_tree_inventory_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def create_tree_inventory_export( self, @@ -318,8 +341,9 @@ def create_tree_inventory_export( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -354,7 +378,7 @@ def create_tree_inventory_export( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_tree_inventory_export_serialize( domain_id=domain_id, @@ -362,15 +386,16 @@ def create_tree_inventory_export( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Export", - "422": "HTTPValidationError", + '201': "Export", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -378,6 +403,7 @@ def create_tree_inventory_export( response_types_map=_response_types_map, ).data + @validate_call def create_tree_inventory_export_with_http_info( self, @@ -387,8 +413,9 @@ def create_tree_inventory_export_with_http_info( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -423,7 +450,7 @@ def create_tree_inventory_export_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_tree_inventory_export_serialize( domain_id=domain_id, @@ -431,15 +458,16 @@ def create_tree_inventory_export_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Export", - "422": "HTTPValidationError", + '201': "Export", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -447,6 +475,7 @@ def create_tree_inventory_export_with_http_info( response_types_map=_response_types_map, ) + @validate_call def create_tree_inventory_export_without_preload_content( self, @@ -456,8 +485,9 @@ def create_tree_inventory_export_without_preload_content( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -492,7 +522,7 @@ def create_tree_inventory_export_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_tree_inventory_export_serialize( domain_id=domain_id, @@ -500,18 +530,20 @@ def create_tree_inventory_export_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Export", - "422": "HTTPValidationError", + '201': "Export", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) return response_data.response + def _create_tree_inventory_export_serialize( self, domain_id, @@ -524,7 +556,8 @@ def _create_tree_inventory_export_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -537,26 +570,33 @@ def _create_tree_inventory_export_serialize( # process the path parameters if domain_id is not None: - _path_params["domainId"] = domain_id + _path_params['domainId'] = domain_id if export_format is not None: - _path_params["exportFormat"] = export_format + _path_params['exportFormat'] = export_format # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] ) + # authentication setting - _auth_settings: List[str] = ["APIKeyHeader", "HTTPBearer"] + _auth_settings: List[str] = [ + 'APIKeyHeader', + 'HTTPBearer' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/v1/domains/{domainId}/inventories/tree/exports/{exportFormat}", + method='POST', + resource_path='/v1/domains/{domainId}/inventories/tree/exports/{exportFormat}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -566,9 +606,12 @@ def _create_tree_inventory_export_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def delete_tree_inventory( self, @@ -577,8 +620,9 @@ def delete_tree_inventory( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -611,22 +655,23 @@ def delete_tree_inventory( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_tree_inventory_serialize( domain_id=domain_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "422": "HTTPValidationError", + '204': None, + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -634,6 +679,7 @@ def delete_tree_inventory( response_types_map=_response_types_map, ).data + @validate_call def delete_tree_inventory_with_http_info( self, @@ -642,8 +688,9 @@ def delete_tree_inventory_with_http_info( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -676,22 +723,23 @@ def delete_tree_inventory_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_tree_inventory_serialize( domain_id=domain_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "422": "HTTPValidationError", + '204': None, + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -699,6 +747,7 @@ def delete_tree_inventory_with_http_info( response_types_map=_response_types_map, ) + @validate_call def delete_tree_inventory_without_preload_content( self, @@ -707,8 +756,9 @@ def delete_tree_inventory_without_preload_content( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -741,25 +791,27 @@ def delete_tree_inventory_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_tree_inventory_serialize( domain_id=domain_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "422": "HTTPValidationError", + '204': None, + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) return response_data.response + def _delete_tree_inventory_serialize( self, domain_id, @@ -771,7 +823,8 @@ def _delete_tree_inventory_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -784,24 +837,31 @@ def _delete_tree_inventory_serialize( # process the path parameters if domain_id is not None: - _path_params["domainId"] = domain_id + _path_params['domainId'] = domain_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] ) + # authentication setting - _auth_settings: List[str] = ["APIKeyHeader", "HTTPBearer"] + _auth_settings: List[str] = [ + 'APIKeyHeader', + 'HTTPBearer' + ] return self.api_client.param_serialize( - method="DELETE", - resource_path="/v1/domains/{domainId}/inventories/tree", + method='DELETE', + resource_path='/v1/domains/{domainId}/inventories/tree', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -811,9 +871,12 @@ def _delete_tree_inventory_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def get_tree_inventory( self, @@ -822,8 +885,9 @@ def get_tree_inventory( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -856,22 +920,23 @@ def get_tree_inventory( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_tree_inventory_serialize( domain_id=domain_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TreeInventory", - "422": "HTTPValidationError", + '200': "TreeInventory", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -879,6 +944,7 @@ def get_tree_inventory( response_types_map=_response_types_map, ).data + @validate_call def get_tree_inventory_with_http_info( self, @@ -887,8 +953,9 @@ def get_tree_inventory_with_http_info( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -921,22 +988,23 @@ def get_tree_inventory_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_tree_inventory_serialize( domain_id=domain_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TreeInventory", - "422": "HTTPValidationError", + '200': "TreeInventory", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -944,6 +1012,7 @@ def get_tree_inventory_with_http_info( response_types_map=_response_types_map, ) + @validate_call def get_tree_inventory_without_preload_content( self, @@ -952,8 +1021,9 @@ def get_tree_inventory_without_preload_content( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -986,25 +1056,27 @@ def get_tree_inventory_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_tree_inventory_serialize( domain_id=domain_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TreeInventory", - "422": "HTTPValidationError", + '200': "TreeInventory", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) return response_data.response + def _get_tree_inventory_serialize( self, domain_id, @@ -1016,7 +1088,8 @@ def _get_tree_inventory_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -1029,24 +1102,31 @@ def _get_tree_inventory_serialize( # process the path parameters if domain_id is not None: - _path_params["domainId"] = domain_id + _path_params['domainId'] = domain_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] ) + # authentication setting - _auth_settings: List[str] = ["APIKeyHeader", "HTTPBearer"] + _auth_settings: List[str] = [ + 'APIKeyHeader', + 'HTTPBearer' + ] return self.api_client.param_serialize( - method="GET", - resource_path="/v1/domains/{domainId}/inventories/tree", + method='GET', + resource_path='/v1/domains/{domainId}/inventories/tree', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1056,9 +1136,12 @@ def _get_tree_inventory_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def get_tree_inventory_export( self, @@ -1068,8 +1151,9 @@ def get_tree_inventory_export( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1104,7 +1188,7 @@ def get_tree_inventory_export( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_tree_inventory_export_serialize( domain_id=domain_id, @@ -1112,15 +1196,16 @@ def get_tree_inventory_export( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Export", - "422": "HTTPValidationError", + '200': "Export", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -1128,6 +1213,7 @@ def get_tree_inventory_export( response_types_map=_response_types_map, ).data + @validate_call def get_tree_inventory_export_with_http_info( self, @@ -1137,8 +1223,9 @@ def get_tree_inventory_export_with_http_info( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1173,7 +1260,7 @@ def get_tree_inventory_export_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_tree_inventory_export_serialize( domain_id=domain_id, @@ -1181,15 +1268,16 @@ def get_tree_inventory_export_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Export", - "422": "HTTPValidationError", + '200': "Export", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) response_data.read() return self.api_client.response_deserialize( @@ -1197,6 +1285,7 @@ def get_tree_inventory_export_with_http_info( response_types_map=_response_types_map, ) + @validate_call def get_tree_inventory_export_without_preload_content( self, @@ -1206,8 +1295,9 @@ def get_tree_inventory_export_without_preload_content( None, Annotated[StrictFloat, Field(gt=0)], Tuple[ - Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] - ], + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1242,7 +1332,7 @@ def get_tree_inventory_export_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_tree_inventory_export_serialize( domain_id=domain_id, @@ -1250,18 +1340,20 @@ def get_tree_inventory_export_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Export", - "422": "HTTPValidationError", + '200': "Export", + '422': "HTTPValidationError", } response_data = self.api_client.call_api( - *_param, _request_timeout=_request_timeout + *_param, + _request_timeout=_request_timeout ) return response_data.response + def _get_tree_inventory_export_serialize( self, domain_id, @@ -1274,7 +1366,8 @@ def _get_tree_inventory_export_serialize( _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] @@ -1287,26 +1380,33 @@ def _get_tree_inventory_export_serialize( # process the path parameters if domain_id is not None: - _path_params["domainId"] = domain_id + _path_params['domainId'] = domain_id if export_format is not None: - _path_params["exportFormat"] = export_format + _path_params['exportFormat'] = export_format # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] ) + # authentication setting - _auth_settings: List[str] = ["APIKeyHeader", "HTTPBearer"] + _auth_settings: List[str] = [ + 'APIKeyHeader', + 'HTTPBearer' + ] return self.api_client.param_serialize( - method="GET", - resource_path="/v1/domains/{domainId}/inventories/tree/exports/{exportFormat}", + method='GET', + resource_path='/v1/domains/{domainId}/inventories/tree/exports/{exportFormat}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1316,5 +1416,7 @@ def _get_tree_inventory_export_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + diff --git a/fastfuels_sdk/client_library/api_spec.json b/fastfuels_sdk/client_library/api_spec.json index 688da65..804ab5f 100644 --- a/fastfuels_sdk/client_library/api_spec.json +++ b/fastfuels_sdk/client_library/api_spec.json @@ -1 +1 @@ -{"openapi":"3.1.0","info":{"title":"FastFuels API","description":"A JSON API for creating, editing, and retrieving 3D fuels data for next generation fire behavior models.","version":"0.1.0"},"servers":[{"url":"https://api.fastfuels.silvxlabs.com"}],"paths":{"/":{"get":{"tags":["Index"],"summary":"Index","operationId":"index","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/cookies":{"get":{"tags":["Cookies"],"summary":"Get Cookie","operationId":"get_cookie","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"tags":["Cookies"],"summary":"Delete Cookie","operationId":"delete_cookie","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/keys":{"post":{"tags":["API Keys"],"summary":"New API key","description":"Create a new API key","operationId":"create_key","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Key"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["API Keys"],"summary":"List keys","description":"List API keys for both users and applications","operationId":"list_keys","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":100,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListKeysResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/keys/{keyId}":{"get":{"tags":["API Keys"],"summary":"Get key","description":"Get an API key by ID","operationId":"get_key_by_id","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string","title":"Keyid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Key"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["API Keys"],"summary":"Delete key","description":"Delete an API key by ID","operationId":"delete_key","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string","title":"Keyid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications":{"post":{"tags":["Applications"],"summary":"New application","description":"Create a new application","operationId":"create_application","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApplicationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Applications"],"summary":"List application","description":"List applications for authenticated user","operationId":"list_applications","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":100,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListApplicationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications/{applicationId}":{"get":{"tags":["Applications"],"summary":"Get Application","description":"Get an application by ID","operationId":"get_application","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"applicationId","in":"path","required":true,"schema":{"type":"string","title":"Applicationid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Applications"],"summary":"Update Application","description":"Update an application by ID","operationId":"update_application","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"applicationId","in":"path","required":true,"schema":{"type":"string","title":"Applicationid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApplicationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Applications"],"summary":"Delete application","description":"Delete an application by ID","operationId":"delete_application","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"applicationId","in":"path","required":true,"schema":{"type":"string","title":"Applicationid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains":{"post":{"tags":["Domains"],"summary":"Create Domain","description":"# Create Domain Endpoint\n\nThis endpoint creates a new domain resource based on a spatial extent and additional details provided by the user. The domain resource acts as the spatial container for all other resources that create data within the system.\n\n## What is a Domain Resource?\n\nA domain resource is a spatial container that represents a specific geographical area. It includes metadata such as the name, description, creation date, and the spatial extent defined by geographic coordinates. Domains are used to organize and manage spatial data and operations within a defined area. The data can be vectorized, such as holding features or trees in an inventory, or rasterized, such as a 3D canopy fuel grid or a Digital Elevation Model (DEM).\n\n## Endpoint: `POST /domains`\n\n### Request Body\n\nThe request body should be a GeoJSON object defined by the [GeoJSON specification (RFC 7946)](https://datatracker.ietf.org/doc/html/rfc7946). It can be either a Feature or a FeatureCollection. The required fields differ slightly between these two types, but there are some shared fields as well.\n\n#### Shared Fields\n\nThese fields are required for both Feature and FeatureCollection inputs:\n\n- **type**: (string) Must be either \"Feature\" or \"FeatureCollection\".\n- **name**: (string, optional) The name of the domain.\n- **description**: (string, optional) A brief description of the domain.\n- **horizontalResolution**: (float) The horizontal resolution in meters of a regular grid representation of the domain.\n- **verticalResolution**: (float) The vertical resolution in meters of a regular grid representation of the domain.\n- **crs**: (GeoJsonCRS) The GeoJSON specification formatted coordinate reference system (CRS) of the domain.\n - **type**: (string) Must be \"name\".\n - **properties**: (object) The properties object containing the CRS details.\n - **name**: (string) The name of the CRS, e.g., \"EPSG:4326\". Must be either 'local' or a valid authority string.\n\n#### Feature-specific Fields\n\nWhen the input type is \"Feature\", the following additional field is required:\n\n- **geometry**: (GeoJSON Geometry object) A GeoJSON geometry object defining the spatial location of the domain.\n - **type**: (string) Must be a valid GeoJSON type, e.g., \"Polygon\".\n - **coordinates**: (array) An array of coordinates defining the geometry.\n\n#### FeatureCollection-specific Fields\n\nWhen the input type is \"FeatureCollection\", the following additional field is required:\n\n- **features**: (array of Feature objects) An array of Feature objects. Each Feature object should have:\n - **type**: (string) Must be \"Feature\".\n - **geometry**: (GeoJSON Geometry object) As described in the Feature-specific fields.\n\n### Response\n\nOn successful creation, the endpoint returns the newly created domain resource with the following fields:\n\n- **id**: (string) A unique identifier for the domain.\n- **name**: (string) The name of the domain.\n- **description**: (string) A brief description of the domain.\n- **createdOn**: (datetime) The date and time the domain was created.\n- **modifiedOn**: (datetime) The date and time the domain was last modified.\n- **type**: (string) Will be \"FeatureCollection\".\n- **features**: (array) An array of two Feature objects:\n 1. The domain feature (padded bounding box):\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the padded spatial extent of the domain.\n - **properties**: (object) Additional properties of the domain feature.\n - **name**: (string) Will be \"domain\".\n - **area**: (float) The area of the domain in square meters.\n - **perimeter**: (float) The perimeter of the domain in meters.\n 2. The input feature:\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the original input geometry.\n - **properties**: (object) Additional properties of the input feature.\n - **name**: (string) Will be \"input\".\n - **area**: (float) The area of the input geometry in square meters.\n - **perimeter**: (float) The perimeter of the input geometry in meters.\n- **horizontalResolution**: (float) The horizontal resolution of the domain.\n- **verticalResolution**: (float) The vertical resolution of the domain.\n- **crs**: (GeoJsonCRS) The coordinate reference system of the domain.\n- **utmAuthorityString**: (string, optional) The UTM authority string if the input was projected to UTM.\n\n### Processing from Request to Response\n\nThe system performs several processing steps to convert the Request Body into the Response Body:\n\n1. **CRS Handling and Projection**:\n - If the input CRS is geographic (e.g., EPSG:4326), the geometry is automatically projected to the appropriate UTM zone.\n - If the input CRS is already projected, the domain will keep that CRS.\n - If the input CRS is 'local', the spatial data is assumed to be NOT geo-referenced, and no projection is performed.\n\n2. **Bounding Box Calculation**:\n - The system calculates the bounding box of the input geometry (or the combined geometries for a FeatureCollection).\n\n3. **Resolution-based Padding**:\n - The bounding box is padded out to the nearest multiple of the user-provided horizontal resolution.\n\n4. **FeatureCollection Creation**:\n - The system creates a FeatureCollection with two features: the padded bounding box (domain) and the original input geometry.\n\nThese steps ensure that the domain's extent is regularized, aligned with the specified resolution, and in a suitable projected coordinate system (when applicable), which allows for subsequent grid-based operations.\n\n### Important Notes\n\n1. **Projection**: The domain will always be stored in a projected coordinate system if the input is geographic. This ensures consistency and accuracy for spatial operations within the domain.\n\n2. **UTM Zone Selection**: When projecting from a geographic CRS, the system automatically selects the appropriate UTM zone based on the centroid of the input geometry.\n\n3. **FeatureCollection Handling**: When a FeatureCollection is provided as input, the domain will be created based on the combined extent of all features in the collection.\n\n4. **Zero Area Handling**: If the spatial extent has zero area (e.g., a point or line), the endpoint will raise an error.\n\n5. **Resolution Alignment**: The spatial extent is padded out to the nearest multiple of horizontal and vertical resolution (in meters) to ensure grid alignment.\n\n6. **Maximum Area**: Currently, the maximum area for a domain is 16 square kilometers. We are planning to increase this limit in the future. If this limitation is an issue for your use case, please contact us for assistance.\n\n7. **CRS Preservation**: If you provide data in a specific projected CRS, that CRS will be preserved in the domain. This is useful for maintaining consistency with existing data sources or specific regional requirements.\n\n### Error Responses\n\n- **422 Unprocessable Entity**: The spatial extent is invalid.\n - **Detail**: \"Invalid spatial extent. The area of the spatial extent must be greater than zero meters.\"\n - **Detail**: \"Invalid spatial extent. The area of the spatial extent must be less than sixteen square kilometers.\"\n- **500 Internal Server Error**: An error occurred while creating the domain resource.","operationId":"create_domain","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"},"examples":{"feature collection WGS84":{"value":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"coordinates":[[[-114.09545796676623,46.8324794598619],[-114.11217537297199,46.8324794598619],[-114.11217537297199,46.82496749915157],[-114.09545796676623,46.82496749915157],[-114.09545796676623,46.8324794598619]]],"type":"Polygon"}}],"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1},"summary":"Example WGS84 FeatureCollection","description":"This example creates a domain from a FeatureCollection GeoJSON object. The GeoJSON represents an approximately 1 square kilometer area in the Blue Mountain Recreation Area outside of Missoula, Montana. The CRS of the FeatureCollection is not provided so it is assumed to be 'EPSG:4326'."},"feature collection EPSG:5070":{"value":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-1377797.8087433458,2780720.35945401],[-1379055.2389321132,2780962.840146559],[-1379212.7978295316,2780146.1745799617],[-1377955.2239776908,2779903.6661836714],[-1377797.8087433458,2780720.35945401]]]}}],"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1,"crs":{"properties":{"name":"EPSG:5070"},"type":"name"}},"summary":"Example EPSG:5070 FeatureCollection","description":"This example creates a domain from a FeatureCollection GeoJSON object with a CRS of 'EPSG:5070'. Note that the CRS is explicitly set in the GeoJSON object. Because the CRS is a projected coordinate system, FastFuels uses the provided CRS for the domain instead of reprojecting."},"feature UTM":{"value":{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[721502.7544906491,5190645.048516054],[720227.9398802927,5190598.00908098],[720258.6480286171,5189763.323999467],[721533.6406826023,5189810.364218195],[721502.7544906491,5190645.048516054]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::32611"}},"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1},"summary":"Example UTM Feature","description":"This example creates a domain from a polygon feature GeoJSON object with UTM coordinates."},"feature local":{"value":{"type":"Feature","geometry":{"coordinates":[[[0,0],[0,100],[100,100],[100,0],[0,0]]],"type":"Polygon"},"properties":{},"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1,"crs":{"properties":{"name":"local"},"type":"name"}},"summary":"Example Local Feature","description":"Example of a domain with spatial data in a local coordinate system (with meter units). The crs field is set to 'local' to indicate that the coordinates are in a local coordinate system."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Domains"],"summary":"List Domains","description":"# List Domains Endpoint\n\nThis endpoint retrieves a paginated list of domain resources based on the\nquery parameters provided by the user.\n\n## Endpoint: `GET /domains`\n\n### Query Parameters\n\nTo retrieve a list of domains, the following query parameters can be used:\n\n- **page**: (integer, optional) The page number to retrieve. Page number is zero-indexed. Default is 0.\n- **size**: (integer, optional) The number of resources to retrieve per page. Minimum is 1 and maximum is 1000. Default is 100.\n- **sortBy**: (string, optional) The field by which to sort the domains. Valid values are:\n - \"createdOn\"\n - \"modifiedOn\"\n - \"name\"\n- **sortOrder**: (string, optional) The order in which to sort the results. Valid values are:\n - \"ascending\"\n - \"descending\"\n\n### Response\n\nThe response is a paginated list of domain resources, including metadata about the current page and the size of each page.\n\n- **domains**: (array) A list of Domain objects.\n- **currentPage**: (integer) The current page number.\n- **pageSize**: (integer) The number of domains per page.\n- **totalItems**: (integer) The total number of domain resources that belong to the user.\n\nEach Domain object in the list follows the Domain schema.\n\n### Example Request\n\n```http\nGET /domains?page=0&size=10&sortBy=createdOn&sortOrder=ascending\n```\n\n### Important Notes\n\n1. The `page` parameter is zero-indexed, meaning that the first page is `0`.\n2. The `size` parameter determines the number of domains returned per page, with a minimum of 1 and a maximum of 1000.\n3. The `sortBy` parameter allows sorting by specific fields, and the `sortOrder` parameter determines the order of sorting (ascending or descending).\n\n### Error Responses\n\n- **422 Unprocessable Entity**: Invalid query parameters.\n - **Detail**: \"Invalid value for query parameter 'page'. Must be a non-negative integer.\"\n - **Detail**: \"Invalid value for query parameter 'size'. Must be an integer between 1 and 1000.\"\n- **500 Internal Server Error**: An error occurred while listing the domain resources.","operationId":"list_domains","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"The page number to retrieve. Page number is zero-indexed.","default":0,"title":"Page"},"description":"The page number to retrieve. Page number is zero-indexed."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"The number of resources to retrieve per page.","default":100,"title":"Size"},"description":"The number of resources to retrieve per page."},{"name":"sortBy","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DomainSortField"}},{"name":"sortOrder","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DomainSortOrder"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListDomainResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}":{"get":{"tags":["Domains"],"summary":"Get Domain","description":"# Get Domain Endpoint\n\nThis endpoint retrieves a specific domain resource based on the provided domain ID.\n\n## Endpoint: `GET /domains/{domainId}`\n\n### Path Parameters\n\nTo retrieve a specific domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain to retrieve.\n\n### Response\n\nThe response returns the details of the requested domain resource, including its metadata and spatial information.\n\n- **id**: (string) A unique identifier for the domain.\n- **name**: (string) The name of the domain.\n- **description**: (string) A brief description of the domain.\n- **createdOn**: (datetime) The date and time the domain was created.\n- **modifiedOn**: (datetime) The date and time the domain was last modified.\n- **type**: (string) Always \"FeatureCollection\".\n- **features**: (array) An array of two Feature objects:\n 1. The domain feature (padded bounding box):\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the padded spatial extent of the domain.\n - **properties**: (object) Additional properties of the domain feature.\n - **name**: (string) Will be \"domain\".\n - **area**: (float) The area of the domain in square meters.\n - **perimeter**: (float) The perimeter of the domain in meters.\n 2. The input feature:\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the original input geometry.\n - **properties**: (object) Additional properties of the input feature.\n - **name**: (string) Will be \"input\".\n - **area**: (float) The area of the input geometry in square meters.\n - **perimeter**: (float) The perimeter of the input geometry in meters.\n- **horizontalResolution**: (float) The horizontal resolution of the domain in meters.\n- **verticalResolution**: (float) The vertical resolution of the domain in meters.\n- **crs**: (GeoJsonCRS) The coordinate reference system of the domain.\n- **utmAuthorityString**: (string, optional) The UTM authority string if the input was projected to UTM.\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Resource not found.\"\n- **500 Internal Server Error**: An error occurred while retrieving the domain resource.\n - **Detail**: \"An error occurred while getting the domain resource.\"","operationId":"get_domain","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Domains"],"summary":"Update Domain","description":"# Update Domain Endpoint\n\nThis endpoint updates an existing domain resource based on the provided domain ID and request body. Users can modify specific fields of the domain, while other fields remain unchanged.\n\n## Endpoint: `PATCH /domains/{domainId}`\n\n### Path Parameters\n\nTo update a specific domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain to update.\n\n### Request Body\n\nTo update a domain, the request body should include one or more of the following fields:\n\n- **name**: (string, optional) The name of the domain.\n- **description**: (string, optional) A brief description of the domain.\n- **tags**: (array of strings, optional) A list of tags associated with the domain.\n\n### Fields that Can Be Updated\n\n- **name**: The name of the domain.\n- **description**: A brief description of the domain.\n- **tags**: The list of tags associated with the domain.\n\n### Fields that Cannot Be Updated\n\nThe following fields cannot be updated. If you wish to change these fields, you need to create a new domain resource with the desired values:\n\n- **id**: The unique identifier for the domain.\n- **createdOn**: The date and time the domain was created.\n- **type**: Always \"FeatureCollection\".\n- **features**: The FeatureCollection containing the domain and input geometries.\n- **horizontalResolution**: The horizontal resolution of the domain.\n- **verticalResolution**: The vertical resolution of the domain.\n- **crs**: The coordinate reference system of the domain.\n- **utmAuthorityString**: The UTM authority string of the domain.\n\n### Response\n\nThe response returns the updated domain resource with the following fields:\n\n- **id**: (string) A unique identifier for the domain.\n- **name**: (string) The name of the domain.\n- **description**: (string) A brief description of the domain.\n- **createdOn**: (datetime) The date and time the domain was created.\n- **modifiedOn**: (datetime) The date and time the domain was last modified.\n- **type**: (string) Always \"FeatureCollection\".\n- **features**: (array) An array of two Feature objects:\n 1. The domain feature (padded bounding box):\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the padded spatial extent of the domain.\n - **properties**: (object) Additional properties of the domain feature.\n - **name**: (string) Will be \"domain\".\n - **area**: (float) The area of the domain in square meters.\n - **perimeter**: (float) The perimeter of the domain in meters.\n 2. The input feature:\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the original input geometry.\n - **properties**: (object) Additional properties of the input feature.\n - **name**: (string) Will be \"input\".\n - **area**: (float) The area of the input geometry in square meters.\n - **perimeter**: (float) The perimeter of the input geometry in meters.\n- **horizontalResolution**: (float) The horizontal resolution of the domain.\n- **verticalResolution**: (float) The vertical resolution of the domain.\n- **crs**: (GeoJsonCRS) The coordinate reference system of the domain.\n- **utmAuthorityString**: (string, optional) The UTM authority string if the input was projected to UTM.\n- **tags**: (array of strings) A list of tags associated with the domain.\n\n### Important Notes\n\n1. Only the **name**, **description**, and **tags** fields can be updated. If you wish to change any other fields (such as features, horizontalResolution, verticalResolution, crs, etc.), you must create a new domain resource with the desired values.\n2. The **modifiedOn** field will be automatically updated to the current date and time whenever any updatable field is changed.\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Resource not found.\"\n- **500 Internal Server Error**: An error occurred while updating the domain resource.\n - **Detail**: \"An error occurred while updating the domain resource.\"","operationId":"update_domain","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDomainRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Domains"],"summary":"Delete Domain","description":"# Delete Domain Endpoint\n\nThis endpoint deletes an existing domain resource based on the provided domain ID.\n\n## Endpoint: `DELETE /domains/{domainId}`\n\n### Path Parameters\n\nTo delete a specific domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain to delete.\n\n### Response\n\nThe response does not return any content on a successful deletion and will have a status code of 204 No Content.\n\n### Example Request\n\n```http\nDELETE /domains/1e7d8d3c9f8b4c3ba9e7c3b4f8d7a9c1\n```\n\n### Example Response\n\n```\nHTTP/1.1 204 No Content\n```\n\n### Important Notes\n\n1. Deleting a domain is a permanent action and cannot be undone. Once a domain is deleted, it is removed from the database and cannot be recovered.\n2. Ensure that you have the correct domain ID before making the delete request to avoid accidentally deleting the wrong domain.\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Resource not found.\"\n- **500 Internal Server Error**: An error occurred while deleting the domain resource.\n - **Detail**: \"An error occurred while deleting the domain resource.\"\n\n### Example Error Response\n\n```json\n{\n \"detail\": \"Resource not found.\"\n}\n```\n\n### Example Internal Server Error Response\n\n```json\n{\n \"detail\": \"An error occurred while deleting the domain resource.\"\n}\n```","operationId":"delete_domain","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/preview":{"post":{"tags":["Domains"],"summary":"Preview Domain","description":"# Preview Domain Endpoint\n\nThis endpoint processes a CreateDomainRequest and returns a Domain object without saving the data to the database. It allows users to preview what their domain will look like before actually creating it.\n\n## Endpoint: `POST /domains/preview`\n\n### Request Body\n\nThe request body should be a GeoJSON object defined by the [GeoJSON specification (RFC 7946)](https://datatracker.ietf.org/doc/html/rfc7946). It can be either a Feature or a FeatureCollection. The structure is identical to the Create Domain endpoint's request body.\n\n#### Shared Fields\n\n- **type**: (string) Must be either \"Feature\" or \"FeatureCollection\".\n- **name**: (string, optional) The name of the domain.\n- **description**: (string, optional) A brief description of the domain.\n- **horizontalResolution**: (float) The horizontal resolution in meters of a regular grid representation of the domain.\n- **verticalResolution**: (float) The vertical resolution in meters of a regular grid representation of the domain.\n- **crs**: (GeoJsonCRS) The GeoJSON specification formatted coordinate reference system (CRS) of the domain.\n - **type**: (string) Must be \"name\".\n - **properties**: (object) The properties object containing the CRS details.\n - **name**: (string) The name of the CRS, e.g., \"EPSG:4326\". Must be either 'local' or a valid authority string.\n- **tags**: (array of strings, optional) A list of tags associated with the domain.\n\n#### Feature-specific Fields\n\nWhen the input type is \"Feature\", the following additional field is required:\n\n- **geometry**: (GeoJSON Geometry object) A GeoJSON geometry object defining the spatial location of the domain.\n - **type**: (string) Must be a valid GeoJSON type, e.g., \"Polygon\".\n - **coordinates**: (array) An array of coordinates defining the geometry.\n\n#### FeatureCollection-specific Fields\n\nWhen the input type is \"FeatureCollection\", the following additional field is required:\n\n- **features**: (array of Feature objects) An array of Feature objects. Each Feature object should have:\n - **type**: (string) Must be \"Feature\".\n - **geometry**: (GeoJSON Geometry object) As described in the Feature-specific fields.\n\n### Response\n\nThe response returns a preview of the domain resource with the following fields:\n\n- **id**: (string) Will always be \"preview\" for this endpoint.\n- **name**: (string) The name of the domain.\n- **description**: (string) A brief description of the domain.\n- **createdOn**: (datetime) The current date and time.\n- **modifiedOn**: (datetime) The current date and time.\n- **type**: (string) Always \"FeatureCollection\".\n- **features**: (array) An array of two Feature objects:\n 1. The domain feature (padded bounding box):\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the padded spatial extent of the domain.\n - **properties**: (object) Additional properties of the domain feature.\n - **name**: (string) Will be \"domain\".\n - **area**: (float) The area of the domain in square meters.\n - **perimeter**: (float) The perimeter of the domain in meters.\n 2. The input feature:\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the original input geometry.\n - **properties**: (object) Additional properties of the input feature.\n - **name**: (string) Will be \"input\".\n - **area**: (float) The area of the input geometry in square meters.\n - **perimeter**: (float) The perimeter of the input geometry in meters.\n- **horizontalResolution**: (float) The horizontal resolution of the domain.\n- **verticalResolution**: (float) The vertical resolution of the domain.\n- **crs**: (GeoJsonCRS) The coordinate reference system of the domain.\n- **utmAuthorityString**: (string, optional) The UTM authority string if the input was projected to UTM.\n- **tags**: (array of strings) A list of tags associated with the domain.\n\n### Processing\n\nThe preview endpoint performs the same processing steps as the create endpoint:\n\n1. **CRS Handling and Projection**: Projects the geometry to UTM if necessary.\n2. **Bounding Box Calculation**: Calculates the bounding box of the input geometry.\n3. **Resolution-based Padding**: Pads the bounding box to align with the specified resolution.\n4. **FeatureCollection Creation**: Creates a FeatureCollection with the padded domain and original input geometries.\n\n### Important Notes\n\n1. This endpoint does not save any data to the database. It's purely for preview purposes.\n2. The `id` field will always be \"preview\" in the response.\n3. The `createdOn` and `modifiedOn` fields will be set to the current time but are not persisted.\n4. All the same validations and checks applied in the create endpoint are also applied here, including area limitations and CONUS checks.\n\n### Error Responses\n\n- **422 Unprocessable Entity**: The spatial extent is invalid.\n - **Detail**: \"Invalid spatial extent. The area of the spatial extent must be greater than zero meters.\"\n - **Detail**: \"Invalid spatial extent. The area of the spatial extent must be less than sixteen square kilometers.\"\n - **Detail**: \"Invalid spatial extent. The spatial extent must be entirely within CONUS.\"\n- **500 Internal Server Error**: An error occurred while previewing the domain resource.\n - **Detail**: \"An error occurred while previewing the domain resource.\"","operationId":"preview_domain","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"},"examples":{"feature collection WGS84":{"summary":"Example WGS84 FeatureCollection","description":"This example creates a domain from a FeatureCollection GeoJSON object. The GeoJSON represents an approximately 1 square kilometer area in the Blue Mountain Recreation Area outside of Missoula, Montana. The CRS of the FeatureCollection is not provided so it is assumed to be 'EPSG:4326'.","value":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"coordinates":[[[-114.09545796676623,46.8324794598619],[-114.11217537297199,46.8324794598619],[-114.11217537297199,46.82496749915157],[-114.09545796676623,46.82496749915157],[-114.09545796676623,46.8324794598619]]],"type":"Polygon"}}],"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1}},"feature collection EPSG:5070":{"summary":"Example EPSG:5070 FeatureCollection","description":"This example creates a domain from a FeatureCollection GeoJSON object with a CRS of 'EPSG:5070'. Note that the CRS is explicitly set in the GeoJSON object. Because the CRS is a projected coordinate system, FastFuels uses the provided CRS for the domain instead of reprojecting.","value":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-1377797.8087433458,2780720.35945401],[-1379055.2389321132,2780962.840146559],[-1379212.7978295316,2780146.1745799617],[-1377955.2239776908,2779903.6661836714],[-1377797.8087433458,2780720.35945401]]]}}],"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1,"crs":{"properties":{"name":"EPSG:5070"},"type":"name"}}},"feature UTM":{"summary":"Example UTM Feature","description":"This example creates a domain from a polygon feature GeoJSON object with UTM coordinates.","value":{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[721502.7544906491,5190645.048516054],[720227.9398802927,5190598.00908098],[720258.6480286171,5189763.323999467],[721533.6406826023,5189810.364218195],[721502.7544906491,5190645.048516054]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::32611"}},"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1}},"feature local":{"summary":"Example Local Feature","description":"Example of a domain with spatial data in a local coordinate system (with meter units). The crs field is set to 'local' to indicate that the coordinates are in a local coordinate system.","value":{"type":"Feature","geometry":{"coordinates":[[[0,0],[0,100],[100,100],[100,0],[0,0]]],"type":"Polygon"},"properties":{},"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1,"crs":{"properties":{"name":"local"},"type":"name"}}}}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}]}},"/v1/domains/reproject":{"post":{"tags":["Domains"],"summary":"Reproject Geojson","description":"# Reproject GeoJSON Endpoint\n\nThis endpoint reprojects a GeoJSON FeatureCollection to a different coordinate reference system (CRS) using the specified EPSG code.\n\n## Endpoint: `POST /domains/reproject`\n\n### Query Parameters\n\nTo reproject a GeoJSON, the following query parameter is required:\n\n- **targetEPSG**: (integer, optional) The EPSG code of the target coordinate reference system. Default is 4362.\n\n### Request Body\n\nThe request body should be a GeoJSON FeatureCollection object that includes:\n\n- **type**: (string) Must be \"FeatureCollection\".\n- **features**: (array) An array of Feature objects, each containing:\n - **type**: (string) Must be \"Feature\".\n - **geometry**: (object) A GeoJSON geometry object.\n - **properties**: (object, optional) Properties associated with the feature.\n\n### Response\n\nThe response returns the reprojected GeoJSON FeatureCollection with all geometries transformed to the target coordinate reference system while preserving the original properties of each feature.\n\n### Example Request\n\n```http\nPOST /domains/reproject?targetEPSG=32633\nContent-Type: application/json\n\n{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[...coordinates in source CRS...]]]\n },\n \"properties\": {\n \"name\": \"Example Feature\"\n }\n }\n ]\n}\n```\n\n### Example Response\n\n```json\n{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[...coordinates in target CRS...]]]\n },\n \"properties\": {\n \"name\": \"Example Feature\"\n }\n }\n ]\n}\n```","operationId":"reproject_geojson","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"targetEPSG","in":"query","required":false,"schema":{"type":"integer","description":"The target EPSG code to reproject the GeoJSON to.","default":4362,"title":"Targetepsg"},"description":"The target EPSG code to reproject the GeoJSON to."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSONFeatureCollection"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSONFeatureCollection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/{featureName}/style":{"patch":{"tags":["Domains"],"summary":"Update Feature Style","description":"# Update Feature Style\n\nUpdates the style properties of a specific feature in a domain while preserving its geometry. This endpoint allows you to customize the visual appearance of either the domain boundary or input geometry features.\n\n## Endpoint\n\n```\nPATCH /domains/{domainId}/features/{featureName}/style\n```\n\n## Path Parameters\n\n- `domainId` (string, required)\n - The unique identifier of the domain containing the feature to update\n\n- `featureName` (string, required)\n - The name of the feature to update\n - Must be either \"domain\" or \"input\"\n - \"domain\" refers to the padded bounding box feature\n - \"input\" refers to the original input geometry feature\n\n## Request Body\n\nThe request body should contain style properties to update. All properties are optional:\n\n```json\n{\n \"strokeColor\": string, // The color of line/boundary (e.g., \"#555555\")\n \"strokeOpacity\": number, // The opacity of lines/boundaries (0-1)\n \"strokeWidth\": number, // The width of lines/boundaries\n \"fillColor\": string, // The fill color for polygons (e.g., \"#555555\")\n \"fillOpacity\": number // The opacity of polygon fills (0-1)\n}\n```\n\n## Response\n\nReturns the updated feature with the new style properties. The response includes:\n\n- `type`: Always \"Feature\"\n- `geometry`: The unchanged GeoJSON geometry of the feature\n- `properties`: Object containing:\n - `name`: The feature name (\"domain\" or \"input\")\n - `area`: The area of the feature in square meters\n - `perimeter`: The perimeter of the feature in meters\n - `style`: The updated style properties\n\n## Example Request\n\n```http\nPATCH /domains/abc123/features/domain/style\nContent-Type: application/json\n\n{\n \"strokeColor\": \"#FF0000\",\n \"strokeWidth\": 3,\n \"strokeOpacity\": 0.8,\n \"fillColor\": \"#FFA500\",\n \"fillOpacity\": 0.3\n}\n```\n\n## Example Response\n\n```json\n{\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [/* ... */]\n },\n \"properties\": {\n \"name\": \"domain\",\n \"area\": 10000.0,\n \"perimeter\": 400.0,\n \"style\": {\n \"strokeColor\": \"#FF0000\",\n \"strokeWidth\": 3,\n \"strokeOpacity\": 0.8,\n \"fillColor\": \"#FFA500\",\n \"fillOpacity\": 0.3\n }\n }\n}\n```\n\n## Error Responses\n\n- **404 Not Found**\n - The specified domain or feature does not exist\n - The user does not have access to the specified domain\n\n- **500 Internal Server Error**\n - An error occurred while updating the feature style\n - Response includes an error message in the detail field\n\n## Notes\n\n- Style properties are merged with existing styles - only specified properties are updated\n- Unspecified style properties retain their existing values\n- The geometry and other feature properties remain unchanged\n- Style changes are persistent and will be saved to the database","operationId":"update_feature_style","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"featureName","in":"path","required":true,"schema":{"enum":["domain","input"],"type":"string","title":"Featurename"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSONStyleProperties"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSONFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features":{"get":{"tags":["Features"],"summary":"Get Features","description":"# Get Features Endpoint\n\nThis endpoint retrieves the features resource associated with a domain\nbelonging to the user based on the provided domain ID.\n\nA features resource is a container for the various types of feature\ndata that can exist with the spatial context of the domain. Currently,\nonly road and water features are supported, though other forms of feature\nwill be added soon.\n\n## Endpoint: `GET /v1/domains/{domainId}/features`\n\n### Path Parameters\n\nTo retrieve the features of a domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain belonging to the user whose features are to be retrieved.\n\n### Response\n\nThe response returns the members of the specified features resource\nfollowing the Features schema.\n\n- **road**: (RoadFeature)\n- **water**: (WaterFeature)\n\n### Example Request\n\n```http\nGET /v1/domains/1e7d8d3c9f8b4c3ba9e7c3b4f8d7a9c1/features\n```\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found.\"\n- **500 Internal Server Error**: An error occurred while retrieving the feature resources.\n - **Detail**: \"An error occurred while getting the feature resources.\"","operationId":"get_features","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Features"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/exports/{exportFormat}":{"post":{"tags":["Features"],"summary":"Create Feature Export","description":"# Create Feature Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the feature data (road and water) of a specific domain, in the specified format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format in which to export the feature data. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of the export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n- `signedUrl` (string, optional): Initially `null`, populated when export is completed.\n\n## Error Responses\n\n- `404 Not Found`: If the domain is not found, or there are no water or road features created.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure that the road and water feature data for the domain have been created before initiating an export. If neither feature exists, the request will result in a `404 Not Found` error.\n- The export will be processed as a background job, and the status will initially be set to `\"pending\"`.\n- Check the export status using a separate endpoint to monitor progress.\n- Once the export is complete, use the `signedUrl` to download the GeoJSON file.","operationId":"create_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Features"],"summary":"Get Feature Export","description":"# Get Feature Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a feature export request (for road and water features) for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Export not found or no feature data exists for the specified export format.\n\n## Usage Notes\n\n- Use this endpoint to check the status of a feature export request.\n- Once the status is `\"completed\"`, you can use the `signedUrl` to download the exported GeoJSON file.\n- The signed URL expires 7 days after creation.","operationId":"get_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Features"],"summary":"Delete Feature Export","description":"# Delete Feature Export\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/features/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint deletes a feature export request and its associated files for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export to delete. Possible values are:\n - `\"geojson\"`: Delete the export in the geojson format.\n\n## Response\n\nIf successful, returns a `204 No Content` status code.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to delete an existing feature export request and its related data.\n- The export request is removed from Firestore, and the associated files are deleted from Google Cloud Storage asynchronously.","operationId":"delete_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/road":{"post":{"tags":["Road Feature"],"summary":"Create Road Feature","description":"# Create Road Feature\n\nThis endpoint creates a new road feature resource for a specific domain.\nRoad features represent various road attributes (e.g., type, condition) within the spatial context of a domain.\nThe road feature data can be generated using various data sources (e.g., OSM) and methods.\n\nOn resource creation, the road feature data is set to a status of \"pending\".\nThe road feature data is generated in the background using the specified methods and data sources.\nOnce the road feature data is generated and available for user access, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/road\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to create the road feature.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `sources` (array of strings, required): List of sources to include in the road feature. Currently, possible values include:\n- `\"OSM\"`: OpenStreetMap data source.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created road feature resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the road feature. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the road feature was created.\n- `modifiedOn` (string): The timestamp when the road feature was last modified.\n- `checksum` (string): A unique checksum for the road feature resource.\n- `sources` (array of strings): The list of sources used for the road feature.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `422 Unprocessable Entity`: The road feature is not supported for local coordinate systems, or required fields are missing.\n- `429 Too Many Requests`: An error occurred while running the job due to resource exhaustion.\n\n## Usage Notes\n\n- If the domain is in a \"local\" coordinate system, the endpoint will raise a `422 Unprocessable Entity` error.\n- The endpoint will run the specified job to generate the road feature data if \"OSM\" is included in the sources.\n- The endpoint updates the road feature data in the database and logs relevant information for monitoring and debugging.","operationId":"create_road_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoadFeatureRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Road Feature"],"summary":"Get Road Feature","description":"# Get Road Feature\n\nThis endpoint retrieves the details of an existing road feature resource\nfor a specific domain. Users can access the status and metadata of the\nroad feature that has been created.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/road\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to retrieve the road feature.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the road feature resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the road feature.\n- `createdOn` (string): The timestamp when the road feature was created.\n- `modifiedOn` (string): The timestamp when the road feature was last modified.\n- `checksum` (string): A unique checksum for the road feature resource.\n- `sources` (array of strings): The list of sources used for the road feature.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The road feature for the specified domain does not exist or is empty.\n\n## Usage Notes\n\n- Ensure that the domain ID provided in the request path is valid and that the user has access to the specified domain.\n- If the road feature data is empty or invalid, the endpoint will raise a `404 Not Found` error with a detail message indicating the issue.","operationId":"get_road_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Road Feature"],"summary":"Delete Road Feature","description":"# Delete Road Feature\n\nThis endpoint deletes an existing road feature resource for a specific\ndomain. This action removes the road feature data from the database and\ncancels any ongoing job execution related to the road feature.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/features/road\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the road feature.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the road feature has been successfully deleted and no content is returned in the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found\"\n\n## Usage Notes\n\n- Deleting a road feature is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the road feature and remove the associated data from the cache and cloud storage.","operationId":"delete_road_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/road/exports/{exportFormat}":{"post":{"tags":["Road Feature"],"summary":"Create Road Feature Export","description":"# Create Road Feature Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/road/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the road feature data of a specific domain, in the specified format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format in which to export the road feature data. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of the export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n- `signedUrl` (string, optional): Initially `null`, populated when export is completed.\n\n## Error Responses\n\n- `404 Not Found`: If the domain is not found, or there are no water or road features created.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- The export will be processed as a background job, and the status will initially be set to `\"pending\"`.\n- Check the export status using a separate endpoint to monitor progress.\n- Once the export is complete, use the `signedUrl` to download the GeoJSON file.","operationId":"create_road_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Road Feature"],"summary":"Get Road Feature Export","description":"# Get Road Feature Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/road/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a feature export request (for road features) for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Export not found or no feature data exists for the specified export format.\n\n## Usage Notes\n\n- Use this endpoint to check the status of a road feature export request.\n- Once the status is `\"completed\"`, you can use the `signedUrl` to download the exported GeoJSON file.\n- The signed URL expires 7 days after creation.","operationId":"get_road_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/water":{"post":{"tags":["Water Feature"],"summary":"Create Water Feature","description":"# Create Water Feature\n\nThis endpoint creates a new water feature resource for a specific domain.\nWater feature data represents various water-related attributes (e.g.,\nlakes, rivers) that exist within the spatial context of a domain. The\nwater feature data can be sourced from different data sources (e.g., OSM)\nand can include various details about water features in the domain.\n\nOn resource creation, the water feature data is set to a status of \"pending\".\nThe data is processed in the background, and once it is available for user\naccess, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/water\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to create the water feature.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `sources` (array of strings, required): List of sources from which the\n water feature data should be collected. Currently, `\"OSM\"` is a supported source.\n- Additional fields might be included based on the source. For example,\n if the source is `\"OSM\"`, the request can specify additional parameters\n related to how the data should be fetched.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code\nand the created water feature resource in the response body. The response body will\nbe a JSON object with the following fields:\n\n- `status` (string): The status of the water feature. Initially set to `\"pending\"`.\n- `createdOn` (string): The timestamp when the water feature was created.\n- `modifiedOn` (string): The timestamp when the water feature was last modified.\n- `checksum` (string): A unique checksum for the water feature resource.\n- `sources` (array of strings): The list of sources used to gather the water feature data.\n\n## Error Responses\n\n- `422 Unprocessable Entity`: The domain is in a local coordinate system which\n does not support water features.\n - **Detail**: \"WaterFeature is not supported for local coordinate systems.\"\n- `429 Too Many Requests`: An error occurred while running the job for processing\n the water feature data.\n - **Detail**: An error message related to job submission.\n\n## Usage Notes\n\n- Ensure that the domain ID provided in the request path is valid and that the user\n has access to the specified domain.\n- If using `\"OSM\"` as a source, additional parameters can be specified as needed.\n- The process of creating and updating the water feature data involves background\n job execution, and the endpoint will return the initial resource with a pending status.","operationId":"create_water_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWaterFeatureRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaterFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Water Feature"],"summary":"Get Water Feature","description":"# Get Water Feature\n\nThis endpoint retrieves the details of an existing water feature resource\nfor a specific domain. The water feature data represents various water-related\nattributes (e.g., lakes, rivers) that have been created and stored for the\ngiven domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/water\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to retrieve the water feature.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code\nand the water feature resource in the response body. The response body will\nbe a JSON object with the following fields:\n\n- `status` (string): The status of the water feature.\n- `createdOn` (string): The timestamp when the water feature was created.\n- `modifiedOn` (string): The timestamp when the water feature was last modified.\n- `checksum` (string): A unique checksum for the water feature resource.\n- `sources` (array of strings): The list of sources used to gather the water feature data.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The water feature for the specified domain does not exist or is empty.\n - **Detail**: \"water feature empty.\"\n\n## Usage Notes\n\n- Ensure that the domain ID provided in the request path is valid and that the user\n has access to the specified domain.\n- If the water feature data does not exist or is empty, a `404 Not Found` error will be raised.","operationId":"get_water_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaterFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Water Feature"],"summary":"Delete Water Feature","description":"# Delete Water Feature\n\nThis endpoint deletes an existing water feature resource for a specific domain.\nThis action removes the water feature data from the database and cancels any ongoing\njob execution related to the water feature.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/features/water\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the water feature.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code.\nThis indicates that the water feature has been successfully deleted and no content is returned\nin the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found\"\n- `404 Not Found`: The water feature for the specified domain does not exist.\n - **Detail**: \"Water feature not found\"\n\n## Usage Notes\n\n- Deleting a water feature is a permanent action and cannot be undone. Ensure that you have\n the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the water feature and\n remove the associated data from the cache and cloud storage.","operationId":"delete_water_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/water/exports/{exportFormat}":{"post":{"tags":["Water Feature"],"summary":"Create Water Feature Export","description":"# Create Water Feature Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/water/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the water feature data of a specific domain, in the specified format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format in which to export the water feature data. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of the export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n- `signedUrl` (string, optional): Initially `null`, populated when export is completed.\n\n## Error Responses\n\n- `404 Not Found`: If the domain is not found, or there are no water or water features created.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- The export will be processed as a background job, and the status will initially be set to `\"pending\"`.\n- Check the export status using a separate endpoint to monitor progress.\n- Once the export is complete, use the `signedUrl` to download the GeoJSON file.","operationId":"create_water_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Water Feature"],"summary":"Get Water Feature Export","description":"# Get Water Feature Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/water/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a feature export request (for water features) for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Export not found or no feature data exists for the specified export format.\n\n## Usage Notes\n\n- Use this endpoint to check the status of a water feature export request.\n- Once the status is `\"completed\"`, you can use the `signedUrl` to download the exported GeoJSON file.\n- The signed URL expires 7 days after creation.","operationId":"get_water_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/inventories":{"get":{"tags":["Inventories"],"summary":"Get Inventories","description":"# Get Inventories Endpoint\n\nThis endpoint retrieves the inventories resource associated with a domain\nbelonging to the user based on the provided domain ID.\n\nAn inventories resource is a container for the various types of inventory\ndata that can exist with the spatial context of the domain. Currently,\nonly tree inventories are supported, though other forms of inventory will\nbe added soon.\n\n## Endpoint: `GET /v1/domains/{domainId}/inventories`\n\n### Path Parameters\n\nTo retrieve the inventories of a domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain belonging to the user whose inventories are to be retrieved.\n\n### Response\n\nThe response returns the members of the specified inventories resource\nfollowing the Inventories schema.\n\n- **tree**: (TreeInventory)\n\n\n### Example Request\n\n```http\nGET /v1/domains/1e7d8d3c9f8b4c3ba9e7c3b4f8d7a9c1/inventories\n```\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found.\"\n- **500 Internal Server Error**: An error occurred while retrieving the inventory resources.\n - **Detail**: \"An error occurred while getting the inventory resources.\"","operationId":"get_inventories","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Inventories"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/inventories/tree":{"post":{"tags":["Tree Inventory"],"summary":"Create Tree Inventory","description":"# Create Tree Inventory\n\nThis endpoint creates a new tree inventory resource for a specific domain. Tree Inventory data represents a complete forest inventory that exists within the spatial context of a domain. The tree inventory data can be generated using various data products and models that provide either national coverage (e.g., TreeMap) or local coverage.\n\nOn resource creation, the tree inventory data is set to a status of \"pending\". The tree inventory data is generated in the background using the specified method (e.g., TreeMap). Once the tree inventory data is generated and available for user access, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/inventories/tree\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to create the tree inventory.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `sources` (array of strings, required): List of data sources to be used for building the tree inventory. Currently, only one data source at a time is supported. Possible values are:\n - `\"TreeMap\"`: Indicates that the tree inventory should be created using the TreeMap raster product. This approach generates a tree inventory with national coverage.\n - `\"file\"`: Indicates that you will upload a file via a signed url. Please see File Source Configuration for more info.\n\n- `modifications` (array of objects, optional): List of modifications to apply to the tree inventory data. Maximum 1000 modifications allowed.\n\n- `treatments` (array of objects, optional): List of silvicultural treatments to apply to the tree inventory. Maximum 1000 treatments allowed.\n\n- `featureMasks` (array of strings, optional): List of Features to mask tree inventory data.\n\n### TreeMap Source Configuration\n\nIf `\"TreeMap\"` is included in the `sources`, the request body can include additional configurations for `TreeMap`:\n\n- `TreeMap` (object, optional): Advanced configurations for the TreeMap data source.\n - `version` (string, optional): The version of TreeMap to use. Default is `\"2016\"`. Possible values are:\n - `\"2014\"`: Use the 2014 version of TreeMap.\n - `\"2016\"`: Use the 2016 version of TreeMap.\n - `seed` (integer, optional): The random seed to use for generating the tree inventory. If not provided, a random seed will be generated.\n - `canopyHeightMapConfiguration` (object, optional): Canopy height map configuration for TreeMap data source. If provided, the canopy height map will be used to segment and impute the coarse 30m TreeMap data with high-resolution canopy height data. Details of this approach will be provided in an upcoming publication. Please contact support.fastfuels@silvxlabs.com for more information.\n - `source` (string, required): The source of the canopy height map data. Possible values are:\n - `\"Meta2024\"`: Use the Meta2024 canopy height map data. More information about this data source can be found here: https://www.sciencedirect.com/science/article/pii/S003442572300439X\n\n### File Source Configuration\nGenerate Signed URL for Tree Inventory Upload\n\nIf the source is `\"file\"`, this endpoint generates a signed URL that allows users to upload a CSV file representing the tree inventory data.\nThe signed URL is valid for 1 hour and has a maximum upload size of 500 MB.\n\nThe full work flow consists of the following steps:\n1. Call this endpoint to get a signed URL\n2. Perform a put request to send your file to the signed url. Here is a python example:\n\n```[python]\nwith open(\"your_file_goes_here.csv\", \"rb\") as file:\n upload_response = requests.put(\n signed_url_response[\"file\"][\"url\"],\n data=file,\n headers=signed_url_response[\"file\"][\"headers\"],\n )\n```\n**Note**: the signed_url_response has a field named \"file\" with the relevant info for the put request.\n\n3. Your file will be validated and processed in the background\n4. The status of your upload can be retrieved via and inventory get() request\n\n#### Required Columns\n\nThe CSV file must include the following columns with their specified data types and constraints:\n\n1. **SPCD** (Integer)\n - FIA species code\n - Must be an integer\n - Represents standard FIA species classifications\n\n2. **STATUSCD** (Integer)\n - Tree status code\n - Must be one of these values:\n - 0: No status\n - 1: Live\n - 2: Dead\n - 3: Missing\n\n3. **DIA** (Float)\n - Diameter at breast height (DBH)\n - Unit: centimeters (cm)\n - Range: 0 to 1200 cm\n - Measured at 1.37 meters above ground\n\n4. **HT** (Float)\n - Tree height\n - Unit: meters (m)\n - Range: 0 to 116 meters\n - Measured from ground to tree top\n\n5. **CR** (Float)\n - Crown ratio\n - Unit: ratio (dimensionless)\n - Range: 0 to 1\n - Represents the ratio of crown length to total tree height\n\n6. **X** (Float)\n - X coordinate in projected coordinate system\n - Unit: meters (m)\n - Range: Must fall within domain bounds (west to east)\n - Required: Yes\n - Used for spatial positioning\n\n7. **Y** (Float)\n - Y coordinate in projected coordinate system\n - Unit: meters (m)\n - Range: Must fall within domain bounds (south to north)\n - Required: Yes\n - Used for spatial positioning\n\n### Treatments\n\nThe `treatments` field is an array of treatment objects. Each treatment object represents a silvicultural treatment to be applied to the tree inventory. Currently, there are two types of treatment types available:\n\n1. Proportional Thinning\n2. Directional Thinning\n\n#### Proportional Thinning\n\n- `method`: \"proportionalThinning\" (string, required)\n- `targetMetric`: \"basalArea\" (string, required)\n- `targetValue`: float (required)\n - Unit: square meters per hectare (m²/ha)\n - Represents the target basal area after thinning\n\n#### Directional Thinning\n\n- `method`: \"directionalThinning\" (string, required)\n- `direction`: (string, required)\n - Possible values: \"below\" or \"above\"\n - Indicates whether to thin from below (smallest to largest) or above (largest to smallest)\n- `targetMetric`: (string, required)\n - Possible values: \"diameter\" or \"basalArea\"\n- `targetValue`: float (required)\n - Units of the targetValue quantity depends on the targetMetric:\n - For \"diameter\": centimeters (cm)\n - For \"basalArea\": square meters per hectare (m²/ha)\n - Represents the threshold for thinning (diameter) or the target basal area after thinning\n\nNote: The order of treatments in the array determines the sequence in which they will be applied to the tree inventory.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created tree inventory resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the tree inventory. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the tree inventory was created.\n- `modifiedOn` (string): The timestamp when the tree inventory was last modified.\n- `checksum` (string): A unique checksum for the tree inventory resource.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `422 Unprocessable Entity`: The request body is invalid or missing required fields.\n- `429 Too Many Requests`: An error occurred while submitting the job due to resource exhaustion.","operationId":"create_tree_inventory","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTreeInventoryRequest"},"examples":{"treemap_defaults":{"value":{"sources":["TreeMap"]},"summary":"TreeMap example with defaults","description":"This example creates a tree inventory using data from the TreeMap raster product. In this example, the user only provides 'TreeMap' as an element in the 'sources' list. The 'TreeMap' source is then populated with default values for the 'version' and 'seed' fields."},"treemap_advanced":{"value":{"sources":["TreeMap"],"TreeMap":{"version":"2014","seed":123456789}},"summary":"TreeMap example with advanced options","description":"This example creates a tree inventory using data from the TreeMap raster product. In this example, the user provides 'TreeMap' as an element in the 'sources' list. The 'TreeMap' source is then populated with the specified 'version' and 'seed' values."},"treemap_with_meta_canopy_height_model_configuration":{"value":{"sources":["TreeMap"],"TreeMap":{"version":"2014","seed":123456789,"canopyHeightMapConfiguration":{"source":"Meta2024"}}},"summary":"TreeMap example with canopy height map configuration","description":"Shows how to use TreeMap data product with a imputation and segmentation from a high resolution canopy height map."},"treemap_with_feature_masks":{"value":{"sources":["TreeMap"],"featureMasks":["road","water"]},"summary":"TreeMap example with feature masks","description":"This example creates a tree inventory using data from the TreeMap raster product. In this example, the user provides 'TreeMap' as an element in the 'sources' list. The 'TreeMap' source is then populated with default values for the 'version' and 'seed' fields. The 'featureMasks' list is also provided with 'road' and 'water' elements to mask out these features from the inventory."},"treemap_ht_modification":{"value":{"sources":["TreeMap"],"modifications":[{"conditions":{"attribute":"HT","operator":"gt","value":20},"actions":{"attribute":"HT","modifier":"multiply","value":0.9}}]},"summary":"TreeMap height modification example","description":"This example creates a tree inventory using data from the TreeMap raster product. It applies a modification to reduce the height of all trees taller than 20 meters by 10%."},"treemap_dia_modification":{"value":{"sources":["TreeMap"],"modifications":[{"conditions":{"attribute":"DIA","operator":"lt","value":20.32},"actions":{"attribute":"all","modifier":"remove"}}]},"summary":"TreeMap remove trees modification example","description":"This example creates a tree inventory using data from the TreeMap raster product. It applies a modification to remove all trees with a diameter at breast height less than 20.32cm (8 inches)."},"treemap_proportional_thinning":{"value":{"sources":["TreeMap"],"treatments":[{"method":"proportionalThinning","targetMetric":"basalArea","targetValue":25}]},"summary":"TreeMap proportional thinning example","description":"This example creates a tree inventory using data from the TreeMap raster product. It applies a silvicultural treatment to thin the forest to 25 square meters of basal area per hectare."},"treemap_directional_thinning":{"value":{"sources":["TreeMap"],"treatments":[{"method":"directionalThinning","direction":"below","targetMetric":"diameter","targetValue":30.48}]},"summary":"TreeMap directional thinning example","description":"This example creates a tree inventory using data from the TreeMap raster product. It applies a silvicultural treatment to remove from below all trees with a diameter at breast height less than 30.48cm (12 inches)."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreeInventory"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Tree Inventory"],"summary":"Get Tree Inventory","description":"# Get Tree Inventory\n\nThis endpoint retrieves the details of an existing tree inventory\nresource for a specific domain. Users can access the status and metadata\nof the tree inventory that has been created.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/inventories/tree\n```\n\n### Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to retrieve the tree inventory.\n\n### Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the tree inventory resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the tree inventory. Possible values are \"pending\", \"running\", \"completed\", and \"failed\".\n- `createdOn` (string): The timestamp when the tree inventory was created.\n- `modifiedOn` (string): The timestamp when the tree inventory was last modified.\n- `checksum` (string): A unique checksum for the tree inventory resource.\n- `treeInventory` (object): The tree inventory data, as provided in the request body when the tree inventory was created.\n\n### Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found\"\n- `404 Not Found`: The tree inventory for the specified domain does not exist.\n - **Detail**: \"Tree inventory not created\"","operationId":"get_tree_inventory","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreeInventory"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Tree Inventory"],"summary":"Delete Tree Inventory","description":"# Delete Tree Inventory\n\nThis endpoint deletes an existing tree inventory resource for a specific\ndomain. This action removes the tree inventory data from the database and\ncancels any ongoing job execution related to the tree inventory.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/inventories/tree\n```\n\n### Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the tree inventory.\n\n### Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the tree inventory has been successfully deleted and no content is returned in the response body.\n\n### Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found\"\n\n### Usage Notes\n\n- Deleting a tree inventory is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the tree inventory and remove the associated data from the cache and cloud storage.","operationId":"delete_tree_inventory","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/inventories/tree/exports/{exportFormat}":{"post":{"tags":["Tree Inventory"],"summary":"Create Tree Inventory Export","description":"# Create Tree Inventory Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/inventories/tree/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the tree inventory data of a specific domain. The data can be exported in various formats including CSV, Parquet, and GeoJSON. The export process runs in the background.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to create the tree inventory export.\n- `exportFormat` (string, required): The format in which to export the tree inventory data. Possible values are:\n - `\"csv\"`: Export the data in CSV format.\n - `\"parquet\"`: Export the data in Parquet format.\n - `\"geojson\"`: Export the data in GeoJSON format.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the export request details in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the export request. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the export request was created.\n- `modifiedOn` (string): The timestamp when the export request was last modified.\n- `expiresOn` (string): The timestamp when the export request will expire (7 days from creation).\n- `signedUrl` (string, optional): The signed URL to download the exported file. This field will be `null` initially.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `422 Unprocessable Entity`: The export format is invalid or the request cannot be processed.\n\n## Usage Notes\n\n- Ensure that the tree inventory for the specified domain is completed before initiating an export.\n- The export request will be processed in the background. Use the GET endpoint to check the status.","operationId":"create_tree_inventory_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["csv","parquet","geojson"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Tree Inventory"],"summary":"Get Tree Inventory Export","description":"# Get Tree Inventory Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/inventories/tree/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a tree inventory export request for a specific domain. Users can check the status, metadata, and download URL of the export request.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to retrieve the tree inventory export.\n- `exportFormat` (string, required): The format of the export request. Possible values are:\n - `\"csv\"`: Retrieve the CSV export request details.\n - `\"parquet\"`: Retrieve the Parquet export request details.\n - `\"geojson\"`: Retrieve the GeoJSON export request details.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the export request details in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the export request. Possible values are `\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, and `\"expired\"`.\n- `createdOn` (string): The timestamp when the export request was created.\n- `modifiedOn` (string): The timestamp when the export request was last modified.\n- `expiresOn` (string): The timestamp when the export request will expire.\n- `signedUrl` (string, optional): The signed URL to download the exported file. This will be `null` if the status is not `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The specified export request does not exist.\n\n## Usage Notes\n\n- Once the export is completed, the `status` will change to `\"completed\"`, and the `signedUrl` field will be populated with a URL to download the export file.\n- The signed URL will be valid for 7 days from the creation of the export request, as indicated by the `expiresOn` field.\n- To download the exported file, make a GET request to the provided `signedUrl` once it's available.\n- If the current time is past the `expiresOn` timestamp, the `status` will change to `\"expired\"`, and the `signedUrl` will be set to `null`.\n- There is no separate download endpoint. Use the `signedUrl` provided in the export details to download the file directly.\n\n## Example Workflow\n\n1. Create an export request using the POST endpoint.\n2. Periodically check the status of the export using the GET endpoint.\n3. Once the status is `\"completed\"`, retrieve the `signedUrl` from the export details.\n4. Use the `signedUrl` to download the exported file within 7 days of the export creation.","operationId":"get_tree_inventory_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["csv","geojson","parquet"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids":{"get":{"tags":["Grids"],"summary":"Get Grids","description":"# Get Grids Endpoint\n\nThis endpoint retrieves the grids resource associated with a domain\nbelonging to the user based on the provided domain ID.\n\nA grids resource is a container for the various types of gridded\ndata that can exist with the spatial context of the domain. Currently,\ntree, surface, topography, and feature grids are supported.\n\n## Endpoint: `GET /v1/domains/{domainId}/grids`\n\n### Path Parameters\n\nTo retrieve the grids of a domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of a domain belonging to the user.\n### Response\n\nThe response returns the members of the specified grids resource following\nthe Grids schema.\n\n- **tree**: (TreeGrid)\n- **surface**: (SurfaceGrid)\n- **topography**: (TopographyGrid)\n- **feature**: (FeatureGrid)\n\n### Example Request\n\n```http\nGET /v1/domains/1e7d8d3c9f8b4c3ba9e7c3b4f8d7a9c1/grids\n```\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found.\"\n- **500 Internal Server Error**: An error occurred while retrieving the grid resources.\n - **Detail**: \"An error occurred while getting the grid resources.\"","operationId":"get_grids","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grids"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/exports/{exportFormat}":{"post":{"tags":["Grids"],"summary":"Create Grid Export","description":"# Create Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the grid data of a specific domain to the specified format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format in which to export the grid data. Possible values are:\n - `\"zarr\"`: Export the data in the compressed zarr format.\n - `\"QUIC-Fire\"`: Exports the grid data to the set of input files required by the QUIC-Fire model.\n\n### QUIC-Fire Format\n\nFastFuels supports grid exports directly to input files for the QUIC-Fire\nmodel. The export format is a zip file containing the following files:\n- treesrhof.dat\n- treesmoist.dat\n- treesdepth.dat\n- topo.dat\n\nThe exporter attempts to build the required files from the available grid data.\n\nThe following examples demonstrate some of the possible behavior:\n- If a \"topography\" grid is not available, the exporter will not include topo.dat in the export.\n- If the \"surface\" grid is present, but the \"tree\" grid is not, the exporter will include treesrhof.dat, treesmoist.dat, and treesdepth.dat in the export as a 2D input.\n- If the \"tree\" grid is present, but the \"surface\" grid is not, the exporter will include treesrhof.dat, treesmoist.dat, and treesdepth.dat in the export as a 3D input.\n- If both the \"surface\" and \"tree\" grids are present, the exporter will include treesrhof.dat, treesmoist.dat, and treesdepth.dat in the export as a 3D input with the surface grid as the bottom layer with respect to the z-axis.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n- `signedUrl` (string, optional): Initially `null`, populated when export is completed.\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or request.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the grid data for the domain are completed before initiating an export.\n- Check the export status using the GET endpoint.\n- Use the `signedUrl` to download the file once available.","operationId":"create_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","QUIC-Fire"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Grids"],"summary":"Get Grid Export","description":"# Get Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Possible values are:\n - `\"zarr\"`: Export the data in the compressed zarr format.\n - `\"QUIC-Fire\"`: Exports the grid data to the set of input files required by the QUIC-Fire model.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","QUIC-Fire"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Grids"],"summary":"Delete Grid Export","description":"# Delete Grid Export\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint deletes a grid export request and its associated files for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export to delete. Possible values are:\n - `\"zarr\"`: Delete the export in the compressed zarr format.\n - `\"QUIC-Fire\"`: Delete the grid data exported to the set of input files required by the QUIC-Fire model.\n\n## Response\n\nIf successful, returns a `204 No Content` status code.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to delete an existing grid export request and its related data.\n- The export request is removed from Firestore, and the associated files are deleted from Google Cloud Storage asynchronously.","operationId":"delete_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","QUIC-Fire"],"type":"string","title":"Exportformat"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/tree":{"post":{"tags":["Tree Grid"],"summary":"Create Tree Grid","description":"# Create Tree Grid\n\nThis endpoint creates a new tree grid resource for a specific domain.\nTree grid data represents various 3D gridded tree attribute (e.g.,\nbulk density, fuel moisture, SPCD) data that exists within the spatial\ncontext of a domain. Tree grid data is typically generated to create\ninputs to 3D fire behavior models such as QUIC-Fire or FDS.\n\nOn resource creation, the tree grid data is set to a status of \"pending\".\nThe tree grid data is generated in the background using the specified\nmethod and data sources. Once the tree grid data is generated and\navailable for user access, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/tree\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to create the tree grid.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `attributes` (array of strings, required): List of attributes to include in the tree grid data. Attributes represent the an additional dimension in the 3D gridded data. Possible values are:\n - `\"bulkDensity\"`\n - `\"fuelMoisture\"`\n - `\"SPCD\"`\n\n### Attribute Descriptions and Sources\n\n- `bulkDensity` (kg/m³): The mass of the tree fuel per unit volume of the occupied cell.\n- `foliarMoisture` (%): Live foliar moisture content of the occupied cell.\n- `SPCD` (unitless): The FIA species code of the occupied cell.\n- `SAVR` (m²/m³): The surface area to volume ratio of fuel particles in the occupied cell.\n\nEach attribute can be sourced from different data sources. By default, the system will use pre-defined data sources to acquire data for the specified attributes. However, if you want to specify additional information for how to acquire an attribute, you can provide detailed instructions in the request body.\n\nTo specify additional information for an attribute, add a field with the attribute name to the request body. For example:\n\n```json\n{\n \"attributes\": [\"bulkDensity\", \"fuelMoisture\"],\n \"bulkDensity\": {\n \"source\": \"TreeInventory\",\n \"biomassModel\": \"NSVB\"\n },\n \"fuelMoisture\": {\"source\": \"uniform\", \"value\": 175}\n}\n```\n\nIn this example, the `bulkDensity` attribute is sourced from the Tree Inventory using the NSVB biomass model, and the `fuelMoisture` attribute is set to a uniform value of 175%.\n\nThe general form of this construction is as follows:\n\n- `bulkDensity`, `fuelMoisture`, `SPCD`, `SAVR` (object, optional): The data source for the respective attribute. The structure of these objects depends on the source specified.\n\n#### Uniform Source\n\nIf the source is `\"uniform\"`, the object should have the following fields:\n\n- `value` (float, required): The uniform value for the attribute.\n\n#### Tree Inventory Source\n\nIf the source is `\"TreeInventory\"`, data will be sourced from the Tree Inventory resource.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created tree grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the tree grid. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the tree grid was created.\n- `modifiedOn` (string): The timestamp when the tree grid was last modified.\n- `checksum` (string): A unique checksum for the tree grid resource.\n- `attributes` (array of strings): The list of attributes included in the tree grid.\n- `bulkDensity`, `fuelMoisture`, `SPCD` (object): The data source information for the respective attribute.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The tree inventory for the specified domain does not exist.\n- `400 Bad Request`: The tree inventory status is not \"completed\".\n- `422 Unprocessable Entity`: The request body is invalid or required fields are missing.","operationId":"create_tree_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTreeGridRequest"},"examples":{"default_attributes":{"summary":"Default attributes example","value":{"attributes":["bulkDensity","fuelMoisture"]},"description":"This example creates a tree grid with the default attributes. Default configurations and data sources are used for each provided attribute."},"defaults_with_attributes":{"summary":"Default attributes with explicit fields example","value":{"attributes":["bulkDensity","fuelMoisture"],"bulkDensity":{"source":"TreeInventory"},"fuelMoisture":{"source":"uniform","value":100}},"description":"This example creates a tree grid with the default attributes. Default configurations and data sources are provided for each attribute. These additional fields are equivalent to the default values. Providing them explicitly is optional."},"uniform_fuel_moisture":{"summary":"Uniform fuel moisture example","value":{"attributes":["fuelMoisture"],"fuelMoisture":{"source":"uniform","value":175}},"description":"This example creates a tree grid with a uniform fuel moisture value of 175%."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreeGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Tree Grid"],"summary":"Get Tree Grid","description":"# Get Tree Grid\n\nThis endpoint retrieves the details of an existing tree grid resource\nfor a specific domain. Users can access the status and metadata of the\ntree grid that has been created.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/tree\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to retrieve the tree grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the tree grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the tree grid.\n- `createdOn` (string): The timestamp when the tree grid was created.\n- `modifiedOn` (string): The timestamp when the tree grid was last modified.\n- `checksum` (string): A unique checksum for the tree grid resource.\n- `attributes` (array of strings): The list of attributes included in the tree grid.\n- `bulkDensity`, `fuelMoisture`, `SPCD` (object): The data source information for the respective attribute.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The tree grid for the specified domain does not exist.","operationId":"get_tree_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreeGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Tree Grid"],"summary":"Delete Tree Grid","description":"# Delete Tree Grid\n\nThis endpoint deletes an existing tree grid resource for a specific\ndomain. This action removes the tree grid data from the database and\ncancels any ongoing job execution related to the tree grid.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/tree\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the tree grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the tree grid has been successfully deleted and no content is returned in the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The tree grid for the specified domain does not exist.\n\n## Usage Notes\n\n- Deleting a tree grid is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the tree grid and remove the associated data from the cache and cloud storage.","operationId":"delete_tree_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/tree/attributes":{"get":{"tags":["Tree Grid"],"summary":"Get Tree Grid Attribute Metadata","description":"# Get Tree Grid Attribute Metadata\n\nRetrieves metadata about the structure of the tree grid and its attributes for a given domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/tree/attributes\n```\n\n## Path Parameters\n\n- `domainId` (string, required): Unique identifier of the domain.\n\n## Response\n\n### Success Response (200 OK)\n\nReturns a JSON response containing:\n\n- `shape`: Dimensions of the grid data.\n- `dimensions`: Names of each dimension.\n- `chunks`: Number of chunks in each dimension.\n- `chunkShape`: Shape of each chunk.\n- `attributes`: Detailed information about each available attribute.\n\n### Error Responses\n\n- 404 Not Found: Tree grid not found or not accessible.\n- 422 Unprocessable Entity: Tree grid not in 'completed' status.","operationId":"Get Tree Grid Attribute Metadata","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridAttributeMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/tree/exports/{exportFormat}":{"post":{"tags":["Tree Grid"],"summary":"Create Tree Grid Export","description":"# Create Tree Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/tree/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the tree grid data of a specific domain in the zarr compressed format. The export process runs in the background.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format for the export. Currently, only `\"zarr\"` is supported.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or request.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the tree grid for the domain is completed before initiating an export.\n- Check the export status using the GET endpoint.","operationId":"create_tree_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"zarr","type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Tree Grid"],"summary":"Get Tree Grid Export","description":"# Get Tree Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/tree/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a tree grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Currently, only `\"zarr\"` is supported.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_tree_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"zarr","type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/surface":{"post":{"tags":["Surface Grid"],"summary":"Create Surface Grid","description":"# Create Surface Grid\n\nCreates a new surface grid containing fuel attributes for a domain. Surface fuels are represented through five key attributes: fuel load, fuel depth, fuel moisture, surface area-to-volume ratio (SAVR), and fire behavior fuel models (FBFM).\n\n## Path Parameters\n- `domainId` (string, required): Domain identifier\n\n## Request Body Structure\n\n### Required Fields\n\n- `attributes` (array[string]): One or more surface fuel attributes to include:\n - `fuelLoad`: Fuel loading per unit area (kg/m²)\n - `fuelDepth`: Depth of fuel bed above surface (m)\n - `fuelMoisture`: Mass of water per unit mass of dry fuel (%)\n - `SAVR`: Surface area-to-volume ratio (m²/m³)\n - `FBFM`: Fire behavior fuel model classification\n\n### Data Sources\n\nEach attribute requires a data source. Available sources vary by attribute:\n\n#### 1. LANDFIRE Source (`source: \"LANDFIRE\"`)\nAvailable for: fuelLoad, fuelDepth, SAVR, FBFM\n\nBase configuration:\n- `product`: \"FBFM40\" (Scott & Burgan) or \"FBFM13\" (Anderson)\n- `version`: \"2022\"\n- `interpolationMethod`: \"nearest\", \"linear\", \"cubic\", or \"zipper\"\n- `featureMasks`: Array of feature types to mask (optional)\n- `removeNonBurnable`: Array of non-burnable codes to replace (optional)\n\nFor FBFM40 product, certain attributes can calculate values by size class using the `groups` field:\n\nFuel Load:\n- Without groups: Computes total dead fuel load (1hr + 10hr + 100hr + dead herbaceous + dead woody)\n- With groups: Values for specific size classes:\n - `oneHour`: 1-hour dead fuels + dead herbaceous + dead woody\n - `tenHour`: 10-hour dead fuels\n - `hundredHour`: 100-hour dead fuels\n - `liveHerbaceous`: Live herbaceous fuels\n - `liveWoody`: Live woody fuels\n- Additional fields:\n - `curingLiveHerbaceous`: 0-1\n - `curingLiveWoody`: 0-1\n\nSAVR:\n- Without groups: Computes weighted average SAVR of dead fuels\n- With groups: Values for specific size classes:\n - `oneHour`: 1-hour dead fuels\n - `tenHour`: 10-hour dead fuels\n - `hundredHour`: 100-hour dead fuels\n - `liveHerbaceous`: Live herbaceous fuels\n - `liveWoody`: Live woody fuels\n\nFuel Depth:\n- Groups field is ignored - returns single fuel bed depth value\n\n#### 2. Uniform Value Source (`source: \"uniform\"`)\nAvailable for: all attributes\n\nConfiguration:\n- `value`: Single numeric value applied across entire grid\n- `featureMasks`: Array of feature types to mask (optional)\n\n#### 3. Uniform By Size Class Source (`source: \"uniformBySizeClass\"`)\nAvailable for: fuelMoisture only\n\nConfiguration:\n- `groups` (required): Array of size classes to include. Values must be a subset of:\n - `oneHour`: 1-hour dead fuels\n - `tenHour`: 10-hour dead fuels\n - `hundredHour`: 100-hour dead fuels\n - `liveHerbaceous`: Live herbaceous fuels\n - `liveWoody`: Live woody fuels\n- Must provide corresponding value for each specified group:\n - `oneHour`: Value for 1-hour fuels (if in groups)\n - `tenHour`: Value for 10-hour fuels (if in groups)\n - `hundredHour`: Value for 100-hour fuels (if in groups)\n - `liveHerbaceous`: Value for live herbaceous fuels (if in groups)\n - `liveWoody`: Value for live woody fuels (if in groups)\n- `featureMasks`: Array of feature types to mask (optional)\n\n### Feature Enhancement Options\n\n#### Feature Masks (`featureMasks`)\n- Overlays high-resolution features from OpenStreetMap\n- Available features: \"road\", \"water\", \"building\"\n- Applies to any attribute source type\n\n#### Non-Burnable Replacement (`removeNonBurnable`)\n- Removes specified LANDFIRE non-burnable classes\n- Available codes:\n - \"NB1\": Urban/developed\n - \"NB2\": Snow/ice\n - \"NB3\": Agricultural\n - \"NB8\": Water\n - \"NB9\": Bare ground\n- Replaced using majority filter of surrounding burnable fuels\n- Only available for LANDFIRE sources\n\n### Modifications\nOptional list of modifications to apply to computed values:\n```python\nmodifications: [\n {\n \"conditions\": [\n {\n \"attribute\": string, # Must be in attributes array\n \"operator\": string, # Comparison operator\n \"value\": any # Target value\n }\n ],\n \"actions\": [\n {\n \"attribute\": string, # Must be in attributes array\n \"modifier\": string, # Modification type\n \"value\": any # New value\n }\n ]\n }\n]\n```\n\n## Response\nReturns SurfaceGrid object containing:\n- Request body fields\n- `status`: Job status\n- `createdOn`: Creation timestamp\n- `modifiedOn`: Last modified timestamp\n- `checksum`: Resource checksum\n\n## Errors\n- 404: Domain not found\n- 422: Invalid request or incompatible data sources\n- 429: Too many requests","operationId":"create_surface_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSurfaceGridRequest"},"examples":{"basic":{"value":{"attributes":["fuelLoad","fuelDepth","fuelMoisture"]},"summary":"Basic surface grid request","description":"Creates a surface grid with three attributes using default configurations. The API will automatically use appropriate data sources and settings for each attribute."},"detailed_defaults":{"value":{"attributes":["fuelLoad","fuelDepth","fuelMoisture"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","curingLiveHerbaceous":0.25,"curingLiveWoody":0.25,"groups":["oneHour","tenHour","hundredHour","liveHerbaceous","liveWoody"]},"fuelDepth":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest"},"fuelMoisture":{"source":"uniform","value":15}},"summary":"Detailed configuration example","description":"Shows explicit configuration of each attribute, demonstrating the default values that would be used automatically in the basic example."},"zipper_interpolation":{"value":{"attributes":["fuelLoad","fuelDepth","FBFM"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"zipper"},"fuelDepth":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"zipper"},"FBFM":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"zipper"}},"summary":"Zipper interpolation example","description":"Demonstrates using the zipper interpolation method for smoother transitions between different fuel types at boundaries."},"feature_masks":{"value":{"attributes":["fuelLoad","fuelDepth","fuelMoisture"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"linear","featureMasks":["road","water"],"removeNonBurnable":["NB1","NB8"]},"fuelDepth":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"linear","featureMasks":["road","water"],"removeNonBurnable":["NB1","NB8"]},"fuelMoisture":{"source":"uniform","value":15,"featureMasks":["road","water"]}},"summary":"Feature masks example","description":"Shows how to replace non-burnable fuel models with burnable models and apply a high resolution feature mask to remove fuels from roads and water bodies"},"fuel_model_modification":{"value":{"attributes":["FBFM","fuelLoad","fuelDepth"],"FBFM":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest"},"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","curingLiveHerbaceous":0.25,"curingLiveWoody":0.25},"fuelDepth":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest"},"modifications":[{"conditions":[{"attribute":"FBFM","operator":"eq","value":"GR1"}],"actions":[{"attribute":"FBFM","modifier":"replace","value":"GR2"}]}]},"summary":"Fuel model modification example","description":"Shows how to modify specific fuel models, in this case replacing GR1 with GR2 wherever it occurs."},"size_class_moisture":{"value":{"attributes":["fuelMoisture"],"fuelMoisture":{"source":"uniformBySizeClass","oneHour":0.15,"tenHour":0.2,"hundredHour":0.25,"groups":["oneHour","tenHour","hundredHour"]}},"summary":"Size class moisture example","description":"Demonstrates setting moisture values only for specific size classes."},"fuel_load_groups":{"value":{"attributes":["fuelLoad"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","curingLiveHerbaceous":0.25,"curingLiveWoody":0.25,"groups":["oneHour","tenHour","hundredHour"]}},"summary":"Size class groups for fuel load","description":"Shows how to request fuel load data for specific size class groups. This example retrieves dead fuel loading for 1-hour, 10-hour, and 100-hour fuels."},"savr_groups":{"value":{"attributes":["SAVR"],"SAVR":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","groups":["liveHerbaceous","liveWoody"]}},"summary":"Size class groups for surface area to volume ratio","description":"Shows how to request SAVR data for specific size class groups. This example retrieves SAVR values for live herbaceous and live woody fuels."},"combined_size_classes":{"value":{"attributes":["fuelLoad","fuelMoisture","SAVR"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","curingLiveHerbaceous":0.25,"curingLiveWoody":0.25,"groups":["oneHour","liveHerbaceous"]},"fuelMoisture":{"source":"uniformBySizeClass","oneHour":0.15,"tenHour":0.2,"hundredHour":0.25,"liveHerbaceous":0.75,"liveWoody":0.9,"groups":["oneHour","liveHerbaceous"]},"SAVR":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","groups":["oneHour","liveHerbaceous"]}},"summary":"Combined size class configurations","description":"Demonstrates how to combine multiple attributes with consistent size class groups. This example focuses on 1-hour and live herbaceous fuels across fuel load, moisture, and SAVR attributes."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurfaceGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Surface Grid"],"summary":"Get Surface Grid","description":"# Get Surface Grid\n\nThis endpoint retrieves the details of an existing surface grid resource\nfor a specific domain. Users can access the status and metadata of the\nsurface grid that has been created.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/surface\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to retrieve the surface grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the surface grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the surface grid.\n- `createdOn` (string): The timestamp when the surface grid was created.\n- `modifiedOn` (string): The timestamp when the surface grid was last modified.\n- `checksum` (string): A unique checksum for the surface grid resource.\n- `attributes` (array of strings): The list of attributes included in the surface grid.\n- `fuelLoad`, `fuelDepth`, `fuelMoisture`, `SAVR`, `FBFM` (object): The data source information for the respective attribute.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The surface grid for the specified domain does not exist.","operationId":"get_surface_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurfaceGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Surface Grid"],"summary":"Delete Surface Grid","description":"# Delete Surface Grid\n\nThis endpoint deletes an existing surface grid resource for a specific\ndomain. This action removes the surface grid data from the database and\ncancels any ongoing job execution related to the surface grid.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/surface\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the surface grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the surface grid has been successfully deleted and no content is returned in the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The surface grid for the specified domain does not exist.\n\n## Usage Notes\n\n- Deleting a surface grid is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the surface grid and remove the associated data from the cache and cloud storage.","operationId":"delete_surface_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/surface/attributes":{"get":{"tags":["Surface Grid"],"summary":"Get Surface Grid Attribute Metadata","description":"# Get Surface Grid Attribute Metadata\n\nRetrieves metadata about the structure of the surface grid and its attributes for a given domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/surface/attributes\n```\n\n## Path Parameters\n\n- `domainId` (string, required): Unique identifier of the domain.\n\n## Response\n\n### Success Response (200 OK)\n\nReturns a JSON response containing:\n\n- `shape`: Dimensions of the grid data.\n- `dimensions`: Names of each dimension.\n- `chunks`: Number of chunks in each dimension.\n- `chunkShape`: Shape of each chunk.\n- `attributes`: Detailed information about each available attribute.\n\n### Error Responses\n\n- 404 Not Found: Surface grid not found or not accessible.\n- 422 Unprocessable Entity: Surface grid not in 'completed' status.","operationId":"Get Surface Grid Attribute Metadata","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridAttributeMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/surface/exports/{exportFormat}":{"post":{"tags":["Surface Grid"],"summary":"Create Surface Grid Export","description":"# Create Surface Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/surface/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the surface grid data of a specific domain in the zarr compressed format. The export process runs in the background.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format for the export. Currently, the supported formats are `\"zarr\"` and `\"geotiff\"`.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or request.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the surface grid for the domain is completed before initiating an export.\n- Check the export status using the GET endpoint.","operationId":"create_surface_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Surface Grid"],"summary":"Get Surface Grid Export","description":"# Get Surface Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/surface/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a surface grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Currently, supported formats are `\"zarr\"` and `\"geotiff\"`.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_surface_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/topography":{"post":{"tags":["Topography Grid"],"summary":"Create Topography Grid","description":"# Create Topography Grid\n\nThis endpoint creates a new topography grid resource for a specific domain.\nTopography grid data represents various topographic attributes (elevation,\nslope, and aspect) that exist within the spatial context of a domain.\nThe topography grid data can be generated using different data sources\n(3DEP, LANDFIRE, or uniform values) and interpolation methods.\n\nOn resource creation, the topography grid data is set to a status of \"pending\".\nThe topography grid data is generated in the background using the specified\nmethod and data sources. Once the topography grid data is generated and\navailable for user access, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/topography\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to create the topography grid.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `attributes` (array of strings, required): List of attributes to include in the topography grid. Possible values are:\n - `\"elevation\"`\n - `\"slope\"`\n - `\"aspect\"`\n\n### Attribute Descriptions and Sources\n\n- `elevation` (m): The elevation of the terrain above sea level.\n- `slope` (degrees): The slope of the terrain surface.\n- `aspect` (degrees): The aspect of the terrain surface (direction the slope faces).\n\nEach attribute can be sourced from different data sources. By default, the system will use 3DEP (USGS 3D Elevation Program) data for all attributes. However, if you want to specify different sources or configurations for any attribute, you can provide detailed instructions in the request body.\n\nTo specify additional information for an attribute, add a field with the attribute name to the request body. For example:\n\n```json\n{\n \"attributes\": [\"elevation\"],\n \"elevation\": {\n \"source\": \"3DEP\",\n \"interpolationMethod\": \"cubic\"\n }\n}\n```\n\nThe structure of attribute configuration objects depends on the source specified:\n\n#### 3DEP Source (Default)\n\nIf the source is `\"3DEP\"`, the object should have the following fields:\n\n- `source` (string, required): Must be `\"3DEP\"`.\n- `interpolationMethod` (string, required): The interpolation method to use. Possible values are:\n - `\"nearest\"`: Preserves exact data points without interpolation\n - `\"linear\"`: Linear interpolation between points\n - `\"cubic\"`: Smooth interpolation using cubic splines (default for elevation and slope)\n\nNote: Aspect attribute automatically uses nearest neighbor interpolation regardless of what is specified.\n\n#### LANDFIRE Source\n\nIf the source is `\"LANDFIRE\"`, the object should have the following fields:\n\n- `source` (string, required): Must be `\"LANDFIRE\"`.\n- `version` (string, required): The version of the LANDFIRE product. Currently, only `\"2020\"` is supported.\n- `interpolationMethod` (string, required): The interpolation method to use. Possible values are:\n - `\"nearest\"`: Preserves exact data points\n - `\"linear\"`: Linear interpolation\n - `\"cubic\"`: Smooth cubic interpolation\n - `\"zipper\"`: Special method for LANDFIRE data\n\nNote: Aspect attribute automatically uses nearest neighbor interpolation regardless of what is specified.\n\n#### Uniform Source\n\nIf the source is `\"uniform\"`, the object should have the following fields:\n\n- `source` (string, required): Must be `\"uniform\"`.\n- `value` (float, required): The uniform value for the attribute.\n\nNote: Uniform source is only available for the elevation attribute.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created topography grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `attributes` (array of strings): The list of attributes included in the topography grid.\n- `elevation` (object, optional): The data source configuration for elevation.\n- `slope` (object, optional): The data source configuration for slope.\n- `aspect` (object, optional): The data source configuration for aspect.\n- `status` (string): The status of the topography grid. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the topography grid was created.\n- `modifiedOn` (string): The timestamp when the topography grid was last modified.\n- `checksum` (string): A unique checksum for the topography grid resource.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `422 Unprocessable Entity`: The request body is invalid, the data sources are not compatible with the domain CRS, or required fields are missing.\n- `429 Too Many Requests`: The system is currently unable to process additional job requests.","operationId":"create_topography_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTopographyGridRequest"},"examples":{"default_attributes":{"value":{"attributes":["elevation"]},"summary":"Simple elevation request (uses 3DEP)","description":"Creates a topography grid with elevation data using the default 3DEP source. This is the simplest way to get high-quality elevation data."},"default_attributes_with_fields":{"value":{"attributes":["elevation"],"elevation":{"source":"3DEP","interpolationMethod":"cubic"}},"summary":"Default configuration (3DEP) shown explicitly","description":"Creates a topography grid using 3DEP with default settings shown explicitly. While providing these fields is unnecessary when using defaults, this example shows the actual configuration being used."},"landfire_elevation":{"value":{"attributes":["elevation"],"elevation":{"source":"LANDFIRE","version":"2020","interpolationMethod":"cubic"}},"summary":"Using LANDFIRE for elevation data","description":"Creates a topography grid using LANDFIRE elevation data instead of the default 3DEP source. LANDFIRE might be preferred when working with other LANDFIRE-sourced data for consistency."},"landfire_all":{"value":{"attributes":["elevation","slope","aspect"],"elevation":{"source":"LANDFIRE","version":"2020","interpolationMethod":"cubic"},"slope":{"source":"LANDFIRE","version":"2020","interpolationMethod":"cubic"},"aspect":{"source":"LANDFIRE","version":"2020","interpolationMethod":"nearest"}},"summary":"Using LANDFIRE for all attributes","description":"Creates a complete topography grid using LANDFIRE data for all attributes. Note that aspect uses nearest neighbor interpolation to preserve directional accuracy."},"nearest_interpolation":{"value":{"attributes":["elevation"],"elevation":{"source":"3DEP","interpolationMethod":"nearest"}},"summary":"Using nearest neighbor interpolation","description":"Creates a topography grid using nearest neighbor interpolation instead of the default cubic interpolation. This might be preferred when you want to preserve exact data points without interpolation."},"all_attributes":{"value":{"attributes":["elevation","slope","aspect"]},"summary":"All topographic attributes","description":"Creates a complete topography grid with elevation, slope, and aspect using default 3DEP source and configurations for each attribute. Note that aspect automatically uses nearest neighbor interpolation while elevation and slope use cubic interpolation."},"mixed_sources":{"value":{"attributes":["elevation","slope","aspect"],"elevation":{"source":"LANDFIRE","version":"2020","interpolationMethod":"cubic"},"slope":{"source":"3DEP","interpolationMethod":"cubic"},"aspect":{"source":"LANDFIRE","version":"2020","interpolationMethod":"nearest"}},"summary":"Mixed data sources","description":"Creates a topography grid mixing LANDFIRE and 3DEP sources. Shows how different data sources can be used for different attributes, which might be useful when optimizing for specific attribute qualities or data consistency requirements."},"uniform_elevation":{"value":{"attributes":["elevation"],"elevation":{"source":"uniform","value":1000.0}},"summary":"Uniform elevation","description":"Creates a topography grid with a uniform elevation value. This can be useful for testing or theoretical scenarios where a flat surface is desired."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopographyGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Topography Grid"],"summary":"Get Topography Grid","description":"# Get Topography Grid\n\nThis endpoint retrieves the details of an existing topography grid resource\nfor a specific domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/topography\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to retrieve the topography grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the topography grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `attributes` (array of strings): The list of attributes included in the topography grid (elevation, slope, and/or aspect).\n- `elevation` (object, optional): The data source configuration for elevation.\n- `slope` (object, optional): The data source configuration for slope.\n- `aspect` (object, optional): The data source configuration for aspect.\n- `status` (string): The current status of the topography grid (e.g., \"pending\", \"completed\").\n- `createdOn` (string): The timestamp when the topography grid was created.\n- `modifiedOn` (string): The timestamp when the topography grid was last modified.\n- `checksum` (string): A unique checksum for the topography grid resource.\n\nThe structure of attribute configuration objects will match what was provided during creation, with 3DEP as the default source. See the create_topography_grid endpoint documentation for details on data source configurations.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist, the user does not have access to it, or the topography grid for the specified domain does not exist.\n\n## Usage Notes\n\n- Use this endpoint to check the status and details of a previously created topography grid.\n- The response will include all the information provided during the creation of the topography grid, along with its current status and timestamps.","operationId":"get_topography_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopographyGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Topography Grid"],"summary":"Delete Topography Grid","description":"# Delete Topography Grid\n\nThis endpoint deletes an existing topography grid resource for a specific\ndomain. This action removes the topography grid data from the database and\ncancels any ongoing job execution related to the topography grid.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/topography\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the topography grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the topography grid has been successfully deleted and no content is returned in the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The topography grid for the specified domain does not exist.\n\n## Usage Notes\n\n- Deleting a topography grid is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the topography grid and remove the associated data from the cache and cloud storage.","operationId":"delete_topography_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/topography/attributes":{"get":{"tags":["Topography Grid"],"summary":"Get Topography Grid Attribute Metadata","description":"# Get Topography Grid Attribute Metadata\n\nThis endpoint retrieves detailed metadata about the structure of the topography grid and its attributes for a given domain. This includes information about the grid's dimensions, chunking, and available attributes with their units and descriptions.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/topography/attributes\n```\n\n## Path Parameters\n\n- `domainId` (string, required): Unique identifier of the domain.\n\n## Response\n\n### Success Response (200 OK)\n\nReturns a JSON response containing:\n\n- `shape` (array): Dimensions of the grid data [height, width].\n- `dimensions` (array): Names of each dimension [\"y\", \"x\"].\n- `chunks` (array): Number of chunks in each dimension.\n- `chunkShape` (array): Shape of each chunk [chunk_height, chunk_width].\n- `attributes` (array): Detailed information about each available attribute:\n - `name` (string): Attribute name (e.g., \"elevation\", \"slope\", \"aspect\")\n - `description` (string): Description of what the attribute represents\n - `units` (string): Units of measurement (e.g., \"m\", \"degrees\")\n\n### Error Responses\n\n- `404 Not Found`: Topography grid not found or not accessible.\n- `422 Unprocessable Entity`: Topography grid not in 'completed' status.","operationId":"Get Topography Grid Attribute Metadata","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridAttributeMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/topography/exports/{exportFormat}":{"post":{"tags":["Topography Grid"],"summary":"Create Topography Grid Export","description":"# Create Topography Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/topography/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the topography grid data of a specific domain. The export process runs in the background and can generate files in either zarr or GeoTIFF format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format for the export. Supported values:\n - `\"zarr\"`: Zarr array format, suitable for high-performance array storage\n - `\"geotiff\"`: GeoTIFF format, suitable for GIS applications\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or topography grid not in completed status.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the topography grid for the domain is completed before initiating an export.\n- Check the export status using the GET endpoint.","operationId":"create_topography_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Topography Grid"],"summary":"Get Topography Grid Export","description":"# Get Topography Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/topography/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a topography grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Currently, only `\"zarr\"` is supported.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_topography_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/feature":{"post":{"tags":["Feature Grid"],"summary":"Create Feature Grid","description":"# Create Feature Grid\n\nThis endpoint creates a new feature grid resource for a specific domain. Feature grids\nare used to represent spatial data related to various features within the domain. This\noperation generates a feature grid based on the provided configuration and data sources.\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/feature\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to create the feature grid.\n\n## Request Body\n\nThe request body should be a JSON object adhering to the `CreateFeatureGridRequest` model, containing\nthe necessary configuration and data source information for generating the feature grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created feature grid resource in the response body. The response body will include the following fields:\n\n- `createdOn` (string): The timestamp when the feature grid was created.\n- `modifiedOn` (string): The timestamp when the feature grid was last modified.\n- `status` (string): The status of the feature grid, initially set to `\"PENDING\"`.\n- `checksum` (string): A unique checksum for the feature grid resource.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `429 Too Many Requests`: The system is currently overloaded, and the job could not be submitted.\n\n## Usage Notes\n\n- If an existing feature grid already exists for the domain, its associated job execution will be canceled before creating the new grid.\n- The feature grid generation is handled as a background job. The status will initially be `\"PENDING\"` and will be updated once the job completes.\n- The system will attempt to remove any cached data related to the previous feature grid.","operationId":"create_feature_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFeatureGridRequest"},"examples":{"default_attributes":{"value":{"attributes":["road","water"]},"summary":"Road and Water attributes example","description":"This example creates a feature grid using both road and water feature data."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Feature Grid"],"summary":"Get Feature Grid","description":"# Get Feature Grid\n\nThis endpoint retrieves the feature grid data for a specific domain. Feature grids\nrepresent spatial data related to various features within the domain. If the feature grid\ndata has been generated and stored, it will be returned in the response.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/feature\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to retrieve the feature grid.\n\n## Response\n\nIf the feature grid data exists, the endpoint will return a `200 OK` status code and the feature grid resource in the response body. The response will be a JSON object adhering to the `FeatureGrid` model, which includes:\n\n- `createdOn` (string): The timestamp when the feature grid was created.\n- `modifiedOn` (string): The timestamp when the feature grid was last modified.\n- `status` (string): The current status of the feature grid.\n- `checksum` (string): A unique checksum for the feature grid resource.\n\n## Error Responses\n\n- `404 Not Found`: The feature grid data has not been created for the specified domain, or it cannot be retrieved.\n\n## Usage Notes\n\n- Ensure that the `domainId` provided is correct and that the user has the appropriate permissions to access the domain's data.\n- The feature grid data is retrieved from the database, and if it does not exist, a `404 Not Found` error will be returned.","operationId":"get_feature_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Feature Grid"],"summary":"Delete Feature Grid","description":"# Delete Feature Grid\n\nThis endpoint deletes the feature grid data for a specific domain. If the feature grid exists,\nit will be removed from the database, and any associated resources, such as files in the GCS bucket,\nwill be deleted asynchronously.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/feature\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the feature grid.\n\n## Response\n\n- `204 No Content`: The feature grid was successfully deleted. The response body will be empty.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain or feature grid does not exist or the user does not have access to it.\n\n## Usage Notes\n\n- Ensure that the `domainId` provided is correct and that the user has the appropriate permissions to delete the domain's data.\n- The feature grid data is removed from the database, and any running jobs related to the feature grid are canceled in the background.\n- The associated Zarr group in the GCS bucket is deleted asynchronously.","operationId":"delete_feature_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/feature/attributes":{"get":{"tags":["Feature Grid"],"summary":"Get Feature Grid Attribute Metadata","description":"# Get Feature Grid Attribute Metadata\n\nRetrieves metadata about the structure of the feature grid and its attributes for a given domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/feature/attributes\n```\n\n## Path Parameters\n\n- `domainId` (string, required): Unique identifier of the domain.\n\n## Response\n\n### Success Response (200 OK)\n\nReturns a JSON response containing:\n\n- `shape`: Dimensions of the grid data.\n- `dimensions`: Names of each dimension.\n- `chunks`: Number of chunks in each dimension.\n- `chunkShape`: Shape of each chunk.\n- `attributes`: Detailed information about each available attribute.\n\n### Error Responses\n\n- 404 Not Found: Feature grid not found or not accessible.\n- 422 Unprocessable Entity: Feature grid not in 'completed' status.","operationId":"Get Feature Grid Attribute Metadata","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridAttributeMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/feature/exports/{exportFormat}":{"post":{"tags":["Feature Grid"],"summary":"Create Feature Grid Export","description":"# Create Feature Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/feature/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the feature grid data of a specific domain in the zarr compressed format. The export process runs in the background.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format for the export. Currently, the supported formats are `\"zarr\"` and `\"geotiff\"`.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or request.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the feature grid for the domain is completed before initiating an export.\n- Check the export status using the GET endpoint.","operationId":"create_feature_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Feature Grid"],"summary":"Get Feature Grid Export","description":"# Get Feature Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/feature/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a feature grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Currently, supported formats are `\"zarr\"` and `\"geotiff\"`.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_feature_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Access":{"type":"string","enum":["personal","application"],"title":"Access","description":"Enumerates the available access types for an API key."},"Application":{"properties":{"name":{"type":"string","title":"Name","description":"A name for the application."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"An optional description for the application."},"id":{"type":"string","title":"Id","description":"Unique identifier for the application."},"ownerId":{"type":"string","title":"Ownerid","description":"Unique identifier of the user that adimisters the application."},"createdOn":{"type":"string","format":"date-time","title":"Createdon","description":"The date and time the application was created."},"modifiedOn":{"type":"string","format":"date-time","title":"Modifiedon","description":"The date and time the application was modified."}},"type":"object","required":["name","id","ownerId"],"title":"Application","description":"Represents an application that can access the FastFuels API on behalf of non-FastFuels users."},"CreateApplicationRequest":{"properties":{"name":{"type":"string","title":"Name","description":"A name for the application."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"An optional description for the application."}},"type":"object","required":["name"],"title":"CreateApplicationRequest","description":"Request body for creating a new application."},"CreateDomainRequest":{"oneOf":[{"$ref":"#/components/schemas/CreateDomainRequestFeature"},{"$ref":"#/components/schemas/CreateDomainRequestFeatureCollection"}],"title":"CreateDomainRequest","discriminator":{"propertyName":"type","mapping":{"Feature":"#/components/schemas/CreateDomainRequestFeature","FeatureCollection":"#/components/schemas/CreateDomainRequestFeatureCollection"}}},"CreateDomainRequestFeature":{"properties":{"type":{"type":"string","const":"Feature","title":"Type","default":"Feature"},"geometry":{"oneOf":[{"$ref":"#/components/schemas/Point"},{"$ref":"#/components/schemas/MultiPoint"},{"$ref":"#/components/schemas/LineString"},{"$ref":"#/components/schemas/MultiLineString"},{"$ref":"#/components/schemas/Polygon"},{"$ref":"#/components/schemas/MultiPolygon"}],"title":"Geometry","discriminator":{"propertyName":"type","mapping":{"LineString":"#/components/schemas/LineString","MultiLineString":"#/components/schemas/MultiLineString","MultiPoint":"#/components/schemas/MultiPoint","MultiPolygon":"#/components/schemas/MultiPolygon","Point":"#/components/schemas/Point","Polygon":"#/components/schemas/Polygon"}}},"properties":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Properties"},"name":{"type":"string","title":"Name","description":"The name of the domain.","default":""},"description":{"type":"string","title":"Description","description":"A brief description of the domain.","default":""},"horizontalResolution":{"type":"number","title":"Horizontalresolution","description":"The horizontal resolution in meters of a regular grid representation of the domain.","default":2.0},"verticalResolution":{"type":"number","title":"Verticalresolution","description":"The vertical resolution in meters of a regular grid representation of the domain.","default":1.0},"crs":{"$ref":"#/components/schemas/GeoJsonCRS","description":"The GeoJSON specification formatted coordinate reference system (CRS) of the domain."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"A list of tags associated with the domain.","default":[]}},"type":"object","required":["geometry"],"title":"CreateDomainRequestFeature"},"CreateDomainRequestFeatureCollection":{"properties":{"type":{"type":"string","const":"FeatureCollection","title":"Type","default":"FeatureCollection"},"features":{"items":{"$ref":"#/components/schemas/GeoJSONFeature"},"type":"array","minItems":1,"title":"Features"},"name":{"type":"string","title":"Name","description":"The name of the domain.","default":""},"description":{"type":"string","title":"Description","description":"A brief description of the domain.","default":""},"horizontalResolution":{"type":"number","title":"Horizontalresolution","description":"The horizontal resolution in meters of a regular grid representation of the domain.","default":2.0},"verticalResolution":{"type":"number","title":"Verticalresolution","description":"The vertical resolution in meters of a regular grid representation of the domain.","default":1.0},"crs":{"$ref":"#/components/schemas/GeoJsonCRS","description":"The GeoJSON specification formatted coordinate reference system (CRS) of the domain."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"A list of tags associated with the domain.","default":[]}},"type":"object","required":["features"],"title":"CreateDomainRequestFeatureCollection"},"CreateFeatureGridRequest":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/FeatureGridAttribute"},"type":"array","title":"Attributes","description":"List of feature types to rasterize."}},"type":"object","required":["attributes"],"title":"CreateFeatureGridRequest"},"CreateKeyRequest":{"properties":{"name":{"type":"string","title":"Name","description":"A name to semantically identify the key."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"An optional description of the keys purpose."},"validDays":{"type":"integer","title":"Validdays","description":"Number of days for which this key will be valid.","default":30},"scopes":{"items":{"$ref":"#/components/schemas/Scope"},"type":"array","title":"Scopes","description":"A list of scopes available to the key.","default":["read"]},"access":{"$ref":"#/components/schemas/Access","description":"Access type for the API key","default":"personal"},"applicationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applicationid","description":"Application ID accessed by the API key"}},"type":"object","required":["name"],"title":"CreateKeyRequest","description":"Request body for creating an API key resource"},"CreateRoadFeatureRequest":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/RoadFeatureSource"},"type":"array","title":"Sources","description":"List of sources of road features"}},"type":"object","required":["sources"],"title":"CreateRoadFeatureRequest"},"CreateSurfaceGridRequest":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/SurfaceGridAttribute"},"type":"array","minItems":1,"title":"Attributes","description":"List of attributes to include in the surface grid"},"fuelLoad":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40FuelLoadSource"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridFuelLoadSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40FuelLoadSource","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Fuelload"},"fuelDepth":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Source"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridFuelDepthSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40Source","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Fueldepth"},"fuelMoisture":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridUniformValue"},{"$ref":"#/components/schemas/SurfaceGridUniformValueBySizeClass"}],"title":"SurfaceGridFuelMoistureSource","discriminator":{"propertyName":"source","mapping":{"uniform":"#/components/schemas/SurfaceGridUniformValue","uniformBySizeClass":"#/components/schemas/SurfaceGridUniformValueBySizeClass"}}},{"type":"null"}],"title":"Fuelmoisture"},"SAVR":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40SAVRSource"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridSAVRSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40SAVRSource","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Savr"},"FBFM":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Source"},{"$ref":"#/components/schemas/SurfaceGridUniformFBFM40Value"}],"title":"SurfaceGridFBFMSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40Source","uniform":"#/components/schemas/SurfaceGridUniformFBFM40Value"}}},{"type":"null"}],"title":"Fbfm"},"modifications":{"items":{"$ref":"#/components/schemas/SurfaceGridModification"},"type":"array","maxItems":1000,"title":"ListSurfaceGridModifications","description":"List of modifications to apply to the surface grid","default":[]}},"type":"object","required":["attributes"],"title":"CreateSurfaceGridRequest"},"CreateTopographyGridRequest":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/TopographyGridAttribute"},"type":"array","title":"Attributes","description":"List of attributes to include in the surface grid"},"elevation":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSource"},{"$ref":"#/components/schemas/TopographyGridLandfireSource"},{"$ref":"#/components/schemas/TopographyGridUniformValue"}],"title":"TopographyGridElevationSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSource","LANDFIRE":"#/components/schemas/TopographyGridLandfireSource","uniform":"#/components/schemas/TopographyGridUniformValue"}}},{"type":"null"}],"title":"Elevation"},"aspect":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSourceAspect"},{"$ref":"#/components/schemas/TopographyGridLandfireSourceAspect"}],"title":"TopographyGridAspectSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSourceAspect","LANDFIRE":"#/components/schemas/TopographyGridLandfireSourceAspect"}}},{"type":"null"}],"title":"Aspect"},"slope":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSource"},{"$ref":"#/components/schemas/TopographyGridLandfireSource"}],"title":"TopographyGridSlopeSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSource","LANDFIRE":"#/components/schemas/TopographyGridLandfireSource"}}},{"type":"null"}],"title":"Slope"}},"type":"object","required":["attributes"],"title":"CreateTopographyGridRequest"},"CreateTreeGridRequest":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/TreeGridAttribute"},"type":"array","title":"Attributes","description":"List of attributes to include in the tree grid. Each attribute is a separate layer in the grid. Attributes present in the list will be assigned default values unless an additional field is provided.","default":["bulkDensity","fuelMoisture"]},"bulkDensity":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridBulkDensitySource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Bulkdensity"},"fuelMoisture":{"anyOf":[{"$ref":"#/components/schemas/TreeGridUniformValue"},{"type":"null"}]},"SPCD":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridSPCDSource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Spcd"},"SAVR":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridSAVRSource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Savr"}},"type":"object","title":"CreateTreeGridRequest","description":"The request used to create a tree grid."},"CreateTreeInventoryRequest":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/TreeInventorySource"},"type":"array","maxItems":1,"minItems":1,"title":"Sources","description":"The data sources used to build the tree inventory. Currently, only one data source at a time is supported."},"TreeMap":{"anyOf":[{"$ref":"#/components/schemas/TreeMapSource"},{"type":"null"}]},"modifications":{"items":{"$ref":"#/components/schemas/TreeInventoryModification"},"type":"array","maxItems":1000,"title":"ListTreeInventoryModifications","description":"List of modifications to apply to the tree inventory data","default":[]},"treatments":{"items":{"oneOf":[{"$ref":"#/components/schemas/TreeInventoryTreatmentDirectionalThinning"},{"$ref":"#/components/schemas/TreeInventoryTreatmentProportionalThinning"}],"title":"TreeInventoryTreatment","description":"A treatment to apply to the tree inventory data","discriminator":{"propertyName":"method","mapping":{"directionalThinning":"#/components/schemas/TreeInventoryTreatmentDirectionalThinning","proportionalThinning":"#/components/schemas/TreeInventoryTreatmentProportionalThinning"}}},"type":"array","maxItems":1000,"title":"ListTreeInventoryTreatments","description":"List of silvicultural treatments to apply.","default":[]},"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of Features to mask tree inventory data. This has the effect of removing trees that intersect with the feature.","default":[]}},"type":"object","required":["sources"],"title":"CreateTreeInventoryRequest"},"CreateWaterFeatureRequest":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/WaterFeatureSource"},"type":"array","title":"Sources","description":"List of sources of road features"}},"type":"object","required":["sources"],"title":"CreateWaterFeatureRequest"},"Domain":{"properties":{"type":{"type":"string","const":"FeatureCollection","title":"Type","default":"FeatureCollection"},"features":{"items":{"$ref":"#/components/schemas/GeoJSONFeature"},"type":"array","minItems":1,"title":"Features"},"name":{"type":"string","title":"Name","description":"The name of the domain.","default":""},"description":{"type":"string","title":"Description","description":"A brief description of the domain.","default":""},"horizontalResolution":{"type":"number","title":"Horizontalresolution","description":"The horizontal resolution in meters of a regular grid representation of the domain.","default":2.0},"verticalResolution":{"type":"number","title":"Verticalresolution","description":"The vertical resolution in meters of a regular grid representation of the domain.","default":1.0},"crs":{"$ref":"#/components/schemas/GeoJsonCRS","description":"The GeoJSON specification formatted coordinate reference system (CRS) of the domain."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"A list of tags associated with the domain.","default":[]},"id":{"type":"string","title":"Id","description":"A unique identifier for the domain."},"createdOn":{"type":"string","format":"date-time","title":"Createdon","description":"The date and time the domain was created."},"modifiedOn":{"type":"string","format":"date-time","title":"Modifiedon","description":"The date and time the domain was last modified."}},"type":"object","required":["features","createdOn","modifiedOn"],"title":"Domain","description":"Represents a domain resource."},"DomainSortField":{"type":"string","enum":["createdOn","modifiedOn","name"],"title":"DomainSortField","description":"Enum for sorting domain resources by field."},"DomainSortOrder":{"type":"string","enum":["ascending","descending"],"title":"DomainSortOrder","description":"Enum for sorting domain resources by order."},"Export":{"properties":{"domainId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domainid","description":"The domain ID."},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource","description":"The resource to export."},"subResource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subresource","description":"The sub-resource to export."},"attribute":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attribute","description":"The attribute to export."},"format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Format","description":"The format to export the resource in."},"status":{"anyOf":[{"$ref":"#/components/schemas/ExportStatus"},{"type":"null"}],"description":"The status of the export job."},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon","description":"The date and time the export job was created."},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon","description":"The date and time the export job was last modified."},"signedUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signedurl","description":"The signed URL to download the exported file."},"expiresOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expireson","description":"The date and time the export job will expire."}},"type":"object","title":"Export","description":"Request to export a resource"},"ExportStatus":{"type":"string","enum":["pending","running","failed","completed","expired"],"title":"ExportStatus"},"FBFM40":{"type":"string","enum":["NB1","NB2","NB3","NB8","NB9","GR1","GR2","GR3","GR4","GR5","GR6","GR7","GR8","GR9","GS1","GS2","GS3","GS4","SH1","SH2","SH3","SH4","SH5","SH6","SH7","SH8","SH9","TU1","TU2","TU3","TU4","TU5","TL1","TL2","TL3","TL4","TL5","TL6","TL7","TL8","TL9","SB1","SB2","SB3","SB4"],"title":"FBFM40"},"FeatureGrid":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/FeatureGridAttribute"},"type":"array","title":"Attributes","description":"List of feature types to rasterize."},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","required":["attributes"],"title":"FeatureGrid"},"FeatureGridAttribute":{"type":"string","enum":["road","water"],"title":"FeatureGridAttribute"},"FeatureType":{"type":"string","enum":["road","water"],"title":"FeatureType"},"Features":{"properties":{"road":{"anyOf":[{"$ref":"#/components/schemas/RoadFeature"},{"type":"null"}]},"water":{"anyOf":[{"$ref":"#/components/schemas/WaterFeature"},{"type":"null"}]}},"type":"object","title":"Features"},"GeoJSONFeature":{"properties":{"type":{"type":"string","const":"Feature","title":"Type","default":"Feature"},"geometry":{"oneOf":[{"$ref":"#/components/schemas/Point"},{"$ref":"#/components/schemas/MultiPoint"},{"$ref":"#/components/schemas/LineString"},{"$ref":"#/components/schemas/MultiLineString"},{"$ref":"#/components/schemas/Polygon"},{"$ref":"#/components/schemas/MultiPolygon"}],"title":"Geometry","discriminator":{"propertyName":"type","mapping":{"LineString":"#/components/schemas/LineString","MultiLineString":"#/components/schemas/MultiLineString","MultiPoint":"#/components/schemas/MultiPoint","MultiPolygon":"#/components/schemas/MultiPolygon","Point":"#/components/schemas/Point","Polygon":"#/components/schemas/Polygon"}}},"properties":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Properties"}},"type":"object","required":["geometry"],"title":"GeoJSONFeature","description":"A GeoJSON Feature object."},"GeoJSONFeatureCollection":{"properties":{"type":{"type":"string","const":"FeatureCollection","title":"Type","default":"FeatureCollection"},"features":{"items":{"$ref":"#/components/schemas/GeoJSONFeature"},"type":"array","minItems":1,"title":"Features"}},"type":"object","required":["features"],"title":"GeoJSONFeatureCollection","description":"A GeoJSON FeatureCollection object."},"GeoJSONStyleProperties":{"properties":{"strokeColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strokecolor","description":"The color of a line as part of a polygon, polyline, or multigeometry","examples":["#555555"]},"strokeOpacity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Strokeopacity","description":"The opacity of the line component of a polygon, polyline, or multigeometry","examples":[1.0]},"strokeWidth":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Strokewidth","description":"The width of the line component of a polygon, polyline, or multigeometry","examples":[2.0]},"fillColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fillcolor","description":"The color of the interior of a polygon","examples":["#555555"]},"fillOpacity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Fillopacity","description":"The opacity of the interior of a polygon","examples":[0.5]}},"type":"object","title":"GeoJSONStyleProperties"},"GeoJsonCRS":{"properties":{"type":{"type":"string","const":"name","title":"Type","default":"name"},"properties":{"$ref":"#/components/schemas/GeoJsonCRSProperties"}},"type":"object","required":["properties"],"title":"GeoJsonCRS"},"GeoJsonCRSProperties":{"properties":{"name":{"type":"string","title":"Name","default":"EPSG:4326"}},"type":"object","title":"GeoJsonCRSProperties"},"GridAttributeMetadataResponse":{"properties":{"shape":{"items":{"type":"integer"},"type":"array","maxItems":3,"minItems":2,"title":"Shape","description":"The total shape of the grid data."},"dimensions":{"items":{"type":"string"},"type":"array","maxItems":3,"minItems":2,"title":"Dimensions","description":"A text descriptor of each dimension in the grid data."},"chunks":{"items":{"type":"integer"},"type":"array","maxItems":3,"minItems":2,"title":"Chunks","description":"The number of chunks in each dimension."},"chunkShape":{"items":{"type":"integer"},"type":"array","maxItems":3,"minItems":2,"title":"Chunkshape","description":"The shape of each chunk."},"attributes":{"items":{"type":"object"},"type":"array","title":"Attributes","description":"Information about each attribute in the grid data."}},"type":"object","required":["shape","dimensions","chunks","chunkShape","attributes"],"title":"GridAttributeMetadataResponse"},"Grids":{"properties":{"tree":{"anyOf":[{"$ref":"#/components/schemas/TreeGrid"},{"type":"null"}]},"surface":{"anyOf":[{"$ref":"#/components/schemas/SurfaceGrid"},{"type":"null"}]},"topography":{"anyOf":[{"$ref":"#/components/schemas/TopographyGrid"},{"type":"null"}]},"feature":{"anyOf":[{"$ref":"#/components/schemas/FeatureGrid"},{"type":"null"}]}},"type":"object","title":"Grids"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Inventories":{"properties":{"tree":{"anyOf":[{"$ref":"#/components/schemas/TreeInventory"},{"type":"null"}]}},"type":"object","title":"Inventories"},"JobStatus":{"type":"string","enum":["pending","running","failed","completed"],"title":"JobStatus"},"Key":{"properties":{"name":{"type":"string","title":"Name","description":"A name to semantically identify the key."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"An optional description of the keys purpose."},"validDays":{"type":"integer","title":"Validdays","description":"Number of days for which this key will be valid.","default":30},"scopes":{"items":{"$ref":"#/components/schemas/Scope"},"type":"array","title":"Scopes","description":"A list of scopes available to the key.","default":["read"]},"access":{"$ref":"#/components/schemas/Access","description":"Access type for the API key","default":"personal"},"applicationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applicationid","description":"Application ID accessed by the API key"},"id":{"type":"string","title":"Id","description":"Unique identifier for the key that also serves as the access token."},"createdOn":{"type":"string","format":"date-time","title":"Createdon","description":"The date and time the key was created."},"expiresOn":{"type":"string","format":"date-time","title":"Expireson","description":"The date at which this key is no longer valid."},"ownerId":{"type":"string","title":"Ownerid","description":"The unique ID of the user who generated the key."}},"type":"object","required":["name","id","ownerId"],"title":"Key","description":"Represents an API key used to authenticate users accessing the API programmatically"},"LineString":{"properties":{"type":{"type":"string","const":"LineString","title":"Type","default":"LineString"},"coordinates":{"items":{"$ref":"#/components/schemas/Position"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"LineString"},"ListApplicationsResponse":{"properties":{"currentPage":{"type":"integer","title":"Currentpage","description":"The current page number."},"pageSize":{"type":"integer","title":"Pagesize","description":"The number of resources per page."},"totalItems":{"type":"integer","title":"Totalitems","description":"The total number of resources."},"applications":{"items":{"$ref":"#/components/schemas/Application"},"type":"array","title":"Applications","description":"A list of applications."}},"type":"object","required":["currentPage","pageSize","totalItems","applications"],"title":"ListApplicationsResponse","description":"Paginated response for listing applications."},"ListDomainResponse":{"properties":{"currentPage":{"type":"integer","title":"Currentpage","description":"The current page number."},"pageSize":{"type":"integer","title":"Pagesize","description":"The number of resources per page."},"totalItems":{"type":"integer","title":"Totalitems","description":"The total number of resources."},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"type":"array","title":"Domains","description":"A list of domain resources."}},"type":"object","required":["currentPage","pageSize","totalItems","domains"],"title":"ListDomainResponse","description":"Paginated response for listing domain resources."},"ListKeysResponse":{"properties":{"currentPage":{"type":"integer","title":"Currentpage","description":"The current page number."},"pageSize":{"type":"integer","title":"Pagesize","description":"The number of resources per page."},"totalItems":{"type":"integer","title":"Totalitems","description":"The total number of resources."},"keys":{"items":{"$ref":"#/components/schemas/Key"},"type":"array","title":"Keys","description":"A list of API keys."}},"type":"object","required":["currentPage","pageSize","totalItems","keys"],"title":"ListKeysResponse","description":"Paginated response for listing API keys."},"MetaCanopyHeightMapSource":{"properties":{"source":{"type":"string","const":"Meta2024","title":"Source"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citation"}},"type":"object","required":["source"],"title":"MetaCanopyHeightMapSource"},"Modifier":{"type":"string","enum":["multiply","divide","add","subtract","replace"],"title":"Modifier"},"MultiLineString":{"properties":{"type":{"type":"string","const":"MultiLineString","title":"Type","default":"MultiLineString"},"coordinates":{"items":{"items":{"$ref":"#/components/schemas/Position"},"type":"array"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"MultiLineString"},"MultiPoint":{"properties":{"type":{"type":"string","const":"MultiPoint","title":"Type","default":"MultiPoint"},"coordinates":{"items":{"$ref":"#/components/schemas/Position"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"MultiPoint"},"MultiPolygon":{"properties":{"type":{"type":"string","const":"MultiPolygon","title":"Type","default":"MultiPolygon"},"coordinates":{"items":{"items":{"items":{"$ref":"#/components/schemas/Position"},"type":"array"},"type":"array"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"MultiPolygon"},"Operator":{"type":"string","enum":["eq","ne","gt","lt","ge","le"],"title":"Operator"},"Point":{"properties":{"type":{"type":"string","const":"Point","title":"Type","default":"Point"},"coordinates":{"$ref":"#/components/schemas/Position"}},"type":"object","required":["coordinates"],"title":"Point"},"Polygon":{"properties":{"type":{"type":"string","const":"Polygon","title":"Type","default":"Polygon"},"coordinates":{"items":{"items":{"$ref":"#/components/schemas/Position"},"type":"array"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"Polygon"},"Position":{"items":{"type":"number"},"type":"array","maxItems":3,"minItems":2,"title":"Position"},"ProcessingError":{"properties":{"code":{"type":"string","title":"Code","description":"A unique error code identifying the type of error that occurred."},"message":{"type":"string","title":"Message","description":"A user-friendly error message describing what went wrong."},"details":{"type":"string","title":"Details","description":"Technical details about the error for debugging purposes."},"suggestions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestions","description":"Actionable suggestions for resolving the error."}},"type":"object","required":["code","message","details"],"title":"ProcessingError","description":"Structured error information for user feedback, matching the uploader service error format."},"RoadFeature":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/RoadFeatureSource"},"type":"array","title":"Sources","description":"List of sources of road features"},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","required":["sources"],"title":"RoadFeature"},"RoadFeatureSource":{"type":"string","enum":["OSM"],"title":"RoadFeatureSource"},"Scope":{"type":"string","enum":["read","write"],"title":"Scope","description":"Enumerates the available scopes or permissions attached to an API key."},"SurfaceGrid":{"properties":{"attributes":{"anyOf":[{"items":{"$ref":"#/components/schemas/SurfaceGridAttribute"},"type":"array"},{"type":"null"}],"title":"Attributes"},"fuelLoad":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40FuelLoadSource"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridFuelLoadSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40FuelLoadSource","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Fuelload"},"fuelDepth":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Source"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridFuelDepthSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40Source","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Fueldepth"},"fuelMoisture":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridUniformValue"},{"$ref":"#/components/schemas/SurfaceGridUniformValueBySizeClass"}],"title":"SurfaceGridFuelMoistureSource","discriminator":{"propertyName":"source","mapping":{"uniform":"#/components/schemas/SurfaceGridUniformValue","uniformBySizeClass":"#/components/schemas/SurfaceGridUniformValueBySizeClass"}}},{"type":"null"}],"title":"Fuelmoisture"},"SAVR":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40SAVRSource"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridSAVRSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40SAVRSource","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Savr"},"FBFM":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Source"},{"$ref":"#/components/schemas/SurfaceGridUniformFBFM40Value"}],"title":"SurfaceGridFBFMSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40Source","uniform":"#/components/schemas/SurfaceGridUniformFBFM40Value"}}},{"type":"null"}],"title":"Fbfm"},"modifications":{"items":{"$ref":"#/components/schemas/SurfaceGridModification"},"type":"array","maxItems":1000,"title":"ListSurfaceGridModifications","description":"List of modifications to apply to the surface grid","default":[]},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","title":"SurfaceGrid"},"SurfaceGridAttribute":{"type":"string","enum":["fuelLoad","fuelDepth","fuelMoisture","SAVR","FBFM"],"title":"SurfaceGridAttribute"},"SurfaceGridInterpolationMethod":{"type":"string","enum":["nearest","linear","cubic","zipper"],"title":"SurfaceGridInterpolationMethod"},"SurfaceGridLandfireFBFM40FuelLoadSource":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"product":{"type":"string","const":"FBFM40","title":"Product","default":"FBFM40"},"version":{"type":"string","const":"2022","title":"Version","description":"Version of the LANDFIRE data to use for the surface grid attribute.","default":"2022"},"interpolationMethod":{"$ref":"#/components/schemas/SurfaceGridInterpolationMethod","description":"Interpolation method to use when resampling the LANDFIRE data to the desired surface grid resolution.","default":"nearest"},"removeNonBurnable":{"anyOf":[{"items":{"type":"string","enum":["NB1","NB2","NB3","NB8","NB9"]},"type":"array"},{"type":"null"}],"title":"Removenonburnable","description":"List of non-burnable fuel model codes to remove from the surface grid attribute. Nonburnable blocks are replaced by burnable block by applying a majority filter to the grid. This feature is especially useful when used with the featureMasks field for replacing coarse resolution 30m data with high resolution road, water, and building polygons from other data sources such as OSM."},"curingLiveHerbaceous":{"type":"number","minimum":0.0,"title":"Curingliveherbaceous","description":"Proportion of live herbaceous fuel that is cured.","default":0.25},"curingLiveWoody":{"type":"number","minimum":0.0,"title":"Curinglivewoody","description":"Proportion of live woody fuel that is cured.","default":0.1},"groups":{"anyOf":[{"items":{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Group"},"type":"array","minItems":1},{"type":"null"}],"title":"Groups","description":"List of FBFM40 size class groups to include in the surface grid attribute. Must include at least one group.","default":["oneHour","tenHour","hundredHour","liveHerbaceous","liveWoody"]}},"type":"object","title":"SurfaceGridLandfireFBFM40FuelLoadSource"},"SurfaceGridLandfireFBFM40Group":{"type":"string","enum":["oneHour","tenHour","hundredHour","liveHerbaceous","liveWoody"],"title":"SurfaceGridLandfireFBFM40Group","description":"The size class groups available for the FBFM40 fuel model."},"SurfaceGridLandfireFBFM40SAVRSource":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"product":{"type":"string","const":"FBFM40","title":"Product","default":"FBFM40"},"version":{"type":"string","const":"2022","title":"Version","description":"Version of the LANDFIRE data to use for the surface grid attribute.","default":"2022"},"interpolationMethod":{"$ref":"#/components/schemas/SurfaceGridInterpolationMethod","description":"Interpolation method to use when resampling the LANDFIRE data to the desired surface grid resolution.","default":"nearest"},"removeNonBurnable":{"anyOf":[{"items":{"type":"string","enum":["NB1","NB2","NB3","NB8","NB9"]},"type":"array"},{"type":"null"}],"title":"Removenonburnable","description":"List of non-burnable fuel model codes to remove from the surface grid attribute. Nonburnable blocks are replaced by burnable block by applying a majority filter to the grid. This feature is especially useful when used with the featureMasks field for replacing coarse resolution 30m data with high resolution road, water, and building polygons from other data sources such as OSM."},"groups":{"anyOf":[{"items":{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Group"},"type":"array","minItems":1},{"type":"null"}],"title":"Groups","description":"List of FBFM40 size class groups to include in the surface grid attribute. Must include at least one group."}},"type":"object","title":"SurfaceGridLandfireFBFM40SAVRSource"},"SurfaceGridLandfireFBFM40Source":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"product":{"type":"string","const":"FBFM40","title":"Product","default":"FBFM40"},"version":{"type":"string","const":"2022","title":"Version","description":"Version of the LANDFIRE data to use for the surface grid attribute.","default":"2022"},"interpolationMethod":{"$ref":"#/components/schemas/SurfaceGridInterpolationMethod","description":"Interpolation method to use when resampling the LANDFIRE data to the desired surface grid resolution.","default":"nearest"},"removeNonBurnable":{"anyOf":[{"items":{"type":"string","enum":["NB1","NB2","NB3","NB8","NB9"]},"type":"array"},{"type":"null"}],"title":"Removenonburnable","description":"List of non-burnable fuel model codes to remove from the surface grid attribute. Nonburnable blocks are replaced by burnable block by applying a majority filter to the grid. This feature is especially useful when used with the featureMasks field for replacing coarse resolution 30m data with high resolution road, water, and building polygons from other data sources such as OSM."}},"type":"object","title":"SurfaceGridLandfireFBFM40Source"},"SurfaceGridModification":{"properties":{"conditions":{"items":{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridModificationFBFMCondition"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelLoadCondition"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelHeightCondition"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelMoistureCondition"}],"title":"SurfaceGridModificationCondition","description":"The conditions for the surface grid modification.","discriminator":{"propertyName":"attribute","mapping":{"FBFM":"#/components/schemas/SurfaceGridModificationFBFMCondition","fuelDepth":"#/components/schemas/SurfaceGridModificationFuelHeightCondition","fuelLoad":"#/components/schemas/SurfaceGridModificationFuelLoadCondition","fuelMoisture":"#/components/schemas/SurfaceGridModificationFuelMoistureCondition"}}},"type":"array","title":"ListSurfaceGridModificationConditions","description":"The conditions for the surface grid modification."},"actions":{"items":{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridModificationFBFMAction"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelLoadAction"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelHeightAction"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelMoistureAction"}],"title":"SurfaceGridModificationAction","description":"The actions for the surface grid modification.","discriminator":{"propertyName":"attribute","mapping":{"FBFM":"#/components/schemas/SurfaceGridModificationFBFMAction","fuelDepth":"#/components/schemas/SurfaceGridModificationFuelHeightAction","fuelLoad":"#/components/schemas/SurfaceGridModificationFuelLoadAction","fuelMoisture":"#/components/schemas/SurfaceGridModificationFuelMoistureAction"}}},"type":"array","minItems":1,"title":"ListSurfaceGridModificationActions","description":"The actions for the surface grid modification."}},"type":"object","required":["conditions","actions"],"title":"SurfaceGridModification"},"SurfaceGridModificationFBFMAction":{"properties":{"attribute":{"type":"string","const":"FBFM","title":"Attribute"},"modifier":{"type":"string","const":"replace","title":"Modifier"},"value":{"$ref":"#/components/schemas/FBFM40"}},"type":"object","required":["attribute","modifier","value"],"title":"SurfaceGridModificationFBFMAction"},"SurfaceGridModificationFBFMCondition":{"properties":{"attribute":{"type":"string","const":"FBFM","title":"Attribute"},"operator":{"type":"string","const":"eq","title":"Operator"},"value":{"$ref":"#/components/schemas/FBFM40"}},"type":"object","required":["attribute","operator","value"],"title":"SurfaceGridModificationFBFMCondition"},"SurfaceGridModificationFuelHeightAction":{"properties":{"attribute":{"type":"string","const":"fuelDepth","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"SurfaceGridModificationFuelHeightAction"},"SurfaceGridModificationFuelHeightCondition":{"properties":{"attribute":{"type":"string","const":"fuelDepth","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"SurfaceGridModificationFuelHeightCondition"},"SurfaceGridModificationFuelLoadAction":{"properties":{"attribute":{"type":"string","const":"fuelLoad","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"SurfaceGridModificationFuelLoadAction"},"SurfaceGridModificationFuelLoadCondition":{"properties":{"attribute":{"type":"string","const":"fuelLoad","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"SurfaceGridModificationFuelLoadCondition"},"SurfaceGridModificationFuelMoistureAction":{"properties":{"attribute":{"type":"string","const":"fuelMoisture","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"SurfaceGridModificationFuelMoistureAction"},"SurfaceGridModificationFuelMoistureCondition":{"properties":{"attribute":{"type":"string","const":"fuelMoisture","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"SurfaceGridModificationFuelMoistureCondition"},"SurfaceGridUniformFBFM40Value":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"uniform","title":"Source","default":"uniform"},"value":{"$ref":"#/components/schemas/FBFM40"}},"type":"object","required":["value"],"title":"SurfaceGridUniformFBFM40Value"},"SurfaceGridUniformValue":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"uniform","title":"Source","default":"uniform"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["value"],"title":"SurfaceGridUniformValue"},"SurfaceGridUniformValueBySizeClass":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"uniformBySizeClass","title":"Source","default":"uniformBySizeClass"},"oneHour":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Onehour"},"tenHour":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Tenhour"},"hundredHour":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Hundredhour"},"liveHerbaceous":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Liveherbaceous"},"liveWoody":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Livewoody"},"groups":{"anyOf":[{"items":{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Group"},"type":"array","minItems":1},{"type":"null"}],"title":"Groups","description":"List of size class groups to include in the surface grid attribute. Must include at least one group."}},"type":"object","title":"SurfaceGridUniformValueBySizeClass"},"TopographyGrid":{"properties":{"attributes":{"anyOf":[{"items":{"$ref":"#/components/schemas/TopographyGridAttribute"},"type":"array"},{"type":"null"}],"title":"Attributes"},"elevation":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSource"},{"$ref":"#/components/schemas/TopographyGridLandfireSource"},{"$ref":"#/components/schemas/TopographyGridUniformValue"}],"title":"TopographyGridElevationSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSource","LANDFIRE":"#/components/schemas/TopographyGridLandfireSource","uniform":"#/components/schemas/TopographyGridUniformValue"}}},{"type":"null"}],"title":"Elevation"},"aspect":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSourceAspect"},{"$ref":"#/components/schemas/TopographyGridLandfireSourceAspect"}],"title":"TopographyGridAspectSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSourceAspect","LANDFIRE":"#/components/schemas/TopographyGridLandfireSourceAspect"}}},{"type":"null"}],"title":"Aspect"},"slope":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSource"},{"$ref":"#/components/schemas/TopographyGridLandfireSource"}],"title":"TopographyGridSlopeSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSource","LANDFIRE":"#/components/schemas/TopographyGridLandfireSource"}}},{"type":"null"}],"title":"Slope"},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","title":"TopographyGrid"},"TopographyGrid3DEPSource":{"properties":{"source":{"type":"string","const":"3DEP","title":"Source","default":"3DEP"},"interpolationMethod":{"type":"string","enum":["nearest","linear","cubic"],"title":"Interpolationmethod","default":"linear"}},"type":"object","title":"TopographyGrid3DEPSource"},"TopographyGrid3DEPSourceAspect":{"properties":{"source":{"type":"string","const":"3DEP","title":"Source","default":"3DEP"},"interpolationMethod":{"type":"string","const":"nearest","title":"Interpolationmethod","default":"nearest"}},"type":"object","title":"TopographyGrid3DEPSourceAspect"},"TopographyGridAttribute":{"type":"string","enum":["elevation","slope","aspect"],"title":"TopographyGridAttribute"},"TopographyGridInterpolationMethod":{"type":"string","enum":["nearest","linear","cubic","zipper"],"title":"TopographyGridInterpolationMethod"},"TopographyGridLandfireSource":{"properties":{"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"version":{"type":"string","const":"2020","title":"Version","default":"2020"},"interpolationMethod":{"$ref":"#/components/schemas/TopographyGridInterpolationMethod","default":"linear"}},"type":"object","title":"TopographyGridLandfireSource"},"TopographyGridLandfireSourceAspect":{"properties":{"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"version":{"type":"string","const":"2020","title":"Version","default":"2020"},"interpolationMethod":{"type":"string","const":"nearest","title":"Interpolationmethod","default":"nearest"}},"type":"object","title":"TopographyGridLandfireSourceAspect"},"TopographyGridUniformValue":{"properties":{"source":{"type":"string","const":"uniform","title":"Source","default":"uniform"},"value":{"type":"number","title":"Value"}},"type":"object","required":["value"],"title":"TopographyGridUniformValue"},"TreeGrid":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/TreeGridAttribute"},"type":"array","title":"Attributes","description":"List of attributes to include in the tree grid. Each attribute is a separate layer in the grid. Attributes present in the list will be assigned default values unless an additional field is provided.","default":["bulkDensity","fuelMoisture"]},"bulkDensity":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridBulkDensitySource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Bulkdensity"},"fuelMoisture":{"anyOf":[{"$ref":"#/components/schemas/TreeGridUniformValue"},{"type":"null"}]},"SPCD":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridSPCDSource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Spcd"},"SAVR":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridSAVRSource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Savr"},"status":{"$ref":"#/components/schemas/JobStatus","default":"pending"},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"},"treeInventoryChecksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Treeinventorychecksum"}},"type":"object","title":"TreeGrid"},"TreeGridAttribute":{"type":"string","enum":["bulkDensity","fuelMoisture","SPCD","SAVR"],"title":"TreeGridAttribute","description":"The attributes that can be used to generate a tree grid."},"TreeGridInventorySource":{"properties":{"source":{"type":"string","const":"TreeInventory","title":"Source","default":"TreeInventory"}},"type":"object","title":"TreeGridInventorySource"},"TreeGridUniformValue":{"properties":{"source":{"type":"string","const":"uniform","title":"Source","default":"uniform"},"value":{"type":"number","title":"Value"}},"type":"object","required":["value"],"title":"TreeGridUniformValue"},"TreeInventory":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/TreeInventorySource"},"type":"array","title":"Sources"},"TreeMap":{"anyOf":[{"$ref":"#/components/schemas/TreeMapSource"},{"type":"null"}]},"modifications":{"items":{"$ref":"#/components/schemas/TreeInventoryModification"},"type":"array","maxItems":1000,"title":"ListTreeInventoryModifications","description":"List of modifications to apply to the tree inventory data","default":[]},"treatments":{"items":{"oneOf":[{"$ref":"#/components/schemas/TreeInventoryTreatmentDirectionalThinning"},{"$ref":"#/components/schemas/TreeInventoryTreatmentProportionalThinning"}],"title":"TreeInventoryTreatment","description":"A treatment to apply to the tree inventory data","discriminator":{"propertyName":"method","mapping":{"directionalThinning":"#/components/schemas/TreeInventoryTreatmentDirectionalThinning","proportionalThinning":"#/components/schemas/TreeInventoryTreatmentProportionalThinning"}}},"type":"array","maxItems":1000,"title":"ListTreeInventoryTreatments","description":"List of silvicultural treatments to apply.","default":[]},"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of Features to mask tree inventory data. This has the effect of removing trees that intersect with the feature.","default":[]},"status":{"$ref":"#/components/schemas/JobStatus","default":"pending"},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"},"file":{"anyOf":[{"$ref":"#/components/schemas/UploadResponse"},{"type":"null"}]}},"type":"object","required":["sources"],"title":"TreeInventory"},"TreeInventoryModification":{"properties":{"conditions":{"items":{"oneOf":[{"$ref":"#/components/schemas/TreeInventoryModificationSPCDCondition"},{"$ref":"#/components/schemas/TreeInventoryModificationHTCondition"},{"$ref":"#/components/schemas/TreeInventoryModificationDIACondition"},{"$ref":"#/components/schemas/TreeInventoryModificationCRCondition"}],"title":"TreeInventoryModificationCondition","description":"The conditions for the tree inventory modification.","discriminator":{"propertyName":"attribute","mapping":{"CR":"#/components/schemas/TreeInventoryModificationCRCondition","DIA":"#/components/schemas/TreeInventoryModificationDIACondition","HT":"#/components/schemas/TreeInventoryModificationHTCondition","SPCD":"#/components/schemas/TreeInventoryModificationSPCDCondition"}}},"type":"array","title":"ListTreeInventoryModificationConditions","description":"The conditions for the tree inventory modification."},"actions":{"items":{"oneOf":[{"$ref":"#/components/schemas/TreeInventoryModificationSPCDAction"},{"$ref":"#/components/schemas/TreeInventoryModificationHTAction"},{"$ref":"#/components/schemas/TreeInventoryModificationDIAAction"},{"$ref":"#/components/schemas/TreeInventoryModificationCRAction"},{"$ref":"#/components/schemas/TreeInventoryModificationRemoveAction"}],"title":"TreeInventoryModificationAction","description":"The actions for the tree inventory modification.","discriminator":{"propertyName":"attribute","mapping":{"CR":"#/components/schemas/TreeInventoryModificationCRAction","DIA":"#/components/schemas/TreeInventoryModificationDIAAction","HT":"#/components/schemas/TreeInventoryModificationHTAction","SPCD":"#/components/schemas/TreeInventoryModificationSPCDAction","all":"#/components/schemas/TreeInventoryModificationRemoveAction"}}},"type":"array","minItems":1,"title":"ListTreeInventoryModificationActions","description":"The actions for the tree inventory modification."}},"type":"object","required":["conditions","actions"],"title":"TreeInventoryModification"},"TreeInventoryModificationCRAction":{"properties":{"attribute":{"type":"string","const":"CR","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"TreeInventoryModificationCRAction"},"TreeInventoryModificationCRCondition":{"properties":{"attribute":{"type":"string","const":"CR","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"TreeInventoryModificationCRCondition"},"TreeInventoryModificationDIAAction":{"properties":{"attribute":{"type":"string","const":"DIA","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"TreeInventoryModificationDIAAction"},"TreeInventoryModificationDIACondition":{"properties":{"attribute":{"type":"string","const":"DIA","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"TreeInventoryModificationDIACondition"},"TreeInventoryModificationHTAction":{"properties":{"attribute":{"type":"string","const":"HT","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"TreeInventoryModificationHTAction"},"TreeInventoryModificationHTCondition":{"properties":{"attribute":{"type":"string","const":"HT","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"TreeInventoryModificationHTCondition"},"TreeInventoryModificationRemoveAction":{"properties":{"attribute":{"type":"string","const":"all","title":"Attribute"},"modifier":{"type":"string","const":"remove","title":"Modifier","default":"remove"}},"type":"object","required":["attribute"],"title":"TreeInventoryModificationRemoveAction"},"TreeInventoryModificationSPCDAction":{"properties":{"attribute":{"type":"string","const":"SPCD","title":"Attribute"},"modifier":{"type":"string","const":"replace","title":"Modifier"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"TreeInventoryModificationSPCDAction"},"TreeInventoryModificationSPCDCondition":{"properties":{"attribute":{"type":"string","const":"SPCD","title":"Attribute"},"operator":{"type":"string","const":"eq","title":"Operator"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"TreeInventoryModificationSPCDCondition"},"TreeInventorySource":{"type":"string","enum":["TreeMap","file"],"title":"TreeInventorySource"},"TreeInventoryTreatmentDirectionalThinning":{"properties":{"method":{"type":"string","const":"directionalThinning","title":"Method"},"direction":{"type":"string","enum":["above","below"],"title":"Direction"},"targetMetric":{"type":"string","enum":["diameter","basalArea"],"title":"Targetmetric"},"targetValue":{"type":"number","minimum":0.0,"title":"Targetvalue"}},"type":"object","required":["method","direction","targetMetric","targetValue"],"title":"TreeInventoryTreatmentDirectionalThinning"},"TreeInventoryTreatmentProportionalThinning":{"properties":{"method":{"type":"string","const":"proportionalThinning","title":"Method"},"targetMetric":{"type":"string","const":"basalArea","title":"Targetmetric"},"targetValue":{"type":"number","minimum":0.0,"title":"Targetvalue"}},"type":"object","required":["method","targetMetric","targetValue"],"title":"TreeInventoryTreatmentProportionalThinning"},"TreeMapSource":{"properties":{"version":{"$ref":"#/components/schemas/TreeMapVersion","default":"2016"},"seed":{"type":"integer","title":"Seed"},"canopyHeightMapConfiguration":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/MetaCanopyHeightMapSource"}],"discriminator":{"propertyName":"source","mapping":{"Meta2024":"#/components/schemas/MetaCanopyHeightMapSource"}}},{"type":"null"}],"title":"Canopyheightmapconfiguration","description":"Optional canopy height map configuration argument to use with the TreeMap data source."}},"type":"object","title":"TreeMapSource"},"TreeMapVersion":{"type":"string","enum":["2014","2016"],"title":"TreeMapVersion"},"UpdateDomainRequest":{"properties":{"name":{"type":"string","title":"Name","description":"The name of the domain."},"description":{"type":"string","title":"Description","description":"A brief description of the domain."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"A list of tags associated with the domain."}},"type":"object","title":"UpdateDomainRequest","description":"Request body for updating a domain resource."},"UploadResponse":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Information about the current step in the upload process."},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method","description":"The HTTP method used to make the upload request."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"The signed URL used to make the request."},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers","description":"The HTTP headers that need to be included with the PUT request."},"curl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Curl","description":"A cURL command that can be used to perform the upload."},"error":{"anyOf":[{"$ref":"#/components/schemas/ProcessingError"},{"type":"null"}],"description":"Detailed error information if the upload or processing failed."}},"type":"object","required":["message"],"title":"UploadResponse","description":"Upload response model to provide all necessary information and updates for file upload process."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WaterFeature":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/WaterFeatureSource"},"type":"array","title":"Sources","description":"List of sources of road features"},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","required":["sources"],"title":"WaterFeature"},"WaterFeatureSource":{"type":"string","enum":["OSM"],"title":"WaterFeatureSource"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"api-key"},"HTTPBearer":{"type":"http","scheme":"bearer"}}}} \ No newline at end of file +{"openapi":"3.1.0","info":{"title":"FastFuels API","description":"A JSON API for creating, editing, and retrieving 3D fuels data for next generation fire behavior models.","version":"0.1.0"},"servers":[{"url":"https://api.fastfuels.silvxlabs.com"}],"paths":{"/":{"get":{"tags":["Index"],"summary":"Index","operationId":"index","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/cookies":{"get":{"tags":["Cookies"],"summary":"Create session cookie","description":"Create a session cookie for authentication","operationId":"get_cookie","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"tags":["Cookies"],"summary":"Delete session cookie","description":"Remove session cookie for logout","operationId":"delete_cookie","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/keys":{"post":{"tags":["API Keys"],"summary":"Create API key","description":"Create a new API key for authentication","operationId":"create_key","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Key"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["API Keys"],"summary":"List API keys","description":"Get paginated list of accessible API keys","operationId":"list_keys","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":100,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListKeysResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/keys/{keyId}":{"get":{"tags":["API Keys"],"summary":"Get API key","description":"Get API key details by ID","operationId":"get_key_by_id","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string","title":"Keyid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Key"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["API Keys"],"summary":"Delete API key","description":"Permanently delete an API key by ID","operationId":"delete_key","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string","title":"Keyid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications":{"post":{"tags":["Applications"],"summary":"Create application","description":"Create a new application for API access","operationId":"create_application","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApplicationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Applications"],"summary":"List applications","description":"Get paginated list of user's applications","operationId":"list_applications","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":100,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListApplicationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications/{applicationId}":{"get":{"tags":["Applications"],"summary":"Get application","description":"Get application details by ID","operationId":"get_application","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"applicationId","in":"path","required":true,"schema":{"type":"string","title":"Applicationid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Applications"],"summary":"Update application","description":"Update application details","operationId":"update_application","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"applicationId","in":"path","required":true,"schema":{"type":"string","title":"Applicationid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApplicationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Applications"],"summary":"Delete application","description":"Delete an application by ID","operationId":"delete_application","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"applicationId","in":"path","required":true,"schema":{"type":"string","title":"Applicationid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains":{"post":{"tags":["Domains"],"summary":"Create Domain","description":"# Create Domain Endpoint\n\nThis endpoint creates a new domain resource based on a spatial extent and additional details provided by the user. The domain resource acts as the spatial container for all other resources that create data within the system.\n\n## What is a Domain Resource?\n\nA domain resource is a spatial container that represents a specific geographical area. It includes metadata such as the name, description, creation date, and the spatial extent defined by geographic coordinates. Domains are used to organize and manage spatial data and operations within a defined area. The data can be vectorized, such as holding features or trees in an inventory, or rasterized, such as a 3D canopy fuel grid or a Digital Elevation Model (DEM).\n\n## Endpoint: `POST /domains`\n\n### Request Body\n\nThe request body should be a GeoJSON object defined by the [GeoJSON specification (RFC 7946)](https://datatracker.ietf.org/doc/html/rfc7946). It can be either a Feature or a FeatureCollection. The required fields differ slightly between these two types, but there are some shared fields as well.\n\n#### Shared Fields\n\nThese fields are required for both Feature and FeatureCollection inputs:\n\n- **type**: (string) Must be either \"Feature\" or \"FeatureCollection\".\n- **name**: (string, optional) The name of the domain.\n- **description**: (string, optional) A brief description of the domain.\n- **horizontalResolution**: (float) The horizontal resolution in meters of a regular grid representation of the domain.\n- **verticalResolution**: (float) The vertical resolution in meters of a regular grid representation of the domain.\n- **crs**: (GeoJsonCRS) The GeoJSON specification formatted coordinate reference system (CRS) of the domain.\n - **type**: (string) Must be \"name\".\n - **properties**: (object) The properties object containing the CRS details.\n - **name**: (string) The name of the CRS, e.g., \"EPSG:4326\". Must be either 'local' or a valid authority string.\n\n#### Feature-specific Fields\n\nWhen the input type is \"Feature\", the following additional field is required:\n\n- **geometry**: (GeoJSON Geometry object) A GeoJSON geometry object defining the spatial location of the domain.\n - **type**: (string) Must be a valid GeoJSON type, e.g., \"Polygon\".\n - **coordinates**: (array) An array of coordinates defining the geometry.\n\n#### FeatureCollection-specific Fields\n\nWhen the input type is \"FeatureCollection\", the following additional field is required:\n\n- **features**: (array of Feature objects) An array of Feature objects. Each Feature object should have:\n - **type**: (string) Must be \"Feature\".\n - **geometry**: (GeoJSON Geometry object) As described in the Feature-specific fields.\n\n### Response\n\nOn successful creation, the endpoint returns the newly created domain resource with the following fields:\n\n- **id**: (string) A unique identifier for the domain.\n- **name**: (string) The name of the domain.\n- **description**: (string) A brief description of the domain.\n- **createdOn**: (datetime) The date and time the domain was created.\n- **modifiedOn**: (datetime) The date and time the domain was last modified.\n- **type**: (string) Will be \"FeatureCollection\".\n- **features**: (array) An array of two Feature objects:\n 1. The domain feature (padded bounding box):\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the padded spatial extent of the domain.\n - **properties**: (object) Additional properties of the domain feature.\n - **name**: (string) Will be \"domain\".\n - **area**: (float) The area of the domain in square meters.\n - **perimeter**: (float) The perimeter of the domain in meters.\n 2. The input feature:\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the original input geometry.\n - **properties**: (object) Additional properties of the input feature.\n - **name**: (string) Will be \"input\".\n - **area**: (float) The area of the input geometry in square meters.\n - **perimeter**: (float) The perimeter of the input geometry in meters.\n- **horizontalResolution**: (float) The horizontal resolution of the domain.\n- **verticalResolution**: (float) The vertical resolution of the domain.\n- **crs**: (GeoJsonCRS) The coordinate reference system of the domain.\n- **utmAuthorityString**: (string, optional) The UTM authority string if the input was projected to UTM.\n\n### Processing from Request to Response\n\nThe system performs several processing steps to convert the Request Body into the Response Body:\n\n1. **CRS Handling and Projection**:\n - If the input CRS is geographic (e.g., EPSG:4326), the geometry is automatically projected to the appropriate UTM zone.\n - If the input CRS is already projected, the domain will keep that CRS.\n - If the input CRS is 'local', the spatial data is assumed to be NOT geo-referenced, and no projection is performed.\n\n2. **Bounding Box Calculation**:\n - The system calculates the bounding box of the input geometry (or the combined geometries for a FeatureCollection).\n\n3. **Resolution-based Padding**:\n - The bounding box is padded out to the nearest multiple of the user-provided horizontal resolution.\n\n4. **FeatureCollection Creation**:\n - The system creates a FeatureCollection with two features: the padded bounding box (domain) and the original input geometry.\n\nThese steps ensure that the domain's extent is regularized, aligned with the specified resolution, and in a suitable projected coordinate system (when applicable), which allows for subsequent grid-based operations.\n\n### Important Notes\n\n1. **Projection**: The domain will always be stored in a projected coordinate system if the input is geographic. This ensures consistency and accuracy for spatial operations within the domain.\n\n2. **UTM Zone Selection**: When projecting from a geographic CRS, the system automatically selects the appropriate UTM zone based on the centroid of the input geometry.\n\n3. **FeatureCollection Handling**: When a FeatureCollection is provided as input, the domain will be created based on the combined extent of all features in the collection.\n\n4. **Zero Area Handling**: If the spatial extent has zero area (e.g., a point or line), the endpoint will raise an error.\n\n5. **Resolution Alignment**: The spatial extent is padded out to the nearest multiple of horizontal and vertical resolution (in meters) to ensure grid alignment.\n\n6. **Maximum Area**: Currently, the maximum area for a domain is 16 square kilometers. We are planning to increase this limit in the future. If this limitation is an issue for your use case, please contact us for assistance.\n\n7. **CRS Preservation**: If you provide data in a specific projected CRS, that CRS will be preserved in the domain. This is useful for maintaining consistency with existing data sources or specific regional requirements.\n\n### Error Responses\n\n- **422 Unprocessable Entity**: The spatial extent is invalid.\n - **Detail**: \"Invalid spatial extent. The area of the spatial extent must be greater than zero meters.\"\n - **Detail**: \"Invalid spatial extent. The area of the spatial extent must be less than sixteen square kilometers.\"\n- **500 Internal Server Error**: An error occurred while creating the domain resource.","operationId":"create_domain","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"},"examples":{"feature collection WGS84":{"value":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"coordinates":[[[-114.09545796676623,46.8324794598619],[-114.11217537297199,46.8324794598619],[-114.11217537297199,46.82496749915157],[-114.09545796676623,46.82496749915157],[-114.09545796676623,46.8324794598619]]],"type":"Polygon"}}],"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1},"summary":"Example WGS84 FeatureCollection","description":"This example creates a domain from a FeatureCollection GeoJSON object. The GeoJSON represents an approximately 1 square kilometer area in the Blue Mountain Recreation Area outside of Missoula, Montana. The CRS of the FeatureCollection is not provided so it is assumed to be 'EPSG:4326'."},"feature collection EPSG:5070":{"value":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-1377797.8087433458,2780720.35945401],[-1379055.2389321132,2780962.840146559],[-1379212.7978295316,2780146.1745799617],[-1377955.2239776908,2779903.6661836714],[-1377797.8087433458,2780720.35945401]]]}}],"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1,"crs":{"properties":{"name":"EPSG:5070"},"type":"name"}},"summary":"Example EPSG:5070 FeatureCollection","description":"This example creates a domain from a FeatureCollection GeoJSON object with a CRS of 'EPSG:5070'. Note that the CRS is explicitly set in the GeoJSON object. Because the CRS is a projected coordinate system, FastFuels uses the provided CRS for the domain instead of reprojecting."},"feature UTM":{"value":{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[721502.7544906491,5190645.048516054],[720227.9398802927,5190598.00908098],[720258.6480286171,5189763.323999467],[721533.6406826023,5189810.364218195],[721502.7544906491,5190645.048516054]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::32611"}},"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1},"summary":"Example UTM Feature","description":"This example creates a domain from a polygon feature GeoJSON object with UTM coordinates."},"feature local":{"value":{"type":"Feature","geometry":{"coordinates":[[[0,0],[0,100],[100,100],[100,0],[0,0]]],"type":"Polygon"},"properties":{},"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1,"crs":{"properties":{"name":"local"},"type":"name"}},"summary":"Example Local Feature","description":"Example of a domain with spatial data in a local coordinate system (with meter units). The crs field is set to 'local' to indicate that the coordinates are in a local coordinate system."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Domains"],"summary":"List Domains","description":"# List Domains Endpoint\n\nThis endpoint retrieves a paginated list of domain resources based on the\nquery parameters provided by the user.\n\n## Endpoint: `GET /domains`\n\n### Query Parameters\n\nTo retrieve a list of domains, the following query parameters can be used:\n\n- **page**: (integer, optional) The page number to retrieve. Page number is zero-indexed. Default is 0.\n- **size**: (integer, optional) The number of resources to retrieve per page. Minimum is 1 and maximum is 1000. Default is 100.\n- **sortBy**: (string, optional) The field by which to sort the domains. Valid values are:\n - \"createdOn\"\n - \"modifiedOn\"\n - \"name\"\n- **sortOrder**: (string, optional) The order in which to sort the results. Valid values are:\n - \"ascending\"\n - \"descending\"\n\n### Response\n\nThe response is a paginated list of domain resources, including metadata about the current page and the size of each page.\n\n- **domains**: (array) A list of Domain objects.\n- **currentPage**: (integer) The current page number.\n- **pageSize**: (integer) The number of domains per page.\n- **totalItems**: (integer) The total number of domain resources that belong to the user.\n\nEach Domain object in the list follows the Domain schema.\n\n### Example Request\n\n```http\nGET /domains?page=0&size=10&sortBy=createdOn&sortOrder=ascending\n```\n\n### Important Notes\n\n1. The `page` parameter is zero-indexed, meaning that the first page is `0`.\n2. The `size` parameter determines the number of domains returned per page, with a minimum of 1 and a maximum of 1000.\n3. The `sortBy` parameter allows sorting by specific fields, and the `sortOrder` parameter determines the order of sorting (ascending or descending).\n\n### Error Responses\n\n- **422 Unprocessable Entity**: Invalid query parameters.\n - **Detail**: \"Invalid value for query parameter 'page'. Must be a non-negative integer.\"\n - **Detail**: \"Invalid value for query parameter 'size'. Must be an integer between 1 and 1000.\"\n- **500 Internal Server Error**: An error occurred while listing the domain resources.","operationId":"list_domains","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"The page number to retrieve. Page number is zero-indexed.","default":0,"title":"Page"},"description":"The page number to retrieve. Page number is zero-indexed."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"The number of resources to retrieve per page.","default":100,"title":"Size"},"description":"The number of resources to retrieve per page."},{"name":"sortBy","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DomainSortField"}},{"name":"sortOrder","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DomainSortOrder"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListDomainResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}":{"get":{"tags":["Domains"],"summary":"Get Domain","description":"# Get Domain Endpoint\n\nThis endpoint retrieves a specific domain resource based on the provided domain ID.\n\n## Endpoint: `GET /domains/{domainId}`\n\n### Path Parameters\n\nTo retrieve a specific domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain to retrieve.\n\n### Response\n\nThe response returns the details of the requested domain resource, including its metadata and spatial information.\n\n- **id**: (string) A unique identifier for the domain.\n- **name**: (string) The name of the domain.\n- **description**: (string) A brief description of the domain.\n- **createdOn**: (datetime) The date and time the domain was created.\n- **modifiedOn**: (datetime) The date and time the domain was last modified.\n- **type**: (string) Always \"FeatureCollection\".\n- **features**: (array) An array of two Feature objects:\n 1. The domain feature (padded bounding box):\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the padded spatial extent of the domain.\n - **properties**: (object) Additional properties of the domain feature.\n - **name**: (string) Will be \"domain\".\n - **area**: (float) The area of the domain in square meters.\n - **perimeter**: (float) The perimeter of the domain in meters.\n 2. The input feature:\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the original input geometry.\n - **properties**: (object) Additional properties of the input feature.\n - **name**: (string) Will be \"input\".\n - **area**: (float) The area of the input geometry in square meters.\n - **perimeter**: (float) The perimeter of the input geometry in meters.\n- **horizontalResolution**: (float) The horizontal resolution of the domain in meters.\n- **verticalResolution**: (float) The vertical resolution of the domain in meters.\n- **crs**: (GeoJsonCRS) The coordinate reference system of the domain.\n- **utmAuthorityString**: (string, optional) The UTM authority string if the input was projected to UTM.\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Resource not found.\"\n- **500 Internal Server Error**: An error occurred while retrieving the domain resource.\n - **Detail**: \"An error occurred while getting the domain resource.\"","operationId":"get_domain","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Domains"],"summary":"Update Domain","description":"# Update Domain Endpoint\n\nThis endpoint updates an existing domain resource based on the provided domain ID and request body. Users can modify specific fields of the domain, while other fields remain unchanged.\n\n## Endpoint: `PATCH /domains/{domainId}`\n\n### Path Parameters\n\nTo update a specific domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain to update.\n\n### Request Body\n\nTo update a domain, the request body should include one or more of the following fields:\n\n- **name**: (string, optional) The name of the domain.\n- **description**: (string, optional) A brief description of the domain.\n- **tags**: (array of strings, optional) A list of tags associated with the domain.\n\n### Fields that Can Be Updated\n\n- **name**: The name of the domain.\n- **description**: A brief description of the domain.\n- **tags**: The list of tags associated with the domain.\n\n### Fields that Cannot Be Updated\n\nThe following fields cannot be updated. If you wish to change these fields, you need to create a new domain resource with the desired values:\n\n- **id**: The unique identifier for the domain.\n- **createdOn**: The date and time the domain was created.\n- **type**: Always \"FeatureCollection\".\n- **features**: The FeatureCollection containing the domain and input geometries.\n- **horizontalResolution**: The horizontal resolution of the domain.\n- **verticalResolution**: The vertical resolution of the domain.\n- **crs**: The coordinate reference system of the domain.\n- **utmAuthorityString**: The UTM authority string of the domain.\n\n### Response\n\nThe response returns the updated domain resource with the following fields:\n\n- **id**: (string) A unique identifier for the domain.\n- **name**: (string) The name of the domain.\n- **description**: (string) A brief description of the domain.\n- **createdOn**: (datetime) The date and time the domain was created.\n- **modifiedOn**: (datetime) The date and time the domain was last modified.\n- **type**: (string) Always \"FeatureCollection\".\n- **features**: (array) An array of two Feature objects:\n 1. The domain feature (padded bounding box):\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the padded spatial extent of the domain.\n - **properties**: (object) Additional properties of the domain feature.\n - **name**: (string) Will be \"domain\".\n - **area**: (float) The area of the domain in square meters.\n - **perimeter**: (float) The perimeter of the domain in meters.\n 2. The input feature:\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the original input geometry.\n - **properties**: (object) Additional properties of the input feature.\n - **name**: (string) Will be \"input\".\n - **area**: (float) The area of the input geometry in square meters.\n - **perimeter**: (float) The perimeter of the input geometry in meters.\n- **horizontalResolution**: (float) The horizontal resolution of the domain.\n- **verticalResolution**: (float) The vertical resolution of the domain.\n- **crs**: (GeoJsonCRS) The coordinate reference system of the domain.\n- **utmAuthorityString**: (string, optional) The UTM authority string if the input was projected to UTM.\n- **tags**: (array of strings) A list of tags associated with the domain.\n\n### Important Notes\n\n1. Only the **name**, **description**, and **tags** fields can be updated. If you wish to change any other fields (such as features, horizontalResolution, verticalResolution, crs, etc.), you must create a new domain resource with the desired values.\n2. The **modifiedOn** field will be automatically updated to the current date and time whenever any updatable field is changed.\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Resource not found.\"\n- **500 Internal Server Error**: An error occurred while updating the domain resource.\n - **Detail**: \"An error occurred while updating the domain resource.\"","operationId":"update_domain","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDomainRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Domains"],"summary":"Delete Domain","description":"# Delete Domain Endpoint\n\nThis endpoint deletes an existing domain resource based on the provided domain ID.\n\n## Endpoint: `DELETE /domains/{domainId}`\n\n### Path Parameters\n\nTo delete a specific domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain to delete.\n\n### Response\n\nThe response does not return any content on a successful deletion and will have a status code of 204 No Content.\n\n### Example Request\n\n```http\nDELETE /domains/1e7d8d3c9f8b4c3ba9e7c3b4f8d7a9c1\n```\n\n### Example Response\n\n```\nHTTP/1.1 204 No Content\n```\n\n### Important Notes\n\n1. Deleting a domain is a permanent action and cannot be undone. Once a domain is deleted, it is removed from the database and cannot be recovered.\n2. Ensure that you have the correct domain ID before making the delete request to avoid accidentally deleting the wrong domain.\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Resource not found.\"\n- **500 Internal Server Error**: An error occurred while deleting the domain resource.\n - **Detail**: \"An error occurred while deleting the domain resource.\"\n\n### Example Error Response\n\n```json\n{\n \"detail\": \"Resource not found.\"\n}\n```\n\n### Example Internal Server Error Response\n\n```json\n{\n \"detail\": \"An error occurred while deleting the domain resource.\"\n}\n```","operationId":"delete_domain","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/preview":{"post":{"tags":["Domains"],"summary":"Preview Domain","description":"# Preview Domain Endpoint\n\nThis endpoint processes a CreateDomainRequest and returns a Domain object without saving the data to the database. It allows users to preview what their domain will look like before actually creating it.\n\n## Endpoint: `POST /domains/preview`\n\n### Request Body\n\nThe request body should be a GeoJSON object defined by the [GeoJSON specification (RFC 7946)](https://datatracker.ietf.org/doc/html/rfc7946). It can be either a Feature or a FeatureCollection. The structure is identical to the Create Domain endpoint's request body.\n\n#### Shared Fields\n\n- **type**: (string) Must be either \"Feature\" or \"FeatureCollection\".\n- **name**: (string, optional) The name of the domain.\n- **description**: (string, optional) A brief description of the domain.\n- **horizontalResolution**: (float) The horizontal resolution in meters of a regular grid representation of the domain.\n- **verticalResolution**: (float) The vertical resolution in meters of a regular grid representation of the domain.\n- **crs**: (GeoJsonCRS) The GeoJSON specification formatted coordinate reference system (CRS) of the domain.\n - **type**: (string) Must be \"name\".\n - **properties**: (object) The properties object containing the CRS details.\n - **name**: (string) The name of the CRS, e.g., \"EPSG:4326\". Must be either 'local' or a valid authority string.\n- **tags**: (array of strings, optional) A list of tags associated with the domain.\n\n#### Feature-specific Fields\n\nWhen the input type is \"Feature\", the following additional field is required:\n\n- **geometry**: (GeoJSON Geometry object) A GeoJSON geometry object defining the spatial location of the domain.\n - **type**: (string) Must be a valid GeoJSON type, e.g., \"Polygon\".\n - **coordinates**: (array) An array of coordinates defining the geometry.\n\n#### FeatureCollection-specific Fields\n\nWhen the input type is \"FeatureCollection\", the following additional field is required:\n\n- **features**: (array of Feature objects) An array of Feature objects. Each Feature object should have:\n - **type**: (string) Must be \"Feature\".\n - **geometry**: (GeoJSON Geometry object) As described in the Feature-specific fields.\n\n### Response\n\nThe response returns a preview of the domain resource with the following fields:\n\n- **id**: (string) Will always be \"preview\" for this endpoint.\n- **name**: (string) The name of the domain.\n- **description**: (string) A brief description of the domain.\n- **createdOn**: (datetime) The current date and time.\n- **modifiedOn**: (datetime) The current date and time.\n- **type**: (string) Always \"FeatureCollection\".\n- **features**: (array) An array of two Feature objects:\n 1. The domain feature (padded bounding box):\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the padded spatial extent of the domain.\n - **properties**: (object) Additional properties of the domain feature.\n - **name**: (string) Will be \"domain\".\n - **area**: (float) The area of the domain in square meters.\n - **perimeter**: (float) The perimeter of the domain in meters.\n 2. The input feature:\n - **type**: (string) Will be \"Feature\".\n - **geometry**: (GeoJSON) The GeoJSON geometry representing the original input geometry.\n - **properties**: (object) Additional properties of the input feature.\n - **name**: (string) Will be \"input\".\n - **area**: (float) The area of the input geometry in square meters.\n - **perimeter**: (float) The perimeter of the input geometry in meters.\n- **horizontalResolution**: (float) The horizontal resolution of the domain.\n- **verticalResolution**: (float) The vertical resolution of the domain.\n- **crs**: (GeoJsonCRS) The coordinate reference system of the domain.\n- **utmAuthorityString**: (string, optional) The UTM authority string if the input was projected to UTM.\n- **tags**: (array of strings) A list of tags associated with the domain.\n\n### Processing\n\nThe preview endpoint performs the same processing steps as the create endpoint:\n\n1. **CRS Handling and Projection**: Projects the geometry to UTM if necessary.\n2. **Bounding Box Calculation**: Calculates the bounding box of the input geometry.\n3. **Resolution-based Padding**: Pads the bounding box to align with the specified resolution.\n4. **FeatureCollection Creation**: Creates a FeatureCollection with the padded domain and original input geometries.\n\n### Important Notes\n\n1. This endpoint does not save any data to the database. It's purely for preview purposes.\n2. The `id` field will always be \"preview\" in the response.\n3. The `createdOn` and `modifiedOn` fields will be set to the current time but are not persisted.\n4. All the same validations and checks applied in the create endpoint are also applied here, including area limitations and CONUS checks.\n\n### Error Responses\n\n- **422 Unprocessable Entity**: The spatial extent is invalid.\n - **Detail**: \"Invalid spatial extent. The area of the spatial extent must be greater than zero meters.\"\n - **Detail**: \"Invalid spatial extent. The area of the spatial extent must be less than sixteen square kilometers.\"\n - **Detail**: \"Invalid spatial extent. The spatial extent must be entirely within CONUS.\"\n- **500 Internal Server Error**: An error occurred while previewing the domain resource.\n - **Detail**: \"An error occurred while previewing the domain resource.\"","operationId":"preview_domain","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"},"examples":{"feature collection WGS84":{"summary":"Example WGS84 FeatureCollection","description":"This example creates a domain from a FeatureCollection GeoJSON object. The GeoJSON represents an approximately 1 square kilometer area in the Blue Mountain Recreation Area outside of Missoula, Montana. The CRS of the FeatureCollection is not provided so it is assumed to be 'EPSG:4326'.","value":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"coordinates":[[[-114.09545796676623,46.8324794598619],[-114.11217537297199,46.8324794598619],[-114.11217537297199,46.82496749915157],[-114.09545796676623,46.82496749915157],[-114.09545796676623,46.8324794598619]]],"type":"Polygon"}}],"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1}},"feature collection EPSG:5070":{"summary":"Example EPSG:5070 FeatureCollection","description":"This example creates a domain from a FeatureCollection GeoJSON object with a CRS of 'EPSG:5070'. Note that the CRS is explicitly set in the GeoJSON object. Because the CRS is a projected coordinate system, FastFuels uses the provided CRS for the domain instead of reprojecting.","value":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-1377797.8087433458,2780720.35945401],[-1379055.2389321132,2780962.840146559],[-1379212.7978295316,2780146.1745799617],[-1377955.2239776908,2779903.6661836714],[-1377797.8087433458,2780720.35945401]]]}}],"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1,"crs":{"properties":{"name":"EPSG:5070"},"type":"name"}}},"feature UTM":{"summary":"Example UTM Feature","description":"This example creates a domain from a polygon feature GeoJSON object with UTM coordinates.","value":{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[721502.7544906491,5190645.048516054],[720227.9398802927,5190598.00908098],[720258.6480286171,5189763.323999467],[721533.6406826023,5189810.364218195],[721502.7544906491,5190645.048516054]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::32611"}},"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1}},"feature local":{"summary":"Example Local Feature","description":"Example of a domain with spatial data in a local coordinate system (with meter units). The crs field is set to 'local' to indicate that the coordinates are in a local coordinate system.","value":{"type":"Feature","geometry":{"coordinates":[[[0,0],[0,100],[100,100],[100,0],[0,0]]],"type":"Polygon"},"properties":{},"name":"Example","description":"This is an example domain.","horizontalResolution":2,"verticalResolution":1,"crs":{"properties":{"name":"local"},"type":"name"}}}}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}]}},"/v1/domains/reproject":{"post":{"tags":["Domains"],"summary":"Reproject Geojson","description":"# Reproject GeoJSON Endpoint\n\nThis endpoint reprojects a GeoJSON FeatureCollection to a different coordinate reference system (CRS) using the specified EPSG code.\n\n## Endpoint: `POST /domains/reproject`\n\n### Query Parameters\n\nTo reproject a GeoJSON, the following query parameter is required:\n\n- **targetEPSG**: (integer, optional) The EPSG code of the target coordinate reference system. Default is 4362.\n\n### Request Body\n\nThe request body should be a GeoJSON FeatureCollection object that includes:\n\n- **type**: (string) Must be \"FeatureCollection\".\n- **features**: (array) An array of Feature objects, each containing:\n - **type**: (string) Must be \"Feature\".\n - **geometry**: (object) A GeoJSON geometry object.\n - **properties**: (object, optional) Properties associated with the feature.\n\n### Response\n\nThe response returns the reprojected GeoJSON FeatureCollection with all geometries transformed to the target coordinate reference system while preserving the original properties of each feature.\n\n### Example Request\n\n```http\nPOST /domains/reproject?targetEPSG=32633\nContent-Type: application/json\n\n{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[...coordinates in source CRS...]]]\n },\n \"properties\": {\n \"name\": \"Example Feature\"\n }\n }\n ]\n}\n```\n\n### Example Response\n\n```json\n{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [[[...coordinates in target CRS...]]]\n },\n \"properties\": {\n \"name\": \"Example Feature\"\n }\n }\n ]\n}\n```","operationId":"reproject_geojson","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"targetEPSG","in":"query","required":false,"schema":{"type":"integer","description":"The target EPSG code to reproject the GeoJSON to.","default":4362,"title":"Targetepsg"},"description":"The target EPSG code to reproject the GeoJSON to."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSONFeatureCollection"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSONFeatureCollection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/{featureName}/style":{"patch":{"tags":["Domains"],"summary":"Update Feature Style","description":"# Update Feature Style\n\nUpdates the style properties of a specific feature in a domain while preserving its geometry. This endpoint allows you to customize the visual appearance of either the domain boundary or input geometry features.\n\n## Endpoint\n\n```\nPATCH /domains/{domainId}/features/{featureName}/style\n```\n\n## Path Parameters\n\n- `domainId` (string, required)\n - The unique identifier of the domain containing the feature to update\n\n- `featureName` (string, required)\n - The name of the feature to update\n - Must be either \"domain\" or \"input\"\n - \"domain\" refers to the padded bounding box feature\n - \"input\" refers to the original input geometry feature\n\n## Request Body\n\nThe request body should contain style properties to update. All properties are optional:\n\n```json\n{\n \"strokeColor\": string, // The color of line/boundary (e.g., \"#555555\")\n \"strokeOpacity\": number, // The opacity of lines/boundaries (0-1)\n \"strokeWidth\": number, // The width of lines/boundaries\n \"fillColor\": string, // The fill color for polygons (e.g., \"#555555\")\n \"fillOpacity\": number // The opacity of polygon fills (0-1)\n}\n```\n\n## Response\n\nReturns the updated feature with the new style properties. The response includes:\n\n- `type`: Always \"Feature\"\n- `geometry`: The unchanged GeoJSON geometry of the feature\n- `properties`: Object containing:\n - `name`: The feature name (\"domain\" or \"input\")\n - `area`: The area of the feature in square meters\n - `perimeter`: The perimeter of the feature in meters\n - `style`: The updated style properties\n\n## Example Request\n\n```http\nPATCH /domains/abc123/features/domain/style\nContent-Type: application/json\n\n{\n \"strokeColor\": \"#FF0000\",\n \"strokeWidth\": 3,\n \"strokeOpacity\": 0.8,\n \"fillColor\": \"#FFA500\",\n \"fillOpacity\": 0.3\n}\n```\n\n## Example Response\n\n```json\n{\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [/* ... */]\n },\n \"properties\": {\n \"name\": \"domain\",\n \"area\": 10000.0,\n \"perimeter\": 400.0,\n \"style\": {\n \"strokeColor\": \"#FF0000\",\n \"strokeWidth\": 3,\n \"strokeOpacity\": 0.8,\n \"fillColor\": \"#FFA500\",\n \"fillOpacity\": 0.3\n }\n }\n}\n```\n\n## Error Responses\n\n- **404 Not Found**\n - The specified domain or feature does not exist\n - The user does not have access to the specified domain\n\n- **500 Internal Server Error**\n - An error occurred while updating the feature style\n - Response includes an error message in the detail field\n\n## Notes\n\n- Style properties are merged with existing styles - only specified properties are updated\n- Unspecified style properties retain their existing values\n- The geometry and other feature properties remain unchanged\n- Style changes are persistent and will be saved to the database","operationId":"update_feature_style","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"featureName","in":"path","required":true,"schema":{"enum":["domain","input"],"type":"string","title":"Featurename"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSONStyleProperties"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSONFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features":{"get":{"tags":["Features"],"summary":"Get Features","description":"# Get Features Endpoint\n\nThis endpoint retrieves the features resource associated with a domain\nbelonging to the user based on the provided domain ID.\n\nA features resource is a container for the various types of feature\ndata that can exist with the spatial context of the domain. Currently,\nonly road and water features are supported, though other forms of feature\nwill be added soon.\n\n## Endpoint: `GET /v1/domains/{domainId}/features`\n\n### Path Parameters\n\nTo retrieve the features of a domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain belonging to the user whose features are to be retrieved.\n\n### Response\n\nThe response returns the members of the specified features resource\nfollowing the Features schema.\n\n- **road**: (RoadFeature)\n- **water**: (WaterFeature)\n\n### Example Request\n\n```http\nGET /v1/domains/1e7d8d3c9f8b4c3ba9e7c3b4f8d7a9c1/features\n```\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found.\"\n- **500 Internal Server Error**: An error occurred while retrieving the feature resources.\n - **Detail**: \"An error occurred while getting the feature resources.\"","operationId":"get_features","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Features"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/exports/{exportFormat}":{"post":{"tags":["Features"],"summary":"Create Feature Export","description":"# Create Feature Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the feature data (road and water) of a specific domain, in the specified format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format in which to export the feature data. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of the export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n- `signedUrl` (string, optional): Initially `null`, populated when export is completed.\n\n## Error Responses\n\n- `404 Not Found`: If the domain is not found, or there are no water or road features created.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure that the road and water feature data for the domain have been created before initiating an export. If neither feature exists, the request will result in a `404 Not Found` error.\n- The export will be processed as a background job, and the status will initially be set to `\"pending\"`.\n- Check the export status using a separate endpoint to monitor progress.\n- Once the export is complete, use the `signedUrl` to download the GeoJSON file.","operationId":"create_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Features"],"summary":"Get Feature Export","description":"# Get Feature Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a feature export request (for road and water features) for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Export not found or no feature data exists for the specified export format.\n\n## Usage Notes\n\n- Use this endpoint to check the status of a feature export request.\n- Once the status is `\"completed\"`, you can use the `signedUrl` to download the exported GeoJSON file.\n- The signed URL expires 7 days after creation.","operationId":"get_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Features"],"summary":"Delete Feature Export","description":"# Delete Feature Export\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/features/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint deletes a feature export request and its associated files for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export to delete. Possible values are:\n - `\"geojson\"`: Delete the export in the geojson format.\n\n## Response\n\nIf successful, returns a `204 No Content` status code.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to delete an existing feature export request and its related data.\n- The export request is removed from Firestore, and the associated files are deleted from Google Cloud Storage asynchronously.","operationId":"delete_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/road":{"post":{"tags":["Road Feature"],"summary":"Create Road Feature","description":"# Create Road Feature\n\nThis endpoint creates a new road feature resource for a specific domain.\nRoad features represent various road attributes (e.g., type, condition) within the spatial context of a domain.\nThe road feature data can be generated using various data sources (e.g., OSM) and methods.\n\nOn resource creation, the road feature data is set to a status of \"pending\".\nThe road feature data is generated in the background using the specified methods and data sources.\nOnce the road feature data is generated and available for user access, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/road\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to create the road feature.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `sources` (array of strings, required): List of sources to include in the road feature. Currently, possible values include:\n- `\"OSM\"`: OpenStreetMap data source.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created road feature resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the road feature. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the road feature was created.\n- `modifiedOn` (string): The timestamp when the road feature was last modified.\n- `checksum` (string): A unique checksum for the road feature resource.\n- `sources` (array of strings): The list of sources used for the road feature.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `422 Unprocessable Entity`: The road feature is not supported for local coordinate systems, or required fields are missing.\n- `429 Too Many Requests`: An error occurred while running the job due to resource exhaustion.\n\n## Usage Notes\n\n- If the domain is in a \"local\" coordinate system, the endpoint will raise a `422 Unprocessable Entity` error.\n- The endpoint will run the specified job to generate the road feature data if \"OSM\" is included in the sources.\n- The endpoint updates the road feature data in the database and logs relevant information for monitoring and debugging.","operationId":"create_road_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoadFeatureRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Road Feature"],"summary":"Get Road Feature","description":"# Get Road Feature\n\nThis endpoint retrieves the details of an existing road feature resource\nfor a specific domain. Users can access the status and metadata of the\nroad feature that has been created.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/road\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to retrieve the road feature.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the road feature resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the road feature.\n- `createdOn` (string): The timestamp when the road feature was created.\n- `modifiedOn` (string): The timestamp when the road feature was last modified.\n- `checksum` (string): A unique checksum for the road feature resource.\n- `sources` (array of strings): The list of sources used for the road feature.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The road feature for the specified domain does not exist or is empty.\n\n## Usage Notes\n\n- Ensure that the domain ID provided in the request path is valid and that the user has access to the specified domain.\n- If the road feature data is empty or invalid, the endpoint will raise a `404 Not Found` error with a detail message indicating the issue.","operationId":"get_road_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Road Feature"],"summary":"Delete Road Feature","description":"# Delete Road Feature\n\nThis endpoint deletes an existing road feature resource for a specific\ndomain. This action removes the road feature data from the database and\ncancels any ongoing job execution related to the road feature.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/features/road\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the road feature.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the road feature has been successfully deleted and no content is returned in the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found\"\n\n## Usage Notes\n\n- Deleting a road feature is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the road feature and remove the associated data from the cache and cloud storage.","operationId":"delete_road_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/road/exports/{exportFormat}":{"post":{"tags":["Road Feature"],"summary":"Create Road Feature Export","description":"# Create Road Feature Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/road/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the road feature data of a specific domain, in the specified format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format in which to export the road feature data. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of the export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n- `signedUrl` (string, optional): Initially `null`, populated when export is completed.\n\n## Error Responses\n\n- `404 Not Found`: If the domain is not found, or there are no water or road features created.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- The export will be processed as a background job, and the status will initially be set to `\"pending\"`.\n- Check the export status using a separate endpoint to monitor progress.\n- Once the export is complete, use the `signedUrl` to download the GeoJSON file.","operationId":"create_road_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Road Feature"],"summary":"Get Road Feature Export","description":"# Get Road Feature Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/road/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a feature export request (for road features) for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Export not found or no feature data exists for the specified export format.\n\n## Usage Notes\n\n- Use this endpoint to check the status of a road feature export request.\n- Once the status is `\"completed\"`, you can use the `signedUrl` to download the exported GeoJSON file.\n- The signed URL expires 7 days after creation.","operationId":"get_road_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/water":{"post":{"tags":["Water Feature"],"summary":"Create Water Feature","description":"# Create Water Feature\n\nThis endpoint creates a new water feature resource for a specific domain.\nWater feature data represents various water-related attributes (e.g.,\nlakes, rivers) that exist within the spatial context of a domain. The\nwater feature data can be sourced from different data sources (e.g., OSM)\nand can include various details about water features in the domain.\n\nOn resource creation, the water feature data is set to a status of \"pending\".\nThe data is processed in the background, and once it is available for user\naccess, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/water\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to create the water feature.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `sources` (array of strings, required): List of sources from which the\n water feature data should be collected. Currently, `\"OSM\"` is a supported source.\n- Additional fields might be included based on the source. For example,\n if the source is `\"OSM\"`, the request can specify additional parameters\n related to how the data should be fetched.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code\nand the created water feature resource in the response body. The response body will\nbe a JSON object with the following fields:\n\n- `status` (string): The status of the water feature. Initially set to `\"pending\"`.\n- `createdOn` (string): The timestamp when the water feature was created.\n- `modifiedOn` (string): The timestamp when the water feature was last modified.\n- `checksum` (string): A unique checksum for the water feature resource.\n- `sources` (array of strings): The list of sources used to gather the water feature data.\n\n## Error Responses\n\n- `422 Unprocessable Entity`: The domain is in a local coordinate system which\n does not support water features.\n - **Detail**: \"WaterFeature is not supported for local coordinate systems.\"\n- `429 Too Many Requests`: An error occurred while running the job for processing\n the water feature data.\n - **Detail**: An error message related to job submission.\n\n## Usage Notes\n\n- Ensure that the domain ID provided in the request path is valid and that the user\n has access to the specified domain.\n- If using `\"OSM\"` as a source, additional parameters can be specified as needed.\n- The process of creating and updating the water feature data involves background\n job execution, and the endpoint will return the initial resource with a pending status.","operationId":"create_water_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWaterFeatureRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaterFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Water Feature"],"summary":"Get Water Feature","description":"# Get Water Feature\n\nThis endpoint retrieves the details of an existing water feature resource\nfor a specific domain. The water feature data represents various water-related\nattributes (e.g., lakes, rivers) that have been created and stored for the\ngiven domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/water\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to retrieve the water feature.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code\nand the water feature resource in the response body. The response body will\nbe a JSON object with the following fields:\n\n- `status` (string): The status of the water feature.\n- `createdOn` (string): The timestamp when the water feature was created.\n- `modifiedOn` (string): The timestamp when the water feature was last modified.\n- `checksum` (string): A unique checksum for the water feature resource.\n- `sources` (array of strings): The list of sources used to gather the water feature data.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The water feature for the specified domain does not exist or is empty.\n - **Detail**: \"water feature empty.\"\n\n## Usage Notes\n\n- Ensure that the domain ID provided in the request path is valid and that the user\n has access to the specified domain.\n- If the water feature data does not exist or is empty, a `404 Not Found` error will be raised.","operationId":"get_water_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaterFeature"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Water Feature"],"summary":"Delete Water Feature","description":"# Delete Water Feature\n\nThis endpoint deletes an existing water feature resource for a specific domain.\nThis action removes the water feature data from the database and cancels any ongoing\njob execution related to the water feature.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/features/water\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the water feature.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code.\nThis indicates that the water feature has been successfully deleted and no content is returned\nin the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found\"\n- `404 Not Found`: The water feature for the specified domain does not exist.\n - **Detail**: \"Water feature not found\"\n\n## Usage Notes\n\n- Deleting a water feature is a permanent action and cannot be undone. Ensure that you have\n the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the water feature and\n remove the associated data from the cache and cloud storage.","operationId":"delete_water_feature","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/features/water/exports/{exportFormat}":{"post":{"tags":["Water Feature"],"summary":"Create Water Feature Export","description":"# Create Water Feature Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/features/water/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the water feature data of a specific domain, in the specified format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format in which to export the water feature data. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of the export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n- `signedUrl` (string, optional): Initially `null`, populated when export is completed.\n\n## Error Responses\n\n- `404 Not Found`: If the domain is not found, or there are no water or water features created.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- The export will be processed as a background job, and the status will initially be set to `\"pending\"`.\n- Check the export status using a separate endpoint to monitor progress.\n- Once the export is complete, use the `signedUrl` to download the GeoJSON file.","operationId":"create_water_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Water Feature"],"summary":"Get Water Feature Export","description":"# Get Water Feature Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/features/water/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a feature export request (for water features) for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Possible value:\n - `\"geojson\"`: Export the feature data in GeoJSON format.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of the last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Export not found or no feature data exists for the specified export format.\n\n## Usage Notes\n\n- Use this endpoint to check the status of a water feature export request.\n- Once the status is `\"completed\"`, you can use the `signedUrl` to download the exported GeoJSON file.\n- The signed URL expires 7 days after creation.","operationId":"get_water_feature_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"geojson","type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/inventories":{"get":{"tags":["Inventories"],"summary":"Get Inventories","description":"# Get Inventories Endpoint\n\nThis endpoint retrieves the inventories resource associated with a domain\nbelonging to the user based on the provided domain ID.\n\nAn inventories resource is a container for the various types of inventory\ndata that can exist with the spatial context of the domain. Currently,\nonly tree inventories are supported, though other forms of inventory will\nbe added soon.\n\n## Endpoint: `GET /v1/domains/{domainId}/inventories`\n\n### Path Parameters\n\nTo retrieve the inventories of a domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of the domain belonging to the user whose inventories are to be retrieved.\n\n### Response\n\nThe response returns the members of the specified inventories resource\nfollowing the Inventories schema.\n\n- **tree**: (TreeInventory)\n\n\n### Example Request\n\n```http\nGET /v1/domains/1e7d8d3c9f8b4c3ba9e7c3b4f8d7a9c1/inventories\n```\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found.\"\n- **500 Internal Server Error**: An error occurred while retrieving the inventory resources.\n - **Detail**: \"An error occurred while getting the inventory resources.\"","operationId":"get_inventories","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Inventories"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/inventories/tree":{"post":{"tags":["Tree Inventory"],"summary":"Create Tree Inventory","description":"# Create Tree Inventory\n\nThis endpoint creates a new tree inventory resource for a specific domain. Tree Inventory data represents a complete forest inventory that exists within the spatial context of a domain. The tree inventory data can be generated using various data products and models that provide either national coverage (e.g., TreeMap) or local coverage.\n\nOn resource creation, the tree inventory data is set to a status of \"pending\". The tree inventory data is generated in the background using the specified method (e.g., TreeMap). Once the tree inventory data is generated and available for user access, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/inventories/tree\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to create the tree inventory.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `sources` (array of strings, required): List of data sources to be used for building the tree inventory. Currently, only one data source at a time is supported. Possible values are:\n - `\"TreeMap\"`: Indicates that the tree inventory should be created using the TreeMap raster product. This approach generates a tree inventory with national coverage.\n - `\"file\"`: Indicates that you will upload a file via a signed url. Please see File Source Configuration for more info.\n\n- `modifications` (array of objects, optional): List of modifications to apply to the tree inventory data. Maximum 1000 modifications allowed.\n\n- `treatments` (array of objects, optional): List of silvicultural treatments to apply to the tree inventory. Maximum 1000 treatments allowed.\n\n- `featureMasks` (array of strings, optional): List of Features to mask tree inventory data.\n\n### TreeMap Source Configuration\n\nIf `\"TreeMap\"` is included in the `sources`, the request body can include additional configurations for `TreeMap`:\n\n- `TreeMap` (object, optional): Advanced configurations for the TreeMap data source.\n - `version` (string, optional): The version of TreeMap to use. Default is `\"2022\"`. Possible values are:\n - `\"2014\"`: Use the 2014 version of TreeMap.\n - `\"2016\"`: Use the 2016 version of TreeMap.\n - `\"2020\"`: Use the 2020 version of TreeMap.\n - `\"2022\"`: Use the 2022 version of TreeMap.\n - `seed` (integer, optional): The random seed to use for generating the tree inventory. If not provided, a random seed will be generated.\n - `canopyHeightMapConfiguration` (object, optional): Canopy height map configuration for TreeMap data source. If provided, the canopy height map will be used to segment and impute the coarse 30m TreeMap data with high-resolution canopy height data. Details of this approach will be provided in an upcoming publication. Please contact support.fastfuels@silvxlabs.com for more information.\n - `source` (string, required): The source of the canopy height map data. Possible values are:\n - `\"Meta2024\"`: Use the Meta2024 canopy height map data. More information about this data source can be found here: https://www.sciencedirect.com/science/article/pii/S003442572300439X\n\n### File Source Configuration\nGenerate Signed URL for Tree Inventory Upload\n\nIf the source is `\"file\"`, this endpoint generates a signed URL that allows users to upload a CSV file representing the tree inventory data.\nThe signed URL is valid for 1 hour and has a maximum upload size of 500 MB.\n\nThe full work flow consists of the following steps:\n1. Call this endpoint to get a signed URL\n2. Perform a put request to send your file to the signed url. Here is a python example:\n\n```[python]\nwith open(\"your_file_goes_here.csv\", \"rb\") as file:\n upload_response = requests.put(\n signed_url_response[\"file\"][\"url\"],\n data=file,\n headers=signed_url_response[\"file\"][\"headers\"],\n )\n```\n**Note**: the signed_url_response has a field named \"file\" with the relevant info for the put request.\n\n3. Your file will be validated and processed in the background\n4. The status of your upload can be retrieved via and inventory get() request\n\n#### Required Columns\n\nThe CSV file must include the following columns with their specified data types and constraints:\n\n1. **SPCD** (Integer)\n - FIA species code\n - Must be an integer\n - Represents standard FIA species classifications\n\n2. **STATUSCD** (Integer)\n - Tree status code\n - Must be one of these values:\n - 0: No status\n - 1: Live\n - 2: Dead\n - 3: Missing\n\n3. **DIA** (Float)\n - Diameter at breast height (DBH)\n - Unit: centimeters (cm)\n - Range: 0 to 1200 cm\n - Measured at 1.37 meters above ground\n\n4. **HT** (Float)\n - Tree height\n - Unit: meters (m)\n - Range: 0 to 116 meters\n - Measured from ground to tree top\n\n5. **CR** (Float)\n - Crown ratio\n - Unit: ratio (dimensionless)\n - Range: 0 to 1\n - Represents the ratio of crown length to total tree height\n\n6. **X** (Float)\n - X coordinate in projected coordinate system\n - Unit: meters (m)\n - Range: Must fall within domain bounds (west to east)\n - Required: Yes\n - Used for spatial positioning\n\n7. **Y** (Float)\n - Y coordinate in projected coordinate system\n - Unit: meters (m)\n - Range: Must fall within domain bounds (south to north)\n - Required: Yes\n - Used for spatial positioning\n\n### Treatments\n\nThe `treatments` field is an array of treatment objects. Each treatment object represents a silvicultural treatment to be applied to the tree inventory. Currently, there are two types of treatment types available:\n\n1. Proportional Thinning\n2. Directional Thinning\n\n#### Proportional Thinning\n\n- `method`: \"proportionalThinning\" (string, required)\n- `targetMetric`: \"basalArea\" (string, required)\n- `targetValue`: float (required)\n - Unit: square meters per hectare (m²/ha)\n - Represents the target basal area after thinning\n\n#### Directional Thinning\n\n- `method`: \"directionalThinning\" (string, required)\n- `direction`: (string, required)\n - Possible values: \"below\" or \"above\"\n - Indicates whether to thin from below (smallest to largest) or above (largest to smallest)\n- `targetMetric`: (string, required)\n - Possible values: \"diameter\" or \"basalArea\"\n- `targetValue`: float (required)\n - Units of the targetValue quantity depends on the targetMetric:\n - For \"diameter\": centimeters (cm)\n - For \"basalArea\": square meters per hectare (m²/ha)\n - Represents the threshold for thinning (diameter) or the target basal area after thinning\n\nNote: The order of treatments in the array determines the sequence in which they will be applied to the tree inventory.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created tree inventory resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the tree inventory. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the tree inventory was created.\n- `modifiedOn` (string): The timestamp when the tree inventory was last modified.\n- `checksum` (string): A unique checksum for the tree inventory resource.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `422 Unprocessable Entity`: The request body is invalid or missing required fields.\n- `429 Too Many Requests`: An error occurred while submitting the job due to resource exhaustion.","operationId":"create_tree_inventory","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTreeInventoryRequest"},"examples":{"treemap_defaults":{"value":{"sources":["TreeMap"]},"summary":"TreeMap example with defaults","description":"This example creates a tree inventory using data from the TreeMap raster product. In this example, the user only provides 'TreeMap' as an element in the 'sources' list. The 'TreeMap' source is then populated with default values for the 'version' and 'seed' fields."},"treemap_advanced":{"value":{"sources":["TreeMap"],"TreeMap":{"version":"2022","seed":123456789}},"summary":"TreeMap example with advanced options","description":"This example creates a tree inventory using data from the TreeMap raster product. In this example, the user provides 'TreeMap' as an element in the 'sources' list. The 'TreeMap' source is then populated with the specified 'version' and 'seed' values."},"treemap_with_meta_canopy_height_model_configuration":{"value":{"sources":["TreeMap"],"TreeMap":{"version":"2022","seed":123456789,"canopyHeightMapConfiguration":{"source":"Meta2024"}}},"summary":"TreeMap example with canopy height map configuration","description":"Shows how to use TreeMap data product with a imputation and segmentation from a high resolution canopy height map."},"treemap_with_feature_masks":{"value":{"sources":["TreeMap"],"featureMasks":["road","water"]},"summary":"TreeMap example with feature masks","description":"This example creates a tree inventory using data from the TreeMap raster product. In this example, the user provides 'TreeMap' as an element in the 'sources' list. The 'TreeMap' source is then populated with default values for the 'version' and 'seed' fields. The 'featureMasks' list is also provided with 'road' and 'water' elements to mask out these features from the inventory."},"treemap_ht_modification":{"value":{"sources":["TreeMap"],"modifications":[{"conditions":{"attribute":"HT","operator":"gt","value":20},"actions":{"attribute":"HT","modifier":"multiply","value":0.9}}]},"summary":"TreeMap height modification example","description":"This example creates a tree inventory using data from the TreeMap raster product. It applies a modification to reduce the height of all trees taller than 20 meters by 10%."},"treemap_dia_modification":{"value":{"sources":["TreeMap"],"modifications":[{"conditions":{"attribute":"DIA","operator":"lt","value":20.32},"actions":{"attribute":"all","modifier":"remove"}}]},"summary":"TreeMap remove trees modification example","description":"This example creates a tree inventory using data from the TreeMap raster product. It applies a modification to remove all trees with a diameter at breast height less than 20.32cm (8 inches)."},"treemap_proportional_thinning":{"value":{"sources":["TreeMap"],"treatments":[{"method":"proportionalThinning","targetMetric":"basalArea","targetValue":25}]},"summary":"TreeMap proportional thinning example","description":"This example creates a tree inventory using data from the TreeMap raster product. It applies a silvicultural treatment to thin the forest to 25 square meters of basal area per hectare."},"treemap_directional_thinning":{"value":{"sources":["TreeMap"],"treatments":[{"method":"directionalThinning","direction":"below","targetMetric":"diameter","targetValue":30.48}]},"summary":"TreeMap directional thinning example","description":"This example creates a tree inventory using data from the TreeMap raster product. It applies a silvicultural treatment to remove from below all trees with a diameter at breast height less than 30.48cm (12 inches)."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreeInventory"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Tree Inventory"],"summary":"Get Tree Inventory","description":"# Get Tree Inventory\n\nThis endpoint retrieves the details of an existing tree inventory\nresource for a specific domain. Users can access the status and metadata\nof the tree inventory that has been created.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/inventories/tree\n```\n\n### Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to retrieve the tree inventory.\n\n### Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the tree inventory resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the tree inventory. Possible values are \"pending\", \"running\", \"completed\", and \"failed\".\n- `createdOn` (string): The timestamp when the tree inventory was created.\n- `modifiedOn` (string): The timestamp when the tree inventory was last modified.\n- `checksum` (string): A unique checksum for the tree inventory resource.\n- `treeInventory` (object): The tree inventory data, as provided in the request body when the tree inventory was created.\n\n### Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found\"\n- `404 Not Found`: The tree inventory for the specified domain does not exist.\n - **Detail**: \"Tree inventory not created\"","operationId":"get_tree_inventory","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreeInventory"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Tree Inventory"],"summary":"Delete Tree Inventory","description":"# Delete Tree Inventory\n\nThis endpoint deletes an existing tree inventory resource for a specific\ndomain. This action removes the tree inventory data from the database and\ncancels any ongoing job execution related to the tree inventory.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/inventories/tree\n```\n\n### Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the tree inventory.\n\n### Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the tree inventory has been successfully deleted and no content is returned in the response body.\n\n### Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found\"\n\n### Usage Notes\n\n- Deleting a tree inventory is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the tree inventory and remove the associated data from the cache and cloud storage.","operationId":"delete_tree_inventory","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/inventories/tree/exports/{exportFormat}":{"post":{"tags":["Tree Inventory"],"summary":"Create Tree Inventory Export","description":"# Create Tree Inventory Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/inventories/tree/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the tree inventory data of a specific domain. The data can be exported in various formats including CSV, Parquet, and GeoJSON. The export process runs in the background.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to create the tree inventory export.\n- `exportFormat` (string, required): The format in which to export the tree inventory data. Possible values are:\n - `\"csv\"`: Export the data in CSV format.\n - `\"parquet\"`: Export the data in Parquet format.\n - `\"geojson\"`: Export the data in GeoJSON format.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the export request details in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the export request. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the export request was created.\n- `modifiedOn` (string): The timestamp when the export request was last modified.\n- `expiresOn` (string): The timestamp when the export request will expire (7 days from creation).\n- `signedUrl` (string, optional): The signed URL to download the exported file. This field will be `null` initially.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `422 Unprocessable Entity`: The export format is invalid or the request cannot be processed.\n\n## Usage Notes\n\n- Ensure that the tree inventory for the specified domain is completed before initiating an export.\n- The export request will be processed in the background. Use the GET endpoint to check the status.","operationId":"create_tree_inventory_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["csv","parquet","geojson"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Tree Inventory"],"summary":"Get Tree Inventory Export","description":"# Get Tree Inventory Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/inventories/tree/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a tree inventory export request for a specific domain. Users can check the status, metadata, and download URL of the export request.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to retrieve the tree inventory export.\n- `exportFormat` (string, required): The format of the export request. Possible values are:\n - `\"csv\"`: Retrieve the CSV export request details.\n - `\"parquet\"`: Retrieve the Parquet export request details.\n - `\"geojson\"`: Retrieve the GeoJSON export request details.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the export request details in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the export request. Possible values are `\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, and `\"expired\"`.\n- `createdOn` (string): The timestamp when the export request was created.\n- `modifiedOn` (string): The timestamp when the export request was last modified.\n- `expiresOn` (string): The timestamp when the export request will expire.\n- `signedUrl` (string, optional): The signed URL to download the exported file. This will be `null` if the status is not `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The specified export request does not exist.\n\n## Usage Notes\n\n- Once the export is completed, the `status` will change to `\"completed\"`, and the `signedUrl` field will be populated with a URL to download the export file.\n- The signed URL will be valid for 7 days from the creation of the export request, as indicated by the `expiresOn` field.\n- To download the exported file, make a GET request to the provided `signedUrl` once it's available.\n- If the current time is past the `expiresOn` timestamp, the `status` will change to `\"expired\"`, and the `signedUrl` will be set to `null`.\n- There is no separate download endpoint. Use the `signedUrl` provided in the export details to download the file directly.\n\n## Example Workflow\n\n1. Create an export request using the POST endpoint.\n2. Periodically check the status of the export using the GET endpoint.\n3. Once the status is `\"completed\"`, retrieve the `signedUrl` from the export details.\n4. Use the `signedUrl` to download the exported file within 7 days of the export creation.","operationId":"get_tree_inventory_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["csv","geojson","parquet"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids":{"get":{"tags":["Grids"],"summary":"Get Grids","description":"# Get Grids Endpoint\n\nThis endpoint retrieves the grids resource associated with a domain\nbelonging to the user based on the provided domain ID.\n\nA grids resource is a container for the various types of gridded\ndata that can exist with the spatial context of the domain. Currently,\ntree, surface, topography, and feature grids are supported.\n\n## Endpoint: `GET /v1/domains/{domainId}/grids`\n\n### Path Parameters\n\nTo retrieve the grids of a domain, the following path parameter is required:\n\n- **domainId**: (string) The unique identifier of a domain belonging to the user.\n### Response\n\nThe response returns the members of the specified grids resource following\nthe Grids schema.\n\n- **tree**: (TreeGrid)\n- **surface**: (SurfaceGrid)\n- **topography**: (TopographyGrid)\n- **feature**: (FeatureGrid)\n\n### Example Request\n\n```http\nGET /v1/domains/1e7d8d3c9f8b4c3ba9e7c3b4f8d7a9c1/grids\n```\n\n### Error Responses\n\n- **404 Not Found**: The specified domain does not exist or the user does not have access to it.\n - **Detail**: \"Domain not found.\"\n- **500 Internal Server Error**: An error occurred while retrieving the grid resources.\n - **Detail**: \"An error occurred while getting the grid resources.\"","operationId":"get_grids","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grids"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/exports/{exportFormat}":{"post":{"tags":["Grids"],"summary":"Create Grid Export","description":"# Create Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the grid data of a specific domain to the specified format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format in which to export the grid data. Possible values are:\n - `\"zarr\"`: Export the data in the compressed zarr format.\n - `\"QUIC-Fire\"`: Exports the grid data to the set of input files required by the QUIC-Fire model.\n\n### QUIC-Fire Format\n\nFastFuels supports grid exports directly to input files for the QUIC-Fire\nmodel. The export format is a zip file containing the following files:\n- treesrhof.dat\n- treesmoist.dat\n- treesdepth.dat\n- topo.dat\n\nThe exporter attempts to build the required files from the available grid data.\n\nThe following examples demonstrate some of the possible behavior:\n- If a \"topography\" grid is not available, the exporter will not include topo.dat in the export.\n- If the \"surface\" grid is present, but the \"tree\" grid is not, the exporter will include treesrhof.dat, treesmoist.dat, and treesdepth.dat in the export as a 2D input.\n- If the \"tree\" grid is present, but the \"surface\" grid is not, the exporter will include treesrhof.dat, treesmoist.dat, and treesdepth.dat in the export as a 3D input.\n- If both the \"surface\" and \"tree\" grids are present, the exporter will include treesrhof.dat, treesmoist.dat, and treesdepth.dat in the export as a 3D input with the surface grid as the bottom layer with respect to the z-axis.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n- `signedUrl` (string, optional): Initially `null`, populated when export is completed.\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or request.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the grid data for the domain are completed before initiating an export.\n- Check the export status using the GET endpoint.\n- Use the `signedUrl` to download the file once available.","operationId":"create_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","QUIC-Fire"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Grids"],"summary":"Get Grid Export","description":"# Get Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Possible values are:\n - `\"zarr\"`: Export the data in the compressed zarr format.\n - `\"QUIC-Fire\"`: Exports the grid data to the set of input files required by the QUIC-Fire model.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","QUIC-Fire"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Grids"],"summary":"Delete Grid Export","description":"# Delete Grid Export\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint deletes a grid export request and its associated files for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export to delete. Possible values are:\n - `\"zarr\"`: Delete the export in the compressed zarr format.\n - `\"QUIC-Fire\"`: Delete the grid data exported to the set of input files required by the QUIC-Fire model.\n\n## Response\n\nIf successful, returns a `204 No Content` status code.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to delete an existing grid export request and its related data.\n- The export request is removed from Firestore, and the associated files are deleted from Google Cloud Storage asynchronously.","operationId":"delete_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","QUIC-Fire"],"type":"string","title":"Exportformat"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/tree":{"post":{"tags":["Tree Grid"],"summary":"Create Tree Grid","description":"# Create Tree Grid\n\nThis endpoint creates a new tree grid resource for a specific domain.\nTree grid data represents various 3D gridded tree attribute (e.g.,\nbulk density, fuel moisture, SPCD) data that exists within the spatial\ncontext of a domain. Tree grid data is typically generated to create\ninputs to 3D fire behavior models such as QUIC-Fire or FDS.\n\nOn resource creation, the tree grid data is set to a status of \"pending\".\nThe tree grid data is generated in the background using the specified\nmethod and data sources. Once the tree grid data is generated and\navailable for user access, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/tree\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to create the tree grid.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `attributes` (array of strings, required): List of attributes to include in the tree grid data. Attributes represent the an additional dimension in the 3D gridded data. Possible values are:\n - `\"bulkDensity\"`\n - `\"fuelMoisture\"`\n - `\"SPCD\"`\n\n### Attribute Descriptions and Sources\n\n- `bulkDensity` (kg/m³): The mass of the tree fuel per unit volume of the occupied cell.\n- `foliarMoisture` (%): Live foliar moisture content of the occupied cell.\n- `SPCD` (unitless): The FIA species code of the occupied cell.\n- `SAVR` (m²/m³): The surface area to volume ratio of fuel particles in the occupied cell.\n\nEach attribute can be sourced from different data sources. By default, the system will use pre-defined data sources to acquire data for the specified attributes. However, if you want to specify additional information for how to acquire an attribute, you can provide detailed instructions in the request body.\n\nTo specify additional information for an attribute, add a field with the attribute name to the request body. For example:\n\n```json\n{\n \"attributes\": [\"bulkDensity\", \"fuelMoisture\"],\n \"bulkDensity\": {\n \"source\": \"TreeInventory\",\n \"biomassModel\": \"NSVB\"\n },\n \"fuelMoisture\": {\"source\": \"uniform\", \"value\": 175}\n}\n```\n\nIn this example, the `bulkDensity` attribute is sourced from the Tree Inventory using the NSVB biomass model, and the `fuelMoisture` attribute is set to a uniform value of 175%.\n\nThe general form of this construction is as follows:\n\n- `bulkDensity`, `fuelMoisture`, `SPCD`, `SAVR` (object, optional): The data source for the respective attribute. The structure of these objects depends on the source specified.\n\n#### Uniform Source\n\nIf the source is `\"uniform\"`, the object should have the following fields:\n\n- `value` (float, required): The uniform value for the attribute.\n\n#### Tree Inventory Source\n\nIf the source is `\"TreeInventory\"`, data will be sourced from the Tree Inventory resource.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created tree grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the tree grid. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the tree grid was created.\n- `modifiedOn` (string): The timestamp when the tree grid was last modified.\n- `checksum` (string): A unique checksum for the tree grid resource.\n- `attributes` (array of strings): The list of attributes included in the tree grid.\n- `bulkDensity`, `fuelMoisture`, `SPCD` (object): The data source information for the respective attribute.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The tree inventory for the specified domain does not exist.\n- `400 Bad Request`: The tree inventory status is not \"completed\".\n- `422 Unprocessable Entity`: The request body is invalid or required fields are missing.","operationId":"create_tree_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTreeGridRequest"},"examples":{"default_attributes":{"summary":"Default attributes example","value":{"attributes":["bulkDensity","fuelMoisture"]},"description":"This example creates a tree grid with the default attributes. Default configurations and data sources are used for each provided attribute."},"defaults_with_attributes":{"summary":"Default attributes with explicit fields example","value":{"attributes":["bulkDensity","fuelMoisture"],"bulkDensity":{"source":"TreeInventory"},"fuelMoisture":{"source":"uniform","value":100}},"description":"This example creates a tree grid with the default attributes. Default configurations and data sources are provided for each attribute. These additional fields are equivalent to the default values. Providing them explicitly is optional."},"uniform_fuel_moisture":{"summary":"Uniform fuel moisture example","value":{"attributes":["fuelMoisture"],"fuelMoisture":{"source":"uniform","value":175}},"description":"This example creates a tree grid with a uniform fuel moisture value of 175%."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreeGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Tree Grid"],"summary":"Get Tree Grid","description":"# Get Tree Grid\n\nThis endpoint retrieves the details of an existing tree grid resource\nfor a specific domain. Users can access the status and metadata of the\ntree grid that has been created.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/tree\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to retrieve the tree grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the tree grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the tree grid.\n- `createdOn` (string): The timestamp when the tree grid was created.\n- `modifiedOn` (string): The timestamp when the tree grid was last modified.\n- `checksum` (string): A unique checksum for the tree grid resource.\n- `attributes` (array of strings): The list of attributes included in the tree grid.\n- `bulkDensity`, `fuelMoisture`, `SPCD` (object): The data source information for the respective attribute.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The tree grid for the specified domain does not exist.","operationId":"get_tree_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreeGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Tree Grid"],"summary":"Delete Tree Grid","description":"# Delete Tree Grid\n\nThis endpoint deletes an existing tree grid resource for a specific\ndomain. This action removes the tree grid data from the database and\ncancels any ongoing job execution related to the tree grid.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/tree\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the tree grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the tree grid has been successfully deleted and no content is returned in the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The tree grid for the specified domain does not exist.\n\n## Usage Notes\n\n- Deleting a tree grid is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the tree grid and remove the associated data from the cache and cloud storage.","operationId":"delete_tree_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/tree/attributes":{"get":{"tags":["Tree Grid"],"summary":"Get Tree Grid Attribute Metadata","description":"# Get Tree Grid Attribute Metadata\n\nRetrieves metadata about the structure of the tree grid and its attributes for a given domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/tree/attributes\n```\n\n## Path Parameters\n\n- `domainId` (string, required): Unique identifier of the domain.\n\n## Response\n\n### Success Response (200 OK)\n\nReturns a JSON response containing:\n\n- `shape`: Dimensions of the grid data.\n- `dimensions`: Names of each dimension.\n- `chunks`: Number of chunks in each dimension.\n- `chunkShape`: Shape of each chunk.\n- `attributes`: Detailed information about each available attribute.\n\n### Error Responses\n\n- 404 Not Found: Tree grid not found or not accessible.\n- 422 Unprocessable Entity: Tree grid not in 'completed' status.","operationId":"Get Tree Grid Attribute Metadata","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridAttributeMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/tree/exports/{exportFormat}":{"post":{"tags":["Tree Grid"],"summary":"Create Tree Grid Export","description":"# Create Tree Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/tree/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the tree grid data of a specific domain in the zarr compressed format. The export process runs in the background.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format for the export. Currently, only `\"zarr\"` is supported.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or request.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the tree grid for the domain is completed before initiating an export.\n- Check the export status using the GET endpoint.","operationId":"create_tree_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"zarr","type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Tree Grid"],"summary":"Get Tree Grid Export","description":"# Get Tree Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/tree/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a tree grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Currently, only `\"zarr\"` is supported.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_tree_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"const":"zarr","type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/surface":{"post":{"tags":["Surface Grid"],"summary":"Create Surface Grid","description":"# Create Surface Grid\n\nCreates a new surface grid containing fuel attributes for a domain. Surface fuels are represented through five key attributes: fuel load, fuel depth, fuel moisture, surface area-to-volume ratio (SAVR), and fire behavior fuel models (FBFM).\n\n## Path Parameters\n- `domainId` (string, required): Domain identifier\n\n## Request Body Structure\n\n### Required Fields\n\n- `attributes` (array[string]): One or more surface fuel attributes to include:\n - `fuelLoad`: Fuel loading per unit area (kg/m²)\n - `fuelDepth`: Depth of fuel bed above surface (m)\n - `fuelMoisture`: Mass of water per unit mass of dry fuel (%)\n - `SAVR`: Surface area-to-volume ratio (m²/m³)\n - `FBFM`: Fire behavior fuel model classification\n\n### Data Sources\n\nEach attribute requires a data source. Available sources vary by attribute:\n\n#### 1. LANDFIRE Source (`source: \"LANDFIRE\"`)\nAvailable for: fuelLoad, fuelDepth, SAVR, FBFM\n\nBase configuration:\n- `product`: \"FBFM40\" (Scott & Burgan) or \"FBFM13\" (Anderson)\n- `version`: \"2022\"\n- `interpolationMethod`: \"nearest\", \"linear\", \"cubic\", or \"zipper\"\n- `featureMasks`: Array of feature types to mask (optional)\n- `removeNonBurnable`: Array of non-burnable codes to replace (optional)\n\nFor FBFM40 product, certain attributes can calculate values by size class using the `groups` field:\n\nFuel Load:\n- Without groups: Computes total dead fuel load (1hr + 10hr + 100hr + dead herbaceous + dead woody)\n- With groups: Values for specific size classes:\n - `oneHour`: 1-hour dead fuels + dead herbaceous + dead woody\n - `tenHour`: 10-hour dead fuels\n - `hundredHour`: 100-hour dead fuels\n - `liveHerbaceous`: Live herbaceous fuels\n - `liveWoody`: Live woody fuels\n- Additional fields:\n - `curingLiveHerbaceous`: 0-1\n - `curingLiveWoody`: 0-1\n\nSAVR:\n- Without groups: Computes weighted average SAVR of dead fuels\n- With groups: Values for specific size classes:\n - `oneHour`: 1-hour dead fuels\n - `tenHour`: 10-hour dead fuels\n - `hundredHour`: 100-hour dead fuels\n - `liveHerbaceous`: Live herbaceous fuels\n - `liveWoody`: Live woody fuels\n\nFuel Depth:\n- Groups field is ignored - returns single fuel bed depth value\n\n#### 2. Uniform Value Source (`source: \"uniform\"`)\nAvailable for: all attributes\n\nConfiguration:\n- `value`: Single numeric value applied across entire grid\n- `featureMasks`: Array of feature types to mask (optional)\n\n#### 3. Uniform By Size Class Source (`source: \"uniformBySizeClass\"`)\nAvailable for: fuelMoisture only\n\nConfiguration:\n- `groups` (required): Array of size classes to include. Values must be a subset of:\n - `oneHour`: 1-hour dead fuels\n - `tenHour`: 10-hour dead fuels\n - `hundredHour`: 100-hour dead fuels\n - `liveHerbaceous`: Live herbaceous fuels\n - `liveWoody`: Live woody fuels\n- Must provide corresponding value for each specified group:\n - `oneHour`: Value for 1-hour fuels (if in groups)\n - `tenHour`: Value for 10-hour fuels (if in groups)\n - `hundredHour`: Value for 100-hour fuels (if in groups)\n - `liveHerbaceous`: Value for live herbaceous fuels (if in groups)\n - `liveWoody`: Value for live woody fuels (if in groups)\n- `featureMasks`: Array of feature types to mask (optional)\n\n### Feature Enhancement Options\n\n#### Feature Masks (`featureMasks`)\n- Overlays high-resolution features from OpenStreetMap\n- Available features: \"road\", \"water\", \"building\"\n- Applies to any attribute source type\n\n#### Non-Burnable Replacement (`removeNonBurnable`)\n- Removes specified LANDFIRE non-burnable classes\n- Available codes:\n - \"NB1\": Urban/developed\n - \"NB2\": Snow/ice\n - \"NB3\": Agricultural\n - \"NB8\": Water\n - \"NB9\": Bare ground\n- Replaced using majority filter of surrounding burnable fuels\n- Only available for LANDFIRE sources\n\n### Modifications\nOptional list of modifications to apply to computed values:\n```python\nmodifications: [\n {\n \"conditions\": [\n {\n \"attribute\": string, # Must be in attributes array\n \"operator\": string, # Comparison operator\n \"value\": any # Target value\n }\n ],\n \"actions\": [\n {\n \"attribute\": string, # Must be in attributes array\n \"modifier\": string, # Modification type\n \"value\": any # New value\n }\n ]\n }\n]\n```\n\n## Response\nReturns SurfaceGrid object containing:\n- Request body fields\n- `status`: Job status\n- `createdOn`: Creation timestamp\n- `modifiedOn`: Last modified timestamp\n- `checksum`: Resource checksum\n\n## Errors\n- 404: Domain not found\n- 422: Invalid request or incompatible data sources\n- 429: Too many requests","operationId":"create_surface_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSurfaceGridRequest"},"examples":{"basic":{"value":{"attributes":["fuelLoad","fuelDepth","fuelMoisture"]},"summary":"Basic surface grid request","description":"Creates a surface grid with three attributes using default configurations. The API will automatically use appropriate data sources and settings for each attribute."},"detailed_defaults":{"value":{"attributes":["fuelLoad","fuelDepth","fuelMoisture"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","curingLiveHerbaceous":0.25,"curingLiveWoody":0.25,"groups":["oneHour","tenHour","hundredHour","liveHerbaceous","liveWoody"]},"fuelDepth":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest"},"fuelMoisture":{"source":"uniform","value":15}},"summary":"Detailed configuration example","description":"Shows explicit configuration of each attribute, demonstrating the default values that would be used automatically in the basic example."},"zipper_interpolation":{"value":{"attributes":["fuelLoad","fuelDepth","FBFM"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"zipper"},"fuelDepth":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"zipper"},"FBFM":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"zipper"}},"summary":"Zipper interpolation example","description":"Demonstrates using the zipper interpolation method for smoother transitions between different fuel types at boundaries."},"feature_masks":{"value":{"attributes":["fuelLoad","fuelDepth","fuelMoisture"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"linear","featureMasks":["road","water"],"removeNonBurnable":["NB1","NB8"]},"fuelDepth":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"linear","featureMasks":["road","water"],"removeNonBurnable":["NB1","NB8"]},"fuelMoisture":{"source":"uniform","value":15,"featureMasks":["road","water"]}},"summary":"Feature masks example","description":"Shows how to replace non-burnable fuel models with burnable models and apply a high resolution feature mask to remove fuels from roads and water bodies"},"fuel_model_modification":{"value":{"attributes":["FBFM","fuelLoad","fuelDepth"],"FBFM":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest"},"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","curingLiveHerbaceous":0.25,"curingLiveWoody":0.25},"fuelDepth":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest"},"modifications":[{"conditions":[{"attribute":"FBFM","operator":"eq","value":"GR1"}],"actions":[{"attribute":"FBFM","modifier":"replace","value":"GR2"}]}]},"summary":"Fuel model modification example","description":"Shows how to modify specific fuel models, in this case replacing GR1 with GR2 wherever it occurs."},"size_class_moisture":{"value":{"attributes":["fuelMoisture"],"fuelMoisture":{"source":"uniformBySizeClass","oneHour":0.15,"tenHour":0.2,"hundredHour":0.25,"groups":["oneHour","tenHour","hundredHour"]}},"summary":"Size class moisture example","description":"Demonstrates setting moisture values only for specific size classes."},"fuel_load_groups":{"value":{"attributes":["fuelLoad"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","curingLiveHerbaceous":0.25,"curingLiveWoody":0.25,"groups":["oneHour","tenHour","hundredHour"]}},"summary":"Size class groups for fuel load","description":"Shows how to request fuel load data for specific size class groups. This example retrieves dead fuel loading for 1-hour, 10-hour, and 100-hour fuels."},"savr_groups":{"value":{"attributes":["SAVR"],"SAVR":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","groups":["oneHour","tenHour","hundredHour"]}},"summary":"Size class groups for surface area to volume ratio","description":"Shows how to request SAVR data for specific size class groups. This example retrieves SAVR values for live herbaceous and live woody fuels."},"combined_size_classes":{"value":{"attributes":["fuelLoad","fuelMoisture","SAVR"],"fuelLoad":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","curingLiveHerbaceous":0.25,"curingLiveWoody":0.25,"groups":["oneHour"]},"fuelMoisture":{"source":"uniformBySizeClass","oneHour":0.15,"tenHour":0.2,"hundredHour":0.25,"groups":["oneHour"]},"SAVR":{"source":"LANDFIRE","product":"FBFM40","version":"2022","interpolationMethod":"nearest","groups":["oneHour"]}},"summary":"Combined size class configurations","description":"Demonstrates how to combine multiple attributes with consistent size class groups. This example focuses on 1-hour and live herbaceous fuels across fuel load, moisture, and SAVR attributes."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurfaceGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Surface Grid"],"summary":"Get Surface Grid","description":"# Get Surface Grid\n\nThis endpoint retrieves the details of an existing surface grid resource\nfor a specific domain. Users can access the status and metadata of the\nsurface grid that has been created.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/surface\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to retrieve the surface grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the surface grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `status` (string): The status of the surface grid.\n- `createdOn` (string): The timestamp when the surface grid was created.\n- `modifiedOn` (string): The timestamp when the surface grid was last modified.\n- `checksum` (string): A unique checksum for the surface grid resource.\n- `attributes` (array of strings): The list of attributes included in the surface grid.\n- `fuelLoad`, `fuelDepth`, `fuelMoisture`, `SAVR`, `FBFM` (object): The data source information for the respective attribute.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The surface grid for the specified domain does not exist.","operationId":"get_surface_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurfaceGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Surface Grid"],"summary":"Delete Surface Grid","description":"# Delete Surface Grid\n\nThis endpoint deletes an existing surface grid resource for a specific\ndomain. This action removes the surface grid data from the database and\ncancels any ongoing job execution related to the surface grid.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/surface\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the surface grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the surface grid has been successfully deleted and no content is returned in the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The surface grid for the specified domain does not exist.\n\n## Usage Notes\n\n- Deleting a surface grid is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the surface grid and remove the associated data from the cache and cloud storage.","operationId":"delete_surface_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/surface/attributes":{"get":{"tags":["Surface Grid"],"summary":"Get Surface Grid Attribute Metadata","description":"# Get Surface Grid Attribute Metadata\n\nRetrieves metadata about the structure of the surface grid and its attributes for a given domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/surface/attributes\n```\n\n## Path Parameters\n\n- `domainId` (string, required): Unique identifier of the domain.\n\n## Response\n\n### Success Response (200 OK)\n\nReturns a JSON response containing:\n\n- `shape`: Dimensions of the grid data.\n- `dimensions`: Names of each dimension.\n- `chunks`: Number of chunks in each dimension.\n- `chunkShape`: Shape of each chunk.\n- `attributes`: Detailed information about each available attribute.\n\n### Error Responses\n\n- 404 Not Found: Surface grid not found or not accessible.\n- 422 Unprocessable Entity: Surface grid not in 'completed' status.","operationId":"Get Surface Grid Attribute Metadata","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridAttributeMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/surface/exports/{exportFormat}":{"post":{"tags":["Surface Grid"],"summary":"Create Surface Grid Export","description":"# Create Surface Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/surface/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the surface grid data of a specific domain in the zarr compressed format. The export process runs in the background.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format for the export. Currently, the supported formats are `\"zarr\"` and `\"geotiff\"`.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or request.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the surface grid for the domain is completed before initiating an export.\n- Check the export status using the GET endpoint.","operationId":"create_surface_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Surface Grid"],"summary":"Get Surface Grid Export","description":"# Get Surface Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/surface/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a surface grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Currently, supported formats are `\"zarr\"` and `\"geotiff\"`.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_surface_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/topography":{"post":{"tags":["Topography Grid"],"summary":"Create Topography Grid","description":"# Create Topography Grid\n\nThis endpoint creates a new topography grid resource for a specific domain.\nTopography grid data represents various topographic attributes (elevation,\nslope, and aspect) that exist within the spatial context of a domain.\nThe topography grid data can be generated using different data sources\n(3DEP, LANDFIRE, or uniform values) and interpolation methods.\n\nOn resource creation, the topography grid data is set to a status of \"pending\".\nThe topography grid data is generated in the background using the specified\nmethod and data sources. Once the topography grid data is generated and\navailable for user access, the status is updated to \"completed\".\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/topography\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to create the topography grid.\n\n## Request Body\n\nThe request body should be a JSON object containing the following fields:\n\n- `attributes` (array of strings, required): List of attributes to include in the topography grid. Possible values are:\n - `\"elevation\"`\n - `\"slope\"`\n - `\"aspect\"`\n\n### Attribute Descriptions and Sources\n\n- `elevation` (m): The elevation of the terrain above sea level.\n- `slope` (degrees): The slope of the terrain surface.\n- `aspect` (degrees): The aspect of the terrain surface (direction the slope faces).\n\nEach attribute can be sourced from different data sources. By default, the system will use 3DEP (USGS 3D Elevation Program) data for all attributes. However, if you want to specify different sources or configurations for any attribute, you can provide detailed instructions in the request body.\n\nTo specify additional information for an attribute, add a field with the attribute name to the request body. For example:\n\n```json\n{\n \"attributes\": [\"elevation\"],\n \"elevation\": {\n \"source\": \"3DEP\",\n \"interpolationMethod\": \"cubic\"\n }\n}\n```\n\nThe structure of attribute configuration objects depends on the source specified:\n\n#### 3DEP Source (Default)\n\nIf the source is `\"3DEP\"`, the object should have the following fields:\n\n- `source` (string, required): Must be `\"3DEP\"`.\n- `interpolationMethod` (string, required): The interpolation method to use. Possible values are:\n - `\"nearest\"`: Preserves exact data points without interpolation\n - `\"linear\"`: Linear interpolation between points\n - `\"cubic\"`: Smooth interpolation using cubic splines (default for elevation and slope)\n\nNote: Aspect attribute automatically uses nearest neighbor interpolation regardless of what is specified.\n\n#### LANDFIRE Source\n\nIf the source is `\"LANDFIRE\"`, the object should have the following fields:\n\n- `source` (string, required): Must be `\"LANDFIRE\"`.\n- `version` (string, required): The version of the LANDFIRE product. Currently, only `\"2020\"` is supported.\n- `interpolationMethod` (string, required): The interpolation method to use. Possible values are:\n - `\"nearest\"`: Preserves exact data points\n - `\"linear\"`: Linear interpolation\n - `\"cubic\"`: Smooth cubic interpolation\n - `\"zipper\"`: Special method for LANDFIRE data\n\nNote: Aspect attribute automatically uses nearest neighbor interpolation regardless of what is specified.\n\n#### Uniform Source\n\nIf the source is `\"uniform\"`, the object should have the following fields:\n\n- `source` (string, required): Must be `\"uniform\"`.\n- `value` (float, required): The uniform value for the attribute.\n\nNote: Uniform source is only available for the elevation attribute.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created topography grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `attributes` (array of strings): The list of attributes included in the topography grid.\n- `elevation` (object, optional): The data source configuration for elevation.\n- `slope` (object, optional): The data source configuration for slope.\n- `aspect` (object, optional): The data source configuration for aspect.\n- `status` (string): The status of the topography grid. Will be set to `\"pending\"` initially.\n- `createdOn` (string): The timestamp when the topography grid was created.\n- `modifiedOn` (string): The timestamp when the topography grid was last modified.\n- `checksum` (string): A unique checksum for the topography grid resource.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `422 Unprocessable Entity`: The request body is invalid, the data sources are not compatible with the domain CRS, or required fields are missing.\n- `429 Too Many Requests`: The system is currently unable to process additional job requests.","operationId":"create_topography_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTopographyGridRequest"},"examples":{"default_attributes":{"value":{"attributes":["elevation"]},"summary":"Simple elevation request (uses 3DEP)","description":"Creates a topography grid with elevation data using the default 3DEP source. This is the simplest way to get high-quality elevation data."},"default_attributes_with_fields":{"value":{"attributes":["elevation"],"elevation":{"source":"3DEP","interpolationMethod":"cubic"}},"summary":"Default configuration (3DEP) shown explicitly","description":"Creates a topography grid using 3DEP with default settings shown explicitly. While providing these fields is unnecessary when using defaults, this example shows the actual configuration being used."},"landfire_elevation":{"value":{"attributes":["elevation"],"elevation":{"source":"LANDFIRE","version":"2020","interpolationMethod":"cubic"}},"summary":"Using LANDFIRE for elevation data","description":"Creates a topography grid using LANDFIRE elevation data instead of the default 3DEP source. LANDFIRE might be preferred when working with other LANDFIRE-sourced data for consistency."},"landfire_all":{"value":{"attributes":["elevation","slope","aspect"],"elevation":{"source":"LANDFIRE","version":"2020","interpolationMethod":"cubic"},"slope":{"source":"LANDFIRE","version":"2020","interpolationMethod":"cubic"},"aspect":{"source":"LANDFIRE","version":"2020","interpolationMethod":"nearest"}},"summary":"Using LANDFIRE for all attributes","description":"Creates a complete topography grid using LANDFIRE data for all attributes. Note that aspect uses nearest neighbor interpolation to preserve directional accuracy."},"nearest_interpolation":{"value":{"attributes":["elevation"],"elevation":{"source":"3DEP","interpolationMethod":"nearest"}},"summary":"Using nearest neighbor interpolation","description":"Creates a topography grid using nearest neighbor interpolation instead of the default cubic interpolation. This might be preferred when you want to preserve exact data points without interpolation."},"all_attributes":{"value":{"attributes":["elevation","slope","aspect"]},"summary":"All topographic attributes","description":"Creates a complete topography grid with elevation, slope, and aspect using default 3DEP source and configurations for each attribute. Note that aspect automatically uses nearest neighbor interpolation while elevation and slope use cubic interpolation."},"mixed_sources":{"value":{"attributes":["elevation","slope","aspect"],"elevation":{"source":"LANDFIRE","version":"2020","interpolationMethod":"cubic"},"slope":{"source":"3DEP","interpolationMethod":"cubic"},"aspect":{"source":"LANDFIRE","version":"2020","interpolationMethod":"nearest"}},"summary":"Mixed data sources","description":"Creates a topography grid mixing LANDFIRE and 3DEP sources. Shows how different data sources can be used for different attributes, which might be useful when optimizing for specific attribute qualities or data consistency requirements."},"uniform_elevation":{"value":{"attributes":["elevation"],"elevation":{"source":"uniform","value":1000.0}},"summary":"Uniform elevation","description":"Creates a topography grid with a uniform elevation value. This can be useful for testing or theoretical scenarios where a flat surface is desired."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopographyGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Topography Grid"],"summary":"Get Topography Grid","description":"# Get Topography Grid\n\nThis endpoint retrieves the details of an existing topography grid resource\nfor a specific domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/topography\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for\n which you want to retrieve the topography grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `200 OK` status code and the topography grid resource in the response body. The response body will be a JSON object with the following fields:\n\n- `attributes` (array of strings): The list of attributes included in the topography grid (elevation, slope, and/or aspect).\n- `elevation` (object, optional): The data source configuration for elevation.\n- `slope` (object, optional): The data source configuration for slope.\n- `aspect` (object, optional): The data source configuration for aspect.\n- `status` (string): The current status of the topography grid (e.g., \"pending\", \"completed\").\n- `createdOn` (string): The timestamp when the topography grid was created.\n- `modifiedOn` (string): The timestamp when the topography grid was last modified.\n- `checksum` (string): A unique checksum for the topography grid resource.\n\nThe structure of attribute configuration objects will match what was provided during creation, with 3DEP as the default source. See the create_topography_grid endpoint documentation for details on data source configurations.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist, the user does not have access to it, or the topography grid for the specified domain does not exist.\n\n## Usage Notes\n\n- Use this endpoint to check the status and details of a previously created topography grid.\n- The response will include all the information provided during the creation of the topography grid, along with its current status and timestamps.","operationId":"get_topography_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopographyGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Topography Grid"],"summary":"Delete Topography Grid","description":"# Delete Topography Grid\n\nThis endpoint deletes an existing topography grid resource for a specific\ndomain. This action removes the topography grid data from the database and\ncancels any ongoing job execution related to the topography grid.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/topography\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the topography grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `204 No Content` status code. This indicates that the topography grid has been successfully deleted and no content is returned in the response body.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `404 Not Found`: The topography grid for the specified domain does not exist.\n\n## Usage Notes\n\n- Deleting a topography grid is a permanent action and cannot be undone. Ensure that you have the correct domain ID before making the delete request.\n- The endpoint will also cancel any ongoing job execution related to the topography grid and remove the associated data from the cache and cloud storage.","operationId":"delete_topography_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/topography/attributes":{"get":{"tags":["Topography Grid"],"summary":"Get Topography Grid Attribute Metadata","description":"# Get Topography Grid Attribute Metadata\n\nThis endpoint retrieves detailed metadata about the structure of the topography grid and its attributes for a given domain. This includes information about the grid's dimensions, chunking, and available attributes with their units and descriptions.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/topography/attributes\n```\n\n## Path Parameters\n\n- `domainId` (string, required): Unique identifier of the domain.\n\n## Response\n\n### Success Response (200 OK)\n\nReturns a JSON response containing:\n\n- `shape` (array): Dimensions of the grid data [height, width].\n- `dimensions` (array): Names of each dimension [\"y\", \"x\"].\n- `chunks` (array): Number of chunks in each dimension.\n- `chunkShape` (array): Shape of each chunk [chunk_height, chunk_width].\n- `attributes` (array): Detailed information about each available attribute:\n - `name` (string): Attribute name (e.g., \"elevation\", \"slope\", \"aspect\")\n - `description` (string): Description of what the attribute represents\n - `units` (string): Units of measurement (e.g., \"m\", \"degrees\")\n\n### Error Responses\n\n- `404 Not Found`: Topography grid not found or not accessible.\n- `422 Unprocessable Entity`: Topography grid not in 'completed' status.","operationId":"Get Topography Grid Attribute Metadata","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridAttributeMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/topography/exports/{exportFormat}":{"post":{"tags":["Topography Grid"],"summary":"Create Topography Grid Export","description":"# Create Topography Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/topography/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the topography grid data of a specific domain. The export process runs in the background and can generate files in either zarr or GeoTIFF format.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format for the export. Supported values:\n - `\"zarr\"`: Zarr array format, suitable for high-performance array storage\n - `\"geotiff\"`: GeoTIFF format, suitable for GIS applications\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or topography grid not in completed status.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the topography grid for the domain is completed before initiating an export.\n- Check the export status using the GET endpoint.","operationId":"create_topography_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Topography Grid"],"summary":"Get Topography Grid Export","description":"# Get Topography Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/topography/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a topography grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Currently, only `\"zarr\"` is supported.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_topography_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/feature":{"post":{"tags":["Feature Grid"],"summary":"Create Feature Grid","description":"# Create Feature Grid\n\nThis endpoint creates a new feature grid resource for a specific domain. Feature grids\nare used to represent spatial data related to various features within the domain. This\noperation generates a feature grid based on the provided configuration and data sources.\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/feature\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to create the feature grid.\n\n## Request Body\n\nThe request body should be a JSON object adhering to the `CreateFeatureGridRequest` model, containing\nthe necessary configuration and data source information for generating the feature grid.\n\n## Response\n\nIf the request is successful, the endpoint will return a `201 Created` status code and the created feature grid resource in the response body. The response body will include the following fields:\n\n- `createdOn` (string): The timestamp when the feature grid was created.\n- `modifiedOn` (string): The timestamp when the feature grid was last modified.\n- `status` (string): The status of the feature grid, initially set to `\"PENDING\"`.\n- `checksum` (string): A unique checksum for the feature grid resource.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain does not exist or the user does not have access to it.\n- `429 Too Many Requests`: The system is currently overloaded, and the job could not be submitted.\n\n## Usage Notes\n\n- If an existing feature grid already exists for the domain, its associated job execution will be canceled before creating the new grid.\n- The feature grid generation is handled as a background job. The status will initially be `\"PENDING\"` and will be updated once the job completes.\n- The system will attempt to remove any cached data related to the previous feature grid.","operationId":"create_feature_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFeatureGridRequest"},"examples":{"default_attributes":{"value":{"attributes":["road","water"]},"summary":"Road and Water attributes example","description":"This example creates a feature grid using both road and water feature data."}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Feature Grid"],"summary":"Get Feature Grid","description":"# Get Feature Grid\n\nThis endpoint retrieves the feature grid data for a specific domain. Feature grids\nrepresent spatial data related to various features within the domain. If the feature grid\ndata has been generated and stored, it will be returned in the response.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/feature\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to retrieve the feature grid.\n\n## Response\n\nIf the feature grid data exists, the endpoint will return a `200 OK` status code and the feature grid resource in the response body. The response will be a JSON object adhering to the `FeatureGrid` model, which includes:\n\n- `createdOn` (string): The timestamp when the feature grid was created.\n- `modifiedOn` (string): The timestamp when the feature grid was last modified.\n- `status` (string): The current status of the feature grid.\n- `checksum` (string): A unique checksum for the feature grid resource.\n\n## Error Responses\n\n- `404 Not Found`: The feature grid data has not been created for the specified domain, or it cannot be retrieved.\n\n## Usage Notes\n\n- Ensure that the `domainId` provided is correct and that the user has the appropriate permissions to access the domain's data.\n- The feature grid data is retrieved from the database, and if it does not exist, a `404 Not Found` error will be returned.","operationId":"get_feature_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureGrid"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Feature Grid"],"summary":"Delete Feature Grid","description":"# Delete Feature Grid\n\nThis endpoint deletes the feature grid data for a specific domain. If the feature grid exists,\nit will be removed from the database, and any associated resources, such as files in the GCS bucket,\nwill be deleted asynchronously.\n\n## Endpoint\n\n```\nDELETE /v1/domains/{domainId}/grids/feature\n```\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain for which you want to delete the feature grid.\n\n## Response\n\n- `204 No Content`: The feature grid was successfully deleted. The response body will be empty.\n\n## Error Responses\n\n- `404 Not Found`: The specified domain or feature grid does not exist or the user does not have access to it.\n\n## Usage Notes\n\n- Ensure that the `domainId` provided is correct and that the user has the appropriate permissions to delete the domain's data.\n- The feature grid data is removed from the database, and any running jobs related to the feature grid are canceled in the background.\n- The associated Zarr group in the GCS bucket is deleted asynchronously.","operationId":"delete_feature_grid","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/feature/attributes":{"get":{"tags":["Feature Grid"],"summary":"Get Feature Grid Attribute Metadata","description":"# Get Feature Grid Attribute Metadata\n\nRetrieves metadata about the structure of the feature grid and its attributes for a given domain.\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/feature/attributes\n```\n\n## Path Parameters\n\n- `domainId` (string, required): Unique identifier of the domain.\n\n## Response\n\n### Success Response (200 OK)\n\nReturns a JSON response containing:\n\n- `shape`: Dimensions of the grid data.\n- `dimensions`: Names of each dimension.\n- `chunks`: Number of chunks in each dimension.\n- `chunkShape`: Shape of each chunk.\n- `attributes`: Detailed information about each available attribute.\n\n### Error Responses\n\n- 404 Not Found: Feature grid not found or not accessible.\n- 422 Unprocessable Entity: Feature grid not in 'completed' status.","operationId":"Get Feature Grid Attribute Metadata","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridAttributeMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/{domainId}/grids/feature/exports/{exportFormat}":{"post":{"tags":["Feature Grid"],"summary":"Create Feature Grid Export","description":"# Create Feature Grid Export\n\n## Endpoint\n\n```\nPOST /v1/domains/{domainId}/grids/feature/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint initiates the creation of an export file for the feature grid data of a specific domain in the zarr compressed format. The export process runs in the background.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format for the export. Currently, the supported formats are `\"zarr\"` and `\"geotiff\"`.\n\n## Response\n\nIf successful, returns a `201 Created` status code and a JSON object with:\n\n- `status` (string): Initially set to `\"pending\"`.\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp (7 days from creation).\n\n## Error Responses\n\n- `404 Not Found`: Domain not found or user lacks access.\n- `422 Unprocessable Entity`: Invalid export format or request.\n- `429 Too Many Requests`: Error submitting the export job due to resource exhaustion.\n\n## Usage Notes\n\n- Ensure the feature grid for the domain is completed before initiating an export.\n- Check the export status using the GET endpoint.","operationId":"create_feature_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Feature Grid"],"summary":"Get Feature Grid Export","description":"# Get Feature Grid Export\n\n## Endpoint\n\n```\nGET /v1/domains/{domainId}/grids/feature/exports/{exportFormat}\n```\n\n## Description\n\nThis endpoint retrieves the details of a feature grid export request for a specific domain.\n\n## Path Parameters\n\n- `domainId` (string, required): The unique identifier of the domain.\n- `exportFormat` (string, required): The format of the export. Currently, supported formats are `\"zarr\"` and `\"geotiff\"`.\n\n## Response\n\nIf successful, returns a `200 OK` status code and a JSON object with:\n\n- `status` (string): Current status of the export (`\"pending\"`, `\"running\"`, `\"completed\"`, `\"failed\"`, or `\"expired\"`).\n- `createdOn` (string): Timestamp of export request creation.\n- `modifiedOn` (string): Timestamp of last modification.\n- `expiresOn` (string): Expiration timestamp.\n- `signedUrl` (string, optional): URL to download the exported file, if status is `\"completed\"`.\n\n## Error Responses\n\n- `404 Not Found`: Domain or export request not found.\n\n## Usage Notes\n\n- Use this endpoint to check the status of an export request.\n- When status is `\"completed\"`, use the `signedUrl` to download the file.\n- The signed URL expires 7 days after creation.","operationId":"get_feature_grid_export","security":[{"APIKeyHeader":[]},{"HTTPBearer":[]}],"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string","title":"Domainid"}},{"name":"exportFormat","in":"path","required":true,"schema":{"enum":["zarr","geotiff"],"type":"string","title":"Exportformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Access":{"type":"string","enum":["personal","application"],"title":"Access","description":"Enumerates the available access types for an API key."},"Application":{"properties":{"name":{"type":"string","title":"Name","description":"A name for the application."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"An optional description for the application."},"id":{"type":"string","title":"Id","description":"Unique identifier for the application."},"ownerId":{"type":"string","title":"Ownerid","description":"Unique identifier of the user that adimisters the application."},"createdOn":{"type":"string","format":"date-time","title":"Createdon","description":"The date and time the application was created."},"modifiedOn":{"type":"string","format":"date-time","title":"Modifiedon","description":"The date and time the application was modified."}},"type":"object","required":["name","id","ownerId"],"title":"Application","description":"Represents an application that can access the FastFuels API on behalf of non-FastFuels users."},"CreateApplicationRequest":{"properties":{"name":{"type":"string","title":"Name","description":"A name for the application."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"An optional description for the application."}},"type":"object","required":["name"],"title":"CreateApplicationRequest","description":"Request body for creating a new application."},"CreateDomainRequest":{"oneOf":[{"$ref":"#/components/schemas/CreateDomainRequestFeature"},{"$ref":"#/components/schemas/CreateDomainRequestFeatureCollection"}],"title":"CreateDomainRequest","discriminator":{"propertyName":"type","mapping":{"Feature":"#/components/schemas/CreateDomainRequestFeature","FeatureCollection":"#/components/schemas/CreateDomainRequestFeatureCollection"}}},"CreateDomainRequestFeature":{"properties":{"type":{"type":"string","const":"Feature","title":"Type","default":"Feature"},"geometry":{"oneOf":[{"$ref":"#/components/schemas/Point"},{"$ref":"#/components/schemas/MultiPoint"},{"$ref":"#/components/schemas/LineString"},{"$ref":"#/components/schemas/MultiLineString"},{"$ref":"#/components/schemas/Polygon"},{"$ref":"#/components/schemas/MultiPolygon"}],"title":"Geometry","discriminator":{"propertyName":"type","mapping":{"LineString":"#/components/schemas/LineString","MultiLineString":"#/components/schemas/MultiLineString","MultiPoint":"#/components/schemas/MultiPoint","MultiPolygon":"#/components/schemas/MultiPolygon","Point":"#/components/schemas/Point","Polygon":"#/components/schemas/Polygon"}}},"properties":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Properties"},"name":{"type":"string","title":"Name","description":"The name of the domain.","default":""},"description":{"type":"string","title":"Description","description":"A brief description of the domain.","default":""},"horizontalResolution":{"type":"number","title":"Horizontalresolution","description":"The horizontal resolution in meters of a regular grid representation of the domain.","default":2.0},"verticalResolution":{"type":"number","title":"Verticalresolution","description":"The vertical resolution in meters of a regular grid representation of the domain.","default":1.0},"crs":{"$ref":"#/components/schemas/GeoJsonCRS","description":"The GeoJSON specification formatted coordinate reference system (CRS) of the domain."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"A list of tags associated with the domain.","default":[]}},"type":"object","required":["geometry"],"title":"CreateDomainRequestFeature"},"CreateDomainRequestFeatureCollection":{"properties":{"type":{"type":"string","const":"FeatureCollection","title":"Type","default":"FeatureCollection"},"features":{"items":{"$ref":"#/components/schemas/GeoJSONFeature"},"type":"array","minItems":1,"title":"Features"},"name":{"type":"string","title":"Name","description":"The name of the domain.","default":""},"description":{"type":"string","title":"Description","description":"A brief description of the domain.","default":""},"horizontalResolution":{"type":"number","title":"Horizontalresolution","description":"The horizontal resolution in meters of a regular grid representation of the domain.","default":2.0},"verticalResolution":{"type":"number","title":"Verticalresolution","description":"The vertical resolution in meters of a regular grid representation of the domain.","default":1.0},"crs":{"$ref":"#/components/schemas/GeoJsonCRS","description":"The GeoJSON specification formatted coordinate reference system (CRS) of the domain."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"A list of tags associated with the domain.","default":[]}},"type":"object","required":["features"],"title":"CreateDomainRequestFeatureCollection"},"CreateFeatureGridRequest":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/FeatureGridAttribute"},"type":"array","title":"Attributes","description":"List of feature types to rasterize."}},"type":"object","required":["attributes"],"title":"CreateFeatureGridRequest"},"CreateKeyRequest":{"properties":{"name":{"type":"string","title":"Name","description":"A name to semantically identify the key."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"An optional description of the keys purpose."},"validDays":{"type":"integer","title":"Validdays","description":"Number of days for which this key will be valid.","default":30},"scopes":{"items":{"$ref":"#/components/schemas/Scope"},"type":"array","title":"Scopes","description":"A list of scopes available to the key.","default":["read"]},"access":{"$ref":"#/components/schemas/Access","description":"Access type for the API key","default":"personal"},"applicationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applicationid","description":"Application ID accessed by the API key"}},"type":"object","required":["name"],"title":"CreateKeyRequest","description":"Request body for creating an API key resource"},"CreateRoadFeatureRequest":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/RoadFeatureSource"},"type":"array","title":"Sources","description":"List of sources of road features"}},"type":"object","required":["sources"],"title":"CreateRoadFeatureRequest"},"CreateSurfaceGridRequest":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/SurfaceGridAttribute"},"type":"array","minItems":1,"title":"Attributes","description":"List of attributes to include in the surface grid"},"fuelLoad":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40FuelLoadSource"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridFuelLoadSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40FuelLoadSource","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Fuelload"},"fuelDepth":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Source"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridFuelDepthSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40Source","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Fueldepth"},"fuelMoisture":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridUniformValue"},{"$ref":"#/components/schemas/SurfaceGridUniformValueBySizeClass"}],"title":"SurfaceGridFuelMoistureSource","discriminator":{"propertyName":"source","mapping":{"uniform":"#/components/schemas/SurfaceGridUniformValue","uniformBySizeClass":"#/components/schemas/SurfaceGridUniformValueBySizeClass"}}},{"type":"null"}],"title":"Fuelmoisture"},"SAVR":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40SAVRSource"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridSAVRSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40SAVRSource","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Savr"},"FBFM":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Source"},{"$ref":"#/components/schemas/SurfaceGridUniformFBFM40Value"}],"title":"SurfaceGridFBFMSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40Source","uniform":"#/components/schemas/SurfaceGridUniformFBFM40Value"}}},{"type":"null"}],"title":"Fbfm"},"modifications":{"items":{"$ref":"#/components/schemas/SurfaceGridModification"},"type":"array","maxItems":1000,"title":"ListSurfaceGridModifications","description":"List of modifications to apply to the surface grid","default":[]}},"type":"object","required":["attributes"],"title":"CreateSurfaceGridRequest"},"CreateTopographyGridRequest":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/TopographyGridAttribute"},"type":"array","title":"Attributes","description":"List of attributes to include in the surface grid"},"elevation":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSource"},{"$ref":"#/components/schemas/TopographyGridLandfireSource"},{"$ref":"#/components/schemas/TopographyGridUniformValue"}],"title":"TopographyGridElevationSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSource","LANDFIRE":"#/components/schemas/TopographyGridLandfireSource","uniform":"#/components/schemas/TopographyGridUniformValue"}}},{"type":"null"}],"title":"Elevation"},"aspect":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSourceAspect"},{"$ref":"#/components/schemas/TopographyGridLandfireSourceAspect"}],"title":"TopographyGridAspectSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSourceAspect","LANDFIRE":"#/components/schemas/TopographyGridLandfireSourceAspect"}}},{"type":"null"}],"title":"Aspect"},"slope":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSource"},{"$ref":"#/components/schemas/TopographyGridLandfireSource"}],"title":"TopographyGridSlopeSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSource","LANDFIRE":"#/components/schemas/TopographyGridLandfireSource"}}},{"type":"null"}],"title":"Slope"}},"type":"object","required":["attributes"],"title":"CreateTopographyGridRequest"},"CreateTreeGridRequest":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/TreeGridAttribute"},"type":"array","title":"Attributes","description":"List of attributes to include in the tree grid. Each attribute is a separate layer in the grid. Attributes present in the list will be assigned default values unless an additional field is provided.","default":["bulkDensity","fuelMoisture"]},"bulkDensity":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridBulkDensitySource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Bulkdensity"},"fuelMoisture":{"anyOf":[{"$ref":"#/components/schemas/TreeGridUniformValue"},{"type":"null"}]},"SPCD":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridSPCDSource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Spcd"},"SAVR":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridSAVRSource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Savr"}},"type":"object","title":"CreateTreeGridRequest","description":"The request used to create a tree grid."},"CreateTreeInventoryRequest":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/TreeInventorySource"},"type":"array","maxItems":1,"minItems":1,"title":"Sources","description":"The data sources used to build the tree inventory. Currently, only one data source at a time is supported."},"TreeMap":{"anyOf":[{"$ref":"#/components/schemas/TreeMapSource"},{"type":"null"}]},"modifications":{"items":{"$ref":"#/components/schemas/TreeInventoryModification"},"type":"array","maxItems":1000,"title":"ListTreeInventoryModifications","description":"List of modifications to apply to the tree inventory data","default":[]},"treatments":{"items":{"oneOf":[{"$ref":"#/components/schemas/TreeInventoryTreatmentDirectionalThinning"},{"$ref":"#/components/schemas/TreeInventoryTreatmentProportionalThinning"}],"title":"TreeInventoryTreatment","description":"A treatment to apply to the tree inventory data","discriminator":{"propertyName":"method","mapping":{"directionalThinning":"#/components/schemas/TreeInventoryTreatmentDirectionalThinning","proportionalThinning":"#/components/schemas/TreeInventoryTreatmentProportionalThinning"}}},"type":"array","maxItems":1000,"title":"ListTreeInventoryTreatments","description":"List of silvicultural treatments to apply.","default":[]},"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of Features to mask tree inventory data. This has the effect of removing trees that intersect with the feature.","default":[]}},"type":"object","required":["sources"],"title":"CreateTreeInventoryRequest"},"CreateWaterFeatureRequest":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/WaterFeatureSource"},"type":"array","title":"Sources","description":"List of sources of road features"}},"type":"object","required":["sources"],"title":"CreateWaterFeatureRequest"},"Domain":{"properties":{"type":{"type":"string","const":"FeatureCollection","title":"Type","default":"FeatureCollection"},"features":{"items":{"$ref":"#/components/schemas/GeoJSONFeature"},"type":"array","minItems":1,"title":"Features"},"name":{"type":"string","title":"Name","description":"The name of the domain.","default":""},"description":{"type":"string","title":"Description","description":"A brief description of the domain.","default":""},"horizontalResolution":{"type":"number","title":"Horizontalresolution","description":"The horizontal resolution in meters of a regular grid representation of the domain.","default":2.0},"verticalResolution":{"type":"number","title":"Verticalresolution","description":"The vertical resolution in meters of a regular grid representation of the domain.","default":1.0},"crs":{"$ref":"#/components/schemas/GeoJsonCRS","description":"The GeoJSON specification formatted coordinate reference system (CRS) of the domain."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"A list of tags associated with the domain.","default":[]},"id":{"type":"string","title":"Id","description":"A unique identifier for the domain."},"createdOn":{"type":"string","format":"date-time","title":"Createdon","description":"The date and time the domain was created."},"modifiedOn":{"type":"string","format":"date-time","title":"Modifiedon","description":"The date and time the domain was last modified."}},"type":"object","required":["features","createdOn","modifiedOn"],"title":"Domain","description":"Represents a domain resource."},"DomainSortField":{"type":"string","enum":["createdOn","modifiedOn","name"],"title":"DomainSortField","description":"Enum for sorting domain resources by field."},"DomainSortOrder":{"type":"string","enum":["ascending","descending"],"title":"DomainSortOrder","description":"Enum for sorting domain resources by order."},"Export":{"properties":{"domainId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domainid","description":"The domain ID."},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource","description":"The resource to export."},"subResource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subresource","description":"The sub-resource to export."},"attribute":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attribute","description":"The attribute to export."},"format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Format","description":"The format to export the resource in."},"status":{"anyOf":[{"$ref":"#/components/schemas/ExportStatus"},{"type":"null"}],"description":"The status of the export job."},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon","description":"The date and time the export job was created."},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon","description":"The date and time the export job was last modified."},"signedUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signedurl","description":"The signed URL to download the exported file."},"expiresOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expireson","description":"The date and time the export job will expire."}},"type":"object","title":"Export","description":"Request to export a resource"},"ExportStatus":{"type":"string","enum":["pending","running","failed","completed","expired"],"title":"ExportStatus"},"FBFM40":{"type":"string","enum":["NB1","NB2","NB3","NB8","NB9","GR1","GR2","GR3","GR4","GR5","GR6","GR7","GR8","GR9","GS1","GS2","GS3","GS4","SH1","SH2","SH3","SH4","SH5","SH6","SH7","SH8","SH9","TU1","TU2","TU3","TU4","TU5","TL1","TL2","TL3","TL4","TL5","TL6","TL7","TL8","TL9","SB1","SB2","SB3","SB4"],"title":"FBFM40"},"FeatureGrid":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/FeatureGridAttribute"},"type":"array","title":"Attributes","description":"List of feature types to rasterize."},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","required":["attributes"],"title":"FeatureGrid"},"FeatureGridAttribute":{"type":"string","enum":["road","water"],"title":"FeatureGridAttribute"},"FeatureType":{"type":"string","enum":["road","water"],"title":"FeatureType"},"Features":{"properties":{"road":{"anyOf":[{"$ref":"#/components/schemas/RoadFeature"},{"type":"null"}]},"water":{"anyOf":[{"$ref":"#/components/schemas/WaterFeature"},{"type":"null"}]}},"type":"object","title":"Features"},"GeoJSONFeature":{"properties":{"type":{"type":"string","const":"Feature","title":"Type","default":"Feature"},"geometry":{"oneOf":[{"$ref":"#/components/schemas/Point"},{"$ref":"#/components/schemas/MultiPoint"},{"$ref":"#/components/schemas/LineString"},{"$ref":"#/components/schemas/MultiLineString"},{"$ref":"#/components/schemas/Polygon"},{"$ref":"#/components/schemas/MultiPolygon"}],"title":"Geometry","discriminator":{"propertyName":"type","mapping":{"LineString":"#/components/schemas/LineString","MultiLineString":"#/components/schemas/MultiLineString","MultiPoint":"#/components/schemas/MultiPoint","MultiPolygon":"#/components/schemas/MultiPolygon","Point":"#/components/schemas/Point","Polygon":"#/components/schemas/Polygon"}}},"properties":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Properties"}},"type":"object","required":["geometry"],"title":"GeoJSONFeature","description":"A GeoJSON Feature object."},"GeoJSONFeatureCollection":{"properties":{"type":{"type":"string","const":"FeatureCollection","title":"Type","default":"FeatureCollection"},"features":{"items":{"$ref":"#/components/schemas/GeoJSONFeature"},"type":"array","minItems":1,"title":"Features"}},"type":"object","required":["features"],"title":"GeoJSONFeatureCollection","description":"A GeoJSON FeatureCollection object."},"GeoJSONStyleProperties":{"properties":{"strokeColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strokecolor","description":"The color of a line as part of a polygon, polyline, or multigeometry","examples":["#555555"]},"strokeOpacity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Strokeopacity","description":"The opacity of the line component of a polygon, polyline, or multigeometry","examples":[1.0]},"strokeWidth":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Strokewidth","description":"The width of the line component of a polygon, polyline, or multigeometry","examples":[2.0]},"fillColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fillcolor","description":"The color of the interior of a polygon","examples":["#555555"]},"fillOpacity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Fillopacity","description":"The opacity of the interior of a polygon","examples":[0.5]}},"type":"object","title":"GeoJSONStyleProperties"},"GeoJsonCRS":{"properties":{"type":{"type":"string","const":"name","title":"Type","default":"name"},"properties":{"$ref":"#/components/schemas/GeoJsonCRSProperties"}},"type":"object","required":["properties"],"title":"GeoJsonCRS"},"GeoJsonCRSProperties":{"properties":{"name":{"type":"string","title":"Name","default":"EPSG:4326"}},"type":"object","title":"GeoJsonCRSProperties"},"GridAttributeMetadataResponse":{"properties":{"shape":{"items":{"type":"integer"},"type":"array","maxItems":3,"minItems":2,"title":"Shape","description":"The total shape of the grid data."},"dimensions":{"items":{"type":"string"},"type":"array","maxItems":3,"minItems":2,"title":"Dimensions","description":"A text descriptor of each dimension in the grid data."},"chunks":{"items":{"type":"integer"},"type":"array","maxItems":3,"minItems":2,"title":"Chunks","description":"The number of chunks in each dimension."},"chunkShape":{"items":{"type":"integer"},"type":"array","maxItems":3,"minItems":2,"title":"Chunkshape","description":"The shape of each chunk."},"attributes":{"items":{"type":"object"},"type":"array","title":"Attributes","description":"Information about each attribute in the grid data."}},"type":"object","required":["shape","dimensions","chunks","chunkShape","attributes"],"title":"GridAttributeMetadataResponse"},"Grids":{"properties":{"tree":{"anyOf":[{"$ref":"#/components/schemas/TreeGrid"},{"type":"null"}]},"surface":{"anyOf":[{"$ref":"#/components/schemas/SurfaceGrid"},{"type":"null"}]},"topography":{"anyOf":[{"$ref":"#/components/schemas/TopographyGrid"},{"type":"null"}]},"feature":{"anyOf":[{"$ref":"#/components/schemas/FeatureGrid"},{"type":"null"}]}},"type":"object","title":"Grids"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Inventories":{"properties":{"tree":{"anyOf":[{"$ref":"#/components/schemas/TreeInventory"},{"type":"null"}]}},"type":"object","title":"Inventories"},"JobStatus":{"type":"string","enum":["pending","running","failed","completed"],"title":"JobStatus"},"Key":{"properties":{"name":{"type":"string","title":"Name","description":"A name to semantically identify the key."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"An optional description of the keys purpose."},"validDays":{"type":"integer","title":"Validdays","description":"Number of days for which this key will be valid.","default":30},"scopes":{"items":{"$ref":"#/components/schemas/Scope"},"type":"array","title":"Scopes","description":"A list of scopes available to the key.","default":["read"]},"access":{"$ref":"#/components/schemas/Access","description":"Access type for the API key","default":"personal"},"applicationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applicationid","description":"Application ID accessed by the API key"},"id":{"type":"string","title":"Id","description":"Unique identifier for the key that also serves as the access token."},"createdOn":{"type":"string","format":"date-time","title":"Createdon","description":"The date and time the key was created."},"expiresOn":{"type":"string","format":"date-time","title":"Expireson","description":"The date at which this key is no longer valid."},"ownerId":{"type":"string","title":"Ownerid","description":"The unique ID of the user who generated the key."}},"type":"object","required":["name","id","ownerId"],"title":"Key","description":"Represents an API key used to authenticate users accessing the API programmatically"},"LineString":{"properties":{"type":{"type":"string","const":"LineString","title":"Type","default":"LineString"},"coordinates":{"items":{"$ref":"#/components/schemas/Position"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"LineString"},"ListApplicationsResponse":{"properties":{"currentPage":{"type":"integer","title":"Currentpage","description":"The current page number."},"pageSize":{"type":"integer","title":"Pagesize","description":"The number of resources per page."},"totalItems":{"type":"integer","title":"Totalitems","description":"The total number of resources."},"applications":{"items":{"$ref":"#/components/schemas/Application"},"type":"array","title":"Applications","description":"A list of applications."}},"type":"object","required":["currentPage","pageSize","totalItems","applications"],"title":"ListApplicationsResponse","description":"Paginated response for listing applications."},"ListDomainResponse":{"properties":{"currentPage":{"type":"integer","title":"Currentpage","description":"The current page number."},"pageSize":{"type":"integer","title":"Pagesize","description":"The number of resources per page."},"totalItems":{"type":"integer","title":"Totalitems","description":"The total number of resources."},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"type":"array","title":"Domains","description":"A list of domain resources."}},"type":"object","required":["currentPage","pageSize","totalItems","domains"],"title":"ListDomainResponse","description":"Paginated response for listing domain resources."},"ListKeysResponse":{"properties":{"currentPage":{"type":"integer","title":"Currentpage","description":"The current page number."},"pageSize":{"type":"integer","title":"Pagesize","description":"The number of resources per page."},"totalItems":{"type":"integer","title":"Totalitems","description":"The total number of resources."},"keys":{"items":{"$ref":"#/components/schemas/Key"},"type":"array","title":"Keys","description":"A list of API keys."}},"type":"object","required":["currentPage","pageSize","totalItems","keys"],"title":"ListKeysResponse","description":"Paginated response for listing API keys."},"MetaCanopyHeightMapSource":{"properties":{"source":{"type":"string","const":"Meta2024","title":"Source"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citation"}},"type":"object","required":["source"],"title":"MetaCanopyHeightMapSource"},"Modifier":{"type":"string","enum":["multiply","divide","add","subtract","replace"],"title":"Modifier"},"MultiLineString":{"properties":{"type":{"type":"string","const":"MultiLineString","title":"Type","default":"MultiLineString"},"coordinates":{"items":{"items":{"$ref":"#/components/schemas/Position"},"type":"array"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"MultiLineString"},"MultiPoint":{"properties":{"type":{"type":"string","const":"MultiPoint","title":"Type","default":"MultiPoint"},"coordinates":{"items":{"$ref":"#/components/schemas/Position"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"MultiPoint"},"MultiPolygon":{"properties":{"type":{"type":"string","const":"MultiPolygon","title":"Type","default":"MultiPolygon"},"coordinates":{"items":{"items":{"items":{"$ref":"#/components/schemas/Position"},"type":"array"},"type":"array"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"MultiPolygon"},"Operator":{"type":"string","enum":["eq","ne","gt","lt","ge","le"],"title":"Operator"},"Point":{"properties":{"type":{"type":"string","const":"Point","title":"Type","default":"Point"},"coordinates":{"$ref":"#/components/schemas/Position"}},"type":"object","required":["coordinates"],"title":"Point"},"Polygon":{"properties":{"type":{"type":"string","const":"Polygon","title":"Type","default":"Polygon"},"coordinates":{"items":{"items":{"$ref":"#/components/schemas/Position"},"type":"array"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"Polygon"},"Position":{"items":{"type":"number"},"type":"array","maxItems":3,"minItems":2,"title":"Position"},"ProcessingError":{"properties":{"code":{"type":"string","title":"Code","description":"A unique error code identifying the type of error that occurred."},"message":{"type":"string","title":"Message","description":"A user-friendly error message describing what went wrong."},"details":{"type":"string","title":"Details","description":"Technical details about the error for debugging purposes."},"suggestions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestions","description":"Actionable suggestions for resolving the error."}},"type":"object","required":["code","message","details"],"title":"ProcessingError","description":"Structured error information for user feedback, matching the uploader service error format."},"RoadFeature":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/RoadFeatureSource"},"type":"array","title":"Sources","description":"List of sources of road features"},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","required":["sources"],"title":"RoadFeature"},"RoadFeatureSource":{"type":"string","enum":["OSM"],"title":"RoadFeatureSource"},"Scope":{"type":"string","enum":["read","write"],"title":"Scope","description":"Enumerates the available scopes or permissions attached to an API key."},"SurfaceGrid":{"properties":{"attributes":{"anyOf":[{"items":{"$ref":"#/components/schemas/SurfaceGridAttribute"},"type":"array"},{"type":"null"}],"title":"Attributes"},"fuelLoad":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40FuelLoadSource"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridFuelLoadSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40FuelLoadSource","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Fuelload"},"fuelDepth":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Source"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridFuelDepthSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40Source","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Fueldepth"},"fuelMoisture":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridUniformValue"},{"$ref":"#/components/schemas/SurfaceGridUniformValueBySizeClass"}],"title":"SurfaceGridFuelMoistureSource","discriminator":{"propertyName":"source","mapping":{"uniform":"#/components/schemas/SurfaceGridUniformValue","uniformBySizeClass":"#/components/schemas/SurfaceGridUniformValueBySizeClass"}}},{"type":"null"}],"title":"Fuelmoisture"},"SAVR":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40SAVRSource"},{"$ref":"#/components/schemas/SurfaceGridUniformValue"}],"title":"SurfaceGridSAVRSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40SAVRSource","uniform":"#/components/schemas/SurfaceGridUniformValue"}}},{"type":"null"}],"title":"Savr"},"FBFM":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Source"},{"$ref":"#/components/schemas/SurfaceGridUniformFBFM40Value"}],"title":"SurfaceGridFBFMSource","discriminator":{"propertyName":"source","mapping":{"LANDFIRE":"#/components/schemas/SurfaceGridLandfireFBFM40Source","uniform":"#/components/schemas/SurfaceGridUniformFBFM40Value"}}},{"type":"null"}],"title":"Fbfm"},"modifications":{"items":{"$ref":"#/components/schemas/SurfaceGridModification"},"type":"array","maxItems":1000,"title":"ListSurfaceGridModifications","description":"List of modifications to apply to the surface grid","default":[]},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","title":"SurfaceGrid"},"SurfaceGridAttribute":{"type":"string","enum":["fuelLoad","fuelDepth","fuelMoisture","SAVR","FBFM"],"title":"SurfaceGridAttribute"},"SurfaceGridInterpolationMethod":{"type":"string","enum":["nearest","linear","cubic","zipper"],"title":"SurfaceGridInterpolationMethod"},"SurfaceGridLandfireFBFM40FuelLoadSource":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"product":{"type":"string","const":"FBFM40","title":"Product","default":"FBFM40"},"version":{"type":"string","const":"2022","title":"Version","description":"Version of the LANDFIRE data to use for the surface grid attribute.","default":"2022"},"interpolationMethod":{"$ref":"#/components/schemas/SurfaceGridInterpolationMethod","description":"Interpolation method to use when resampling the LANDFIRE data to the desired surface grid resolution.","default":"nearest"},"removeNonBurnable":{"anyOf":[{"items":{"type":"string","enum":["NB1","NB2","NB3","NB8","NB9"]},"type":"array"},{"type":"null"}],"title":"Removenonburnable","description":"List of non-burnable fuel model codes to remove from the surface grid attribute. Nonburnable blocks are replaced by burnable block by applying a majority filter to the grid. This feature is especially useful when used with the featureMasks field for replacing coarse resolution 30m data with high resolution road, water, and building polygons from other data sources such as OSM."},"curingLiveHerbaceous":{"type":"number","minimum":0.0,"title":"Curingliveherbaceous","description":"Proportion of live herbaceous fuel that is cured.","default":0.25},"curingLiveWoody":{"type":"number","minimum":0.0,"title":"Curinglivewoody","description":"Proportion of live woody fuel that is cured.","default":0.1},"groups":{"anyOf":[{"items":{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Group"},"type":"array","minItems":1},{"type":"null"}],"title":"Groups","description":"List of FBFM40 size class groups to include in the surface grid attribute. Must include at least one group.","default":["oneHour","tenHour","hundredHour","liveHerbaceous","liveWoody"]}},"type":"object","title":"SurfaceGridLandfireFBFM40FuelLoadSource"},"SurfaceGridLandfireFBFM40Group":{"type":"string","enum":["oneHour","tenHour","hundredHour","liveHerbaceous","liveWoody"],"title":"SurfaceGridLandfireFBFM40Group","description":"The size class groups available for the FBFM40 fuel model."},"SurfaceGridLandfireFBFM40SAVRSource":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"product":{"type":"string","const":"FBFM40","title":"Product","default":"FBFM40"},"version":{"type":"string","const":"2022","title":"Version","description":"Version of the LANDFIRE data to use for the surface grid attribute.","default":"2022"},"interpolationMethod":{"$ref":"#/components/schemas/SurfaceGridInterpolationMethod","description":"Interpolation method to use when resampling the LANDFIRE data to the desired surface grid resolution.","default":"nearest"},"removeNonBurnable":{"anyOf":[{"items":{"type":"string","enum":["NB1","NB2","NB3","NB8","NB9"]},"type":"array"},{"type":"null"}],"title":"Removenonburnable","description":"List of non-burnable fuel model codes to remove from the surface grid attribute. Nonburnable blocks are replaced by burnable block by applying a majority filter to the grid. This feature is especially useful when used with the featureMasks field for replacing coarse resolution 30m data with high resolution road, water, and building polygons from other data sources such as OSM."},"groups":{"anyOf":[{"items":{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Group"},"type":"array","minItems":1},{"type":"null"}],"title":"Groups","description":"List of FBFM40 size class groups to include in the surface grid attribute. Must include at least one group."}},"type":"object","title":"SurfaceGridLandfireFBFM40SAVRSource"},"SurfaceGridLandfireFBFM40Source":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"product":{"type":"string","const":"FBFM40","title":"Product","default":"FBFM40"},"version":{"type":"string","const":"2022","title":"Version","description":"Version of the LANDFIRE data to use for the surface grid attribute.","default":"2022"},"interpolationMethod":{"$ref":"#/components/schemas/SurfaceGridInterpolationMethod","description":"Interpolation method to use when resampling the LANDFIRE data to the desired surface grid resolution.","default":"nearest"},"removeNonBurnable":{"anyOf":[{"items":{"type":"string","enum":["NB1","NB2","NB3","NB8","NB9"]},"type":"array"},{"type":"null"}],"title":"Removenonburnable","description":"List of non-burnable fuel model codes to remove from the surface grid attribute. Nonburnable blocks are replaced by burnable block by applying a majority filter to the grid. This feature is especially useful when used with the featureMasks field for replacing coarse resolution 30m data with high resolution road, water, and building polygons from other data sources such as OSM."}},"type":"object","title":"SurfaceGridLandfireFBFM40Source"},"SurfaceGridModification":{"properties":{"conditions":{"items":{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridModificationFBFMCondition"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelLoadCondition"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelHeightCondition"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelMoistureCondition"}],"title":"SurfaceGridModificationCondition","description":"The conditions for the surface grid modification.","discriminator":{"propertyName":"attribute","mapping":{"FBFM":"#/components/schemas/SurfaceGridModificationFBFMCondition","fuelDepth":"#/components/schemas/SurfaceGridModificationFuelHeightCondition","fuelLoad":"#/components/schemas/SurfaceGridModificationFuelLoadCondition","fuelMoisture":"#/components/schemas/SurfaceGridModificationFuelMoistureCondition"}}},"type":"array","title":"ListSurfaceGridModificationConditions","description":"The conditions for the surface grid modification."},"actions":{"items":{"oneOf":[{"$ref":"#/components/schemas/SurfaceGridModificationFBFMAction"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelLoadAction"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelHeightAction"},{"$ref":"#/components/schemas/SurfaceGridModificationFuelMoistureAction"}],"title":"SurfaceGridModificationAction","description":"The actions for the surface grid modification.","discriminator":{"propertyName":"attribute","mapping":{"FBFM":"#/components/schemas/SurfaceGridModificationFBFMAction","fuelDepth":"#/components/schemas/SurfaceGridModificationFuelHeightAction","fuelLoad":"#/components/schemas/SurfaceGridModificationFuelLoadAction","fuelMoisture":"#/components/schemas/SurfaceGridModificationFuelMoistureAction"}}},"type":"array","minItems":1,"title":"ListSurfaceGridModificationActions","description":"The actions for the surface grid modification."}},"type":"object","required":["conditions","actions"],"title":"SurfaceGridModification"},"SurfaceGridModificationFBFMAction":{"properties":{"attribute":{"type":"string","const":"FBFM","title":"Attribute"},"modifier":{"type":"string","const":"replace","title":"Modifier"},"value":{"$ref":"#/components/schemas/FBFM40"}},"type":"object","required":["attribute","modifier","value"],"title":"SurfaceGridModificationFBFMAction"},"SurfaceGridModificationFBFMCondition":{"properties":{"attribute":{"type":"string","const":"FBFM","title":"Attribute"},"operator":{"type":"string","const":"eq","title":"Operator"},"value":{"$ref":"#/components/schemas/FBFM40"}},"type":"object","required":["attribute","operator","value"],"title":"SurfaceGridModificationFBFMCondition"},"SurfaceGridModificationFuelHeightAction":{"properties":{"attribute":{"type":"string","const":"fuelDepth","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"SurfaceGridModificationFuelHeightAction"},"SurfaceGridModificationFuelHeightCondition":{"properties":{"attribute":{"type":"string","const":"fuelDepth","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"SurfaceGridModificationFuelHeightCondition"},"SurfaceGridModificationFuelLoadAction":{"properties":{"attribute":{"type":"string","const":"fuelLoad","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"SurfaceGridModificationFuelLoadAction"},"SurfaceGridModificationFuelLoadCondition":{"properties":{"attribute":{"type":"string","const":"fuelLoad","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"SurfaceGridModificationFuelLoadCondition"},"SurfaceGridModificationFuelMoistureAction":{"properties":{"attribute":{"type":"string","const":"fuelMoisture","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"SurfaceGridModificationFuelMoistureAction"},"SurfaceGridModificationFuelMoistureCondition":{"properties":{"attribute":{"type":"string","const":"fuelMoisture","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"SurfaceGridModificationFuelMoistureCondition"},"SurfaceGridUniformFBFM40Value":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"uniform","title":"Source","default":"uniform"},"value":{"$ref":"#/components/schemas/FBFM40"}},"type":"object","required":["value"],"title":"SurfaceGridUniformFBFM40Value"},"SurfaceGridUniformValue":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"uniform","title":"Source","default":"uniform"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["value"],"title":"SurfaceGridUniformValue"},"SurfaceGridUniformValueBySizeClass":{"properties":{"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of feature masks to apply to the surface grid attribute","default":[]},"source":{"type":"string","const":"uniformBySizeClass","title":"Source","default":"uniformBySizeClass"},"oneHour":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Onehour"},"tenHour":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Tenhour"},"hundredHour":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Hundredhour"},"liveHerbaceous":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Liveherbaceous"},"liveWoody":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Livewoody"},"groups":{"anyOf":[{"items":{"$ref":"#/components/schemas/SurfaceGridLandfireFBFM40Group"},"type":"array","minItems":1},{"type":"null"}],"title":"Groups","description":"List of size class groups to include in the surface grid attribute. Must include at least one group."}},"type":"object","title":"SurfaceGridUniformValueBySizeClass"},"TopographyGrid":{"properties":{"attributes":{"anyOf":[{"items":{"$ref":"#/components/schemas/TopographyGridAttribute"},"type":"array"},{"type":"null"}],"title":"Attributes"},"elevation":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSource"},{"$ref":"#/components/schemas/TopographyGridLandfireSource"},{"$ref":"#/components/schemas/TopographyGridUniformValue"}],"title":"TopographyGridElevationSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSource","LANDFIRE":"#/components/schemas/TopographyGridLandfireSource","uniform":"#/components/schemas/TopographyGridUniformValue"}}},{"type":"null"}],"title":"Elevation"},"aspect":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSourceAspect"},{"$ref":"#/components/schemas/TopographyGridLandfireSourceAspect"}],"title":"TopographyGridAspectSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSourceAspect","LANDFIRE":"#/components/schemas/TopographyGridLandfireSourceAspect"}}},{"type":"null"}],"title":"Aspect"},"slope":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TopographyGrid3DEPSource"},{"$ref":"#/components/schemas/TopographyGridLandfireSource"}],"title":"TopographyGridSlopeSource","discriminator":{"propertyName":"source","mapping":{"3DEP":"#/components/schemas/TopographyGrid3DEPSource","LANDFIRE":"#/components/schemas/TopographyGridLandfireSource"}}},{"type":"null"}],"title":"Slope"},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","title":"TopographyGrid"},"TopographyGrid3DEPSource":{"properties":{"source":{"type":"string","const":"3DEP","title":"Source","default":"3DEP"},"interpolationMethod":{"type":"string","enum":["nearest","linear","cubic"],"title":"Interpolationmethod","default":"linear"}},"type":"object","title":"TopographyGrid3DEPSource"},"TopographyGrid3DEPSourceAspect":{"properties":{"source":{"type":"string","const":"3DEP","title":"Source","default":"3DEP"},"interpolationMethod":{"type":"string","const":"nearest","title":"Interpolationmethod","default":"nearest"}},"type":"object","title":"TopographyGrid3DEPSourceAspect"},"TopographyGridAttribute":{"type":"string","enum":["elevation","slope","aspect"],"title":"TopographyGridAttribute"},"TopographyGridInterpolationMethod":{"type":"string","enum":["nearest","linear","cubic","zipper"],"title":"TopographyGridInterpolationMethod"},"TopographyGridLandfireSource":{"properties":{"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"version":{"type":"string","const":"2020","title":"Version","default":"2020"},"interpolationMethod":{"$ref":"#/components/schemas/TopographyGridInterpolationMethod","default":"linear"}},"type":"object","title":"TopographyGridLandfireSource"},"TopographyGridLandfireSourceAspect":{"properties":{"source":{"type":"string","const":"LANDFIRE","title":"Source","default":"LANDFIRE"},"version":{"type":"string","const":"2020","title":"Version","default":"2020"},"interpolationMethod":{"type":"string","const":"nearest","title":"Interpolationmethod","default":"nearest"}},"type":"object","title":"TopographyGridLandfireSourceAspect"},"TopographyGridUniformValue":{"properties":{"source":{"type":"string","const":"uniform","title":"Source","default":"uniform"},"value":{"type":"number","title":"Value"}},"type":"object","required":["value"],"title":"TopographyGridUniformValue"},"TreeGrid":{"properties":{"attributes":{"items":{"$ref":"#/components/schemas/TreeGridAttribute"},"type":"array","title":"Attributes","description":"List of attributes to include in the tree grid. Each attribute is a separate layer in the grid. Attributes present in the list will be assigned default values unless an additional field is provided.","default":["bulkDensity","fuelMoisture"]},"bulkDensity":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridBulkDensitySource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Bulkdensity"},"fuelMoisture":{"anyOf":[{"$ref":"#/components/schemas/TreeGridUniformValue"},{"type":"null"}]},"SPCD":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridSPCDSource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Spcd"},"SAVR":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TreeGridInventorySource"},{"$ref":"#/components/schemas/TreeGridUniformValue"}],"title":"TreeGridSAVRSource","discriminator":{"propertyName":"source","mapping":{"TreeInventory":"#/components/schemas/TreeGridInventorySource","uniform":"#/components/schemas/TreeGridUniformValue"}}},{"type":"null"}],"title":"Savr"},"status":{"$ref":"#/components/schemas/JobStatus","default":"pending"},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"},"treeInventoryChecksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Treeinventorychecksum"}},"type":"object","title":"TreeGrid"},"TreeGridAttribute":{"type":"string","enum":["bulkDensity","fuelMoisture","SPCD","SAVR"],"title":"TreeGridAttribute","description":"The attributes that can be used to generate a tree grid."},"TreeGridInventorySource":{"properties":{"source":{"type":"string","const":"TreeInventory","title":"Source","default":"TreeInventory"}},"type":"object","title":"TreeGridInventorySource"},"TreeGridUniformValue":{"properties":{"source":{"type":"string","const":"uniform","title":"Source","default":"uniform"},"value":{"type":"number","title":"Value"}},"type":"object","required":["value"],"title":"TreeGridUniformValue"},"TreeInventory":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/TreeInventorySource"},"type":"array","title":"Sources"},"TreeMap":{"anyOf":[{"$ref":"#/components/schemas/TreeMapSource"},{"type":"null"}]},"modifications":{"items":{"$ref":"#/components/schemas/TreeInventoryModification"},"type":"array","maxItems":1000,"title":"ListTreeInventoryModifications","description":"List of modifications to apply to the tree inventory data","default":[]},"treatments":{"items":{"oneOf":[{"$ref":"#/components/schemas/TreeInventoryTreatmentDirectionalThinning"},{"$ref":"#/components/schemas/TreeInventoryTreatmentProportionalThinning"}],"title":"TreeInventoryTreatment","description":"A treatment to apply to the tree inventory data","discriminator":{"propertyName":"method","mapping":{"directionalThinning":"#/components/schemas/TreeInventoryTreatmentDirectionalThinning","proportionalThinning":"#/components/schemas/TreeInventoryTreatmentProportionalThinning"}}},"type":"array","maxItems":1000,"title":"ListTreeInventoryTreatments","description":"List of silvicultural treatments to apply.","default":[]},"featureMasks":{"items":{"$ref":"#/components/schemas/FeatureType"},"type":"array","title":"Featuremasks","description":"List of Features to mask tree inventory data. This has the effect of removing trees that intersect with the feature.","default":[]},"status":{"$ref":"#/components/schemas/JobStatus","default":"pending"},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"},"file":{"anyOf":[{"$ref":"#/components/schemas/UploadResponse"},{"type":"null"}]}},"type":"object","required":["sources"],"title":"TreeInventory"},"TreeInventoryModification":{"properties":{"conditions":{"items":{"oneOf":[{"$ref":"#/components/schemas/TreeInventoryModificationSPCDCondition"},{"$ref":"#/components/schemas/TreeInventoryModificationHTCondition"},{"$ref":"#/components/schemas/TreeInventoryModificationDIACondition"},{"$ref":"#/components/schemas/TreeInventoryModificationCRCondition"}],"title":"TreeInventoryModificationCondition","description":"The conditions for the tree inventory modification.","discriminator":{"propertyName":"attribute","mapping":{"CR":"#/components/schemas/TreeInventoryModificationCRCondition","DIA":"#/components/schemas/TreeInventoryModificationDIACondition","HT":"#/components/schemas/TreeInventoryModificationHTCondition","SPCD":"#/components/schemas/TreeInventoryModificationSPCDCondition"}}},"type":"array","title":"ListTreeInventoryModificationConditions","description":"The conditions for the tree inventory modification."},"actions":{"items":{"oneOf":[{"$ref":"#/components/schemas/TreeInventoryModificationSPCDAction"},{"$ref":"#/components/schemas/TreeInventoryModificationHTAction"},{"$ref":"#/components/schemas/TreeInventoryModificationDIAAction"},{"$ref":"#/components/schemas/TreeInventoryModificationCRAction"},{"$ref":"#/components/schemas/TreeInventoryModificationRemoveAction"}],"title":"TreeInventoryModificationAction","description":"The actions for the tree inventory modification.","discriminator":{"propertyName":"attribute","mapping":{"CR":"#/components/schemas/TreeInventoryModificationCRAction","DIA":"#/components/schemas/TreeInventoryModificationDIAAction","HT":"#/components/schemas/TreeInventoryModificationHTAction","SPCD":"#/components/schemas/TreeInventoryModificationSPCDAction","all":"#/components/schemas/TreeInventoryModificationRemoveAction"}}},"type":"array","minItems":1,"title":"ListTreeInventoryModificationActions","description":"The actions for the tree inventory modification."}},"type":"object","required":["conditions","actions"],"title":"TreeInventoryModification"},"TreeInventoryModificationCRAction":{"properties":{"attribute":{"type":"string","const":"CR","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"TreeInventoryModificationCRAction"},"TreeInventoryModificationCRCondition":{"properties":{"attribute":{"type":"string","const":"CR","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"TreeInventoryModificationCRCondition"},"TreeInventoryModificationDIAAction":{"properties":{"attribute":{"type":"string","const":"DIA","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"TreeInventoryModificationDIAAction"},"TreeInventoryModificationDIACondition":{"properties":{"attribute":{"type":"string","const":"DIA","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"TreeInventoryModificationDIACondition"},"TreeInventoryModificationHTAction":{"properties":{"attribute":{"type":"string","const":"HT","title":"Attribute"},"modifier":{"$ref":"#/components/schemas/Modifier"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"TreeInventoryModificationHTAction"},"TreeInventoryModificationHTCondition":{"properties":{"attribute":{"type":"string","const":"HT","title":"Attribute"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"number","minimum":0.0,"title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"TreeInventoryModificationHTCondition"},"TreeInventoryModificationRemoveAction":{"properties":{"attribute":{"type":"string","const":"all","title":"Attribute"},"modifier":{"type":"string","const":"remove","title":"Modifier","default":"remove"}},"type":"object","required":["attribute"],"title":"TreeInventoryModificationRemoveAction"},"TreeInventoryModificationSPCDAction":{"properties":{"attribute":{"type":"string","const":"SPCD","title":"Attribute"},"modifier":{"type":"string","const":"replace","title":"Modifier"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["attribute","modifier","value"],"title":"TreeInventoryModificationSPCDAction"},"TreeInventoryModificationSPCDCondition":{"properties":{"attribute":{"type":"string","const":"SPCD","title":"Attribute"},"operator":{"type":"string","const":"eq","title":"Operator"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["attribute","operator","value"],"title":"TreeInventoryModificationSPCDCondition"},"TreeInventorySource":{"type":"string","enum":["TreeMap","file"],"title":"TreeInventorySource"},"TreeInventoryTreatmentDirectionalThinning":{"properties":{"method":{"type":"string","const":"directionalThinning","title":"Method"},"direction":{"type":"string","enum":["above","below"],"title":"Direction"},"targetMetric":{"type":"string","enum":["diameter","basalArea"],"title":"Targetmetric"},"targetValue":{"type":"number","minimum":0.0,"title":"Targetvalue"}},"type":"object","required":["method","direction","targetMetric","targetValue"],"title":"TreeInventoryTreatmentDirectionalThinning"},"TreeInventoryTreatmentProportionalThinning":{"properties":{"method":{"type":"string","const":"proportionalThinning","title":"Method"},"targetMetric":{"type":"string","const":"basalArea","title":"Targetmetric"},"targetValue":{"type":"number","minimum":0.0,"title":"Targetvalue"}},"type":"object","required":["method","targetMetric","targetValue"],"title":"TreeInventoryTreatmentProportionalThinning"},"TreeMapSource":{"properties":{"version":{"$ref":"#/components/schemas/TreeMapVersion","default":"2022"},"seed":{"type":"integer","title":"Seed"},"canopyHeightMapConfiguration":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/MetaCanopyHeightMapSource"}],"discriminator":{"propertyName":"source","mapping":{"Meta2024":"#/components/schemas/MetaCanopyHeightMapSource"}}},{"type":"null"}],"title":"Canopyheightmapconfiguration","description":"Optional canopy height map configuration argument to use with the TreeMap data source."}},"type":"object","title":"TreeMapSource"},"TreeMapVersion":{"type":"string","enum":["2014","2016","2020","2022"],"title":"TreeMapVersion"},"UpdateDomainRequest":{"properties":{"name":{"type":"string","title":"Name","description":"The name of the domain."},"description":{"type":"string","title":"Description","description":"A brief description of the domain."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"A list of tags associated with the domain."}},"type":"object","title":"UpdateDomainRequest","description":"Request body for updating a domain resource."},"UploadResponse":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Information about the current step in the upload process."},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method","description":"The HTTP method used to make the upload request."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"The signed URL used to make the request."},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers","description":"The HTTP headers that need to be included with the PUT request."},"curl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Curl","description":"A cURL command that can be used to perform the upload."},"error":{"anyOf":[{"$ref":"#/components/schemas/ProcessingError"},{"type":"null"}],"description":"Detailed error information if the upload or processing failed."}},"type":"object","required":["message"],"title":"UploadResponse","description":"Upload response model to provide all necessary information and updates for file upload process."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WaterFeature":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/WaterFeatureSource"},"type":"array","title":"Sources","description":"List of sources of road features"},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]},"createdOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdon"},"modifiedOn":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modifiedon"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"}},"type":"object","required":["sources"],"title":"WaterFeature"},"WaterFeatureSource":{"type":"string","enum":["OSM"],"title":"WaterFeatureSource"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"api-key"},"HTTPBearer":{"type":"http","scheme":"bearer"}}}} \ No newline at end of file diff --git a/fastfuels_sdk/client_library/models/tree_map_version.py b/fastfuels_sdk/client_library/models/tree_map_version.py index 782097b..91722ea 100644 --- a/fastfuels_sdk/client_library/models/tree_map_version.py +++ b/fastfuels_sdk/client_library/models/tree_map_version.py @@ -28,6 +28,8 @@ class TreeMapVersion(str, Enum): """ ENUM_2014 = '2014' ENUM_2016 = '2016' + ENUM_2020 = '2020' + ENUM_2022 = '2022' @classmethod def from_json(cls, json_str: str) -> Self: diff --git a/fastfuels_sdk/inventories.py b/fastfuels_sdk/inventories.py index b4fe562..a6aae29 100644 --- a/fastfuels_sdk/inventories.py +++ b/fastfuels_sdk/inventories.py @@ -144,7 +144,7 @@ def create_tree_inventory( tree_map : TreeMapSource or dict, optional Configuration for TreeMap source if being used. Can be provided as a dict with: - - version: "2014" or "2016" (default: "2016") + - version: "2014", "2016", "2020", or "2022" (default: "2022") - seed: Integer for reproducible generation (optional) modifications : dict or list[dict], optional @@ -267,7 +267,7 @@ def create_tree_inventory( def create_tree_inventory_from_treemap( self, - version: str = "2016", + version: str = "2022", seed: int = None, canopy_height_map_source: Optional[str] = None, modifications: Optional[dict | list[dict]] = None, @@ -297,8 +297,10 @@ def create_tree_inventory_from_treemap( ---------- version : str, optional The TreeMap version to use. Available versions: - - "2016" (default) - More recent dataset, recommended for most use cases - - "2014" - Earlier dataset, use if you need historical comparison + - "2022" (default) + - "2020" + - "2016" + - "2014" seed : int, optional Random seed for reproducible tree generation. When provided, generates From c362407bbedd77d9cb005669250eae2806ebda72 Mon Sep 17 00:00:00 2001 From: Anthony Marcozzi Date: Tue, 26 Aug 2025 09:46:27 -0600 Subject: [PATCH 2/3] Update test cases to use 2022 as default TreeMap inventory year and extend version parameterization --- tests/test_inventories.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_inventories.py b/tests/test_inventories.py index 36e207e..f13f779 100644 --- a/tests/test_inventories.py +++ b/tests/test_inventories.py @@ -378,7 +378,7 @@ def assert_data_validity(tree_inventory, domain_id, version): def test_defaults(self, test_domain, test_inventories): """Test basic creation without in_place""" tree_inventory = test_inventories.create_tree_inventory_from_treemap() - self.assert_data_validity(tree_inventory, test_domain.id, "2016") + self.assert_data_validity(tree_inventory, test_domain.id, "2022") # Check if the tree inventory is successfully added to the inventories updated_inventory = test_inventories.get() @@ -391,7 +391,7 @@ def test_defaults(self, test_domain, test_inventories): assert normalized_updated == normalized_tree - @pytest.mark.parametrize("version", ["2014", "2016"]) + @pytest.mark.parametrize("version", ["2014", "2016", "2020", "2022"]) def test_versions(self, test_domain, test_inventories, version): """Test basic creation without in_place""" tree_inventory = test_inventories.create_tree_inventory_from_treemap( @@ -418,7 +418,7 @@ def test_canopy_height_map_source(self, test_domain, test_inventories, chm_sourc ) # Verify the inventory was created correctly - self.assert_data_validity(tree_inventory, test_domain.id, "2016") + self.assert_data_validity(tree_inventory, test_domain.id, "2022") if chm_source: assert tree_inventory.tree_map.canopy_height_map_configuration is not None assert ( @@ -439,7 +439,7 @@ def test_in_place_true(self, test_domain, test_inventories): ) # Verify the inventory was created correctly - self.assert_data_validity(tree_inventory, test_domain.id, "2016") + self.assert_data_validity(tree_inventory, test_domain.id, "2022") # Verify in_place update occurred assert test_inventories.tree is not None @@ -462,7 +462,7 @@ def test_in_place_false(self, test_domain, test_inventories): ) # Verify the inventory was created correctly - self.assert_data_validity(tree_inventory, test_domain.id, "2016") + self.assert_data_validity(tree_inventory, test_domain.id, "2022") # Verify in_place update did not occur assert test_inventories.tree is original_tree From edce231235bb30ba8ccff3d00180212c9b979ec0 Mon Sep 17 00:00:00 2001 From: Anthony Marcozzi Date: Tue, 26 Aug 2025 09:46:59 -0600 Subject: [PATCH 3/3] Mark `test_blue_mountain` to be skipped during CI pipelines --- tests/test_convienence.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_convienence.py b/tests/test_convienence.py index 5feb413..016c2b0 100644 --- a/tests/test_convienence.py +++ b/tests/test_convienence.py @@ -10,6 +10,7 @@ from fastfuels_sdk import export_roi_to_quicfire # External imports +import pytest import geopandas as gpd TEST_DIR = Path(__file__).parent @@ -17,6 +18,7 @@ TEST_TMP_DIR = TEST_DIR / "tmp" +@pytest.mark.skip(reason="Only run this test locally") def test_blue_mountain(): # Load the Blue Mountain ROI blue_mountain = gpd.read_file(TEST_DATA_DIR / "blue_mtn.geojson")