openapi: 3.1.0 info: title: oda description: '' license: name: '' version: 3.0.0 x-apievangelist-note: Harvested verbatim from https://api.geoinsight.ai/api?f=json on 2026-08-20. info.title is the vendor internal name "oda"; the service self-identifies at its root document as "OGC DGGS API" with attribution to GeoInsight (https://docs.geoinsight.ai). servers[] was absent in the published document and was added by API Evangelist from the fetch host; nothing else was altered. paths: /: get: tags: - root operationId: root_handler responses: '200': description: Get root /collections: get: tags: - Collections operationId: utoipa_doc responses: '200': description: Get Collections content: application/json: schema: $ref: '#/components/schemas/CollectionsResponse' text/html: schema: type: string /collections/{collection_id}: get: tags: - Collection ID operationId: collection_id_utoipa_doc parameters: - name: collection_id in: path description: Collection identifier required: true schema: type: string responses: '200': description: Get Collection ID content: application/json: schema: $ref: '#/components/schemas/CollectionIdResponse' text/html: schema: type: string /collections/{collection_id}/dggs: get: tags: - DGGS operationId: collection_id_utoipa_doc parameters: - name: collection_id in: path description: Collection identifier required: true schema: type: string responses: '200': description: Get collection_id DGGS's content: application/json: schema: $ref: '#/components/schemas/DggsResponse' text/html: schema: type: string /collections/{collection_id}/dggs/{dggrs_id}: get: tags: - DGGRS ID operationId: collection_id_dggrs_id_utoipa_doc parameters: - name: collection_id in: path description: Collection identifier required: true schema: type: string - name: dggrs_id in: path description: DGGRS_ID identifier required: true schema: type: string responses: '200': description: Get collection_id DGGRS content: application/json: schema: $ref: '#/components/schemas/DggrsIdResponse' text/html: schema: type: string /collections/{collection_id}/dggs/{dggrs_id}/zones: get: tags: - Zones operationId: collection_id_dggrs_id_utoipa_doc parameters: - name: collection_id in: path description: Collection identifier required: true schema: type: string - name: dggrs_id in: path description: DGGRS identifier required: true schema: type: string - name: refined-geometry in: query description: 'Densify zone geometry by interpolating additional points along edges. Default: true.' required: false schema: type: boolean responses: '200': description: Get ZONES content: application/json: schema: $ref: '#/components/schemas/ZonesResponse' text/html: schema: type: string application/geo+json: schema: type: string application/vnd.apache.parquet: schema: type: string application/vnd.geo+parquet: schema: type: string '422': description: Validation error content: application/json: schema: $ref: '#/components/schemas/ApiError' /collections/{collection_id}/dggs/{dggrs_id}/zones/{zone_id}: get: tags: - Zone ID operationId: collection_id_dggrs_id_zone_id_utoipa_doc parameters: - name: collection_id in: path description: Collection identifier required: true schema: type: string - name: dggrs_id in: path description: DGGRS identifier required: true schema: type: string - name: zone_id in: path description: Zone identifier required: true schema: type: string - name: refined-geometry in: query description: 'Densify zone geometry by interpolating additional points along edges. Default: true.' required: false schema: type: boolean responses: '200': description: Get ZONES content: application/json: schema: $ref: '#/components/schemas/ZoneIdResponse' text/html: schema: type: string application/geo+json: schema: type: string /collections/{collection_id}/dggs/{dggrs_id}/zones/{zone_id}/data: get: tags: - Data operationId: collection_id_dggrs_id_zone_id_data_utoipa_doc parameters: - name: collection_id in: path description: Collection identifier required: true schema: type: string - name: dggrs_id in: path description: DGGRS identifier required: true schema: type: string - name: zone_id in: path description: Zone identifier required: true schema: type: string - name: f in: query description: 'Response format. Accepted values: `json`, `dggs+json`, `geo+json`, `html`, `parquet`, `geoparquet`. Defaults to content negotiation via the `Accept` header.' required: false schema: type: string - name: zone-depth in: query description: Relative depth of child zones to aggregate. Accepts a single integer (e.g. `1`) or a comma-separated list (e.g. `1,2`). Defaults to the DGGRS-defined default depth. required: false schema: type: string - name: datetime in: query description: Temporal filter in RFC 3339 format. Accepts an instant (`2024-01-01T00:00:00Z`) or an interval (`2024-01-01/2025-01-01`). Open-ended intervals use `..` (e.g. `2024-01-01/..`). required: false schema: type: string - name: properties in: query description: Comma-separated list of queryable names to include in the response (e.g. `ndvi,evi`). Returns all queryables when omitted. required: false schema: type: string - name: exclude-properties in: query description: Comma-separated list of queryable names to exclude from the response. Applied after `properties`. required: false schema: type: string - name: refined-geometry in: query description: 'Densify zone geometry by interpolating additional points along edges. Relevant for geo+json and geoparquet formats. Default: false.' required: false schema: type: boolean - name: cog-url in: query description: URL of an arbitrary COG to query directly. Used on the /dggs/{dggrs_id}/zones/{zone_id}/data route (no collection). Bypasses collection lookup and caching. required: false schema: type: string - name: cog-stat in: query description: 'Comma-separated statistics for a cog-url query (e.g. mean,min,max). Accepted values: count, valid, min, max, mean, median. Defaults to mean.' required: false schema: type: string - name: cog-band in: query description: Comma-separated 1-based band indices to read (e.g. 1,2,3). Defaults to 1. required: false schema: type: string - name: cog-no-data-value in: query description: Override the COG no-data value. Pixels equal to this value are excluded from statistics. Applies to all raster sources (STAC, URL, direct COG). Overrides the collection-level default. required: false schema: type: number format: double - name: cog-sampling-factor in: query description: Sampling density multiplier relative to zone count. Higher values increase accuracy. Defaults to 8.0. required: false schema: type: number format: double - name: cog-all-touched in: query description: When true, include pixels whose boundaries are only touched by zone polygons. Defaults to false. required: false schema: type: boolean - name: stac-search-strategy in: query description: 'STAC search strategy: `single` (default), `latest`, or `mosaic`. `latest` takes the newest item with no intersection check; `single` takes the newest item individually meeting the intersection threshold; `mosaic` accumulates items newest-first until their combined footprint reaches the coverage target (requires a `datetime` range). Overrides the collection-level default.' required: false schema: type: string - name: intersection_percent in: query description: 'Intersection percentage (0–100) of the parent zone. For `single`: minimum that the chosen item alone must cover (`0` disables the check, default). For `mosaic`: total combined coverage target (unset = 100%). Ignored for `latest`. Overrides the collection-level default.' required: false schema: type: number format: double - name: cloud_cover_percent in: query description: Maximum `eo:cloud_cover` percentage (0–100) allowed for STAC items. Omit to disable the filter (default). Overrides the collection-level default. required: false schema: type: number format: double responses: '200': description: Get DATA content: application/vnd.ogc.dggs+json: schema: $ref: '#/components/schemas/DataResponse' application/json: schema: $ref: '#/components/schemas/DataResponse' application/geo+json: schema: type: string text/html: schema: type: string application/vnd.apache.parquet: schema: type: string application/vnd.geo+parquet: schema: type: string '422': description: Validation error content: application/json: schema: $ref: '#/components/schemas/ApiError' /collections/{collection_id}/items: get: tags: - Items operationId: items_utoipa_doc parameters: - name: collection_id in: path description: Collection identifier required: true schema: type: string - name: limit in: query description: Page size (default 10, max 1000) required: false schema: type: integer minimum: 0 - name: offset in: query description: 0-based row offset into the lake parquet; numberMatched - limit pages the tail of the data required: false schema: type: integer minimum: 0 - name: bbox in: query description: Spatial filter min_x,min_y,max_x,max_y (CRS84 lon/lat); rows whose geometry intersects the box. Uses bbox_* zonemap columns and/or ST_Intersects on the geometry column required: false schema: type: string - name: datetime in: query description: 'Temporal filter on the datetime column: RFC 3339 instant or interval (start/end, start/.., ../end)' required: false schema: type: string - name: properties in: query description: Comma-separated columns to keep (geometry is retained for geojson/geoparquet unless excluded explicitly) required: false schema: type: string - name: exclude-properties in: query description: Comma-separated columns to drop required: false schema: type: string - name: filter in: query description: CQL2 filter expression over the parquet columns, e.g. population > 10000 AND name LIKE 'A%' required: false schema: type: string - name: filter-lang in: query description: 'Language of filter: cql2-text (default) or cql2-json' required: false schema: type: string - name: f in: query description: 'Format: geojson (default, FeatureCollection), json (raw inspection view with files, columns and WKB previews), html (table view), parquet (page as a parquet file), geoparquet (page as GeoParquet)' required: false schema: type: string responses: '200': description: One page of the collection's raw lake parquet rows content: application/geo+json: schema: $ref: '#/components/schemas/FeatureCollectionResponse' application/json: schema: $ref: '#/components/schemas/RawItemsResponse' text/html: schema: type: string '400': description: Invalid collection id or parameters content: application/json: schema: $ref: '#/components/schemas/ApiError' '404': description: No parquet data in the lake for this collection content: application/json: schema: $ref: '#/components/schemas/ApiError' '406': description: Unsupported format (png, tiff) content: application/json: schema: $ref: '#/components/schemas/ApiError' /collections/{collection_id}/items/{feature_id}: get: tags: - Items operationId: item_id_utoipa_doc parameters: - name: collection_id in: path description: Collection identifier required: true schema: type: string - name: feature_id in: path description: 0-based row index in lake parquet glob scan order (within the filtered set when bbox/datetime are given); only stable while the lake prefix does not change required: true schema: type: integer minimum: 0 - name: bbox in: query description: Spatial filter min_x,min_y,max_x,max_y (CRS84 lon/lat) required: false schema: type: string - name: datetime in: query description: 'Temporal filter on the datetime column: RFC 3339 instant or interval' required: false schema: type: string - name: properties in: query description: Comma-separated columns to keep required: false schema: type: string - name: exclude-properties in: query description: Comma-separated columns to drop required: false schema: type: string - name: filter in: query description: CQL2 filter expression over the parquet columns required: false schema: type: string - name: filter-lang in: query description: 'Language of filter: cql2-text (default) or cql2-json' required: false schema: type: string - name: f in: query description: 'Format: geojson (default, Feature), json (raw row), html (property table), parquet / geoparquet (single-row file)' required: false schema: type: string responses: '200': description: A single raw lake parquet row content: application/geo+json: schema: $ref: '#/components/schemas/FeatureResponse' application/json: schema: $ref: '#/components/schemas/RawItemResponse' text/html: schema: type: string '400': description: Invalid collection id content: application/json: schema: $ref: '#/components/schemas/ApiError' '404': description: Collection has no lake data or feature_id is out of range content: application/json: schema: $ref: '#/components/schemas/ApiError' '406': description: Unsupported format (png, tiff) content: application/json: schema: $ref: '#/components/schemas/ApiError' /dggs: get: tags: - DGGS operationId: utoipa_doc responses: '200': description: Get DGGS's content: application/json: schema: $ref: '#/components/schemas/DggsResponse' text/html: schema: type: string /dggs/{dggrs_id}: get: tags: - DGGRS ID operationId: dggrs_id_utoipa_doc parameters: - name: dggrs_id in: path description: DGGRS_ID identifier required: true schema: type: string responses: '200': description: Get DGGRS_ID content: application/json: schema: $ref: '#/components/schemas/DggrsIdResponse' text/html: schema: type: string /dggs/{dggrs_id}/zones: get: tags: - Zones operationId: dggrs_id_utoipa_doc parameters: - name: dggrs_id in: path description: DGGRS identifier required: true schema: type: string - name: refined-geometry in: query description: 'Densify zone geometry by interpolating additional points along edges. Default: true.' required: false schema: type: boolean responses: '200': description: Get ZONES content: application/json: schema: $ref: '#/components/schemas/ZonesResponse' text/html: schema: type: string application/geo+json: schema: type: string application/vnd.apache.parquet: schema: type: string application/vnd.geo+parquet: schema: type: string '422': description: Validation error content: application/json: schema: $ref: '#/components/schemas/ApiError' /dggs/{dggrs_id}/zones/{zone_id}: get: tags: - Zone ID operationId: dggrs_id_zone_id_utoipa_doc parameters: - name: dggrs_id in: path description: DGGRS identifier required: true schema: type: string - name: zone_id in: path description: Zone identifier required: true schema: type: string - name: refined-geometry in: query description: 'Densify zone geometry by interpolating additional points along edges. Default: true.' required: false schema: type: boolean responses: '200': description: Get ZONES content: application/json: schema: $ref: '#/components/schemas/ZoneIdResponse' text/html: schema: type: string application/geo+json: schema: type: string components: schemas: ApiError: type: object description: API error response body for JSON error messages. required: - code - message properties: code: type: integer format: int32 description: HTTP status code example: 422 minimum: 0 hint: type: - string - 'null' description: Optional hint to help client fix the request example: Parameter `parent-zone-level` is required when `parent-zone` is provided message: type: string description: Fixed message describing the error example: Validation Failed redirect_location: type: - string - 'null' CollectionId: type: object required: - id - links properties: attribution: type: - string - 'null' crs: type: - array - 'null' items: type: string description: type: - string - 'null' extent: oneOf: - type: 'null' - $ref: '#/components/schemas/Extent' id: type: string item_type: type: - string - 'null' links: type: array items: $ref: '#/components/schemas/Link' title: type: - string - 'null' CollectionIdResponse: type: object required: - id - links properties: attribution: type: - string - 'null' crs: type: - array - 'null' items: type: string description: type: - string - 'null' extent: oneOf: - type: 'null' - $ref: '#/components/schemas/Extent' id: type: string item_type: type: - string - 'null' links: type: array items: $ref: '#/components/schemas/Link' title: type: - string - 'null' CollectionsResponse: type: object required: - links - collections properties: collections: type: array items: $ref: '#/components/schemas/CollectionId' links: type: array items: $ref: '#/components/schemas/Link' DataResponse: type: object required: - dggrs - zoneId - depths - links properties: defaultDepth: type: - integer - 'null' format: int32 depths: type: array items: type: integer format: int32 dggrs: type: string dimensions: type: - array - 'null' items: $ref: '#/components/schemas/Dimension' links: type: array items: $ref: '#/components/schemas/Link' schema: oneOf: - type: 'null' - $ref: '#/components/schemas/Schema' zoneId: type: string DggrsId: type: object required: - id - title - uri - links properties: id: type: string links: type: array items: $ref: '#/components/schemas/Link' title: type: string uri: type: string DggrsIdResponse: type: object required: - id - title - uri properties: crs: type: - array - 'null' items: type: string default_depth: type: - integer - 'null' format: int32 description: type: - string - 'null' id: type: string links: type: array items: $ref: '#/components/schemas/Link' max_refinement_level: type: - integer - 'null' format: int32 max_relative_depth: type: - integer - 'null' format: int32 title: type: string uri: type: string DggsResponse: type: object required: - links - dggrs properties: dggrs: type: array items: $ref: '#/components/schemas/DggrsId' links: type: array items: $ref: '#/components/schemas/Link' Dimension: type: object required: - name - grid - interval properties: definition: type: - string - 'null' grid: $ref: '#/components/schemas/Grid' interval: type: array items: oneOf: - type: 'null' - $ref: '#/components/schemas/NumStr' name: type: string unit: type: - string - 'null' unitLang: type: - string - 'null' Extent: type: object properties: spatial: oneOf: - type: 'null' - $ref: '#/components/schemas/Spatial' temporal: oneOf: - type: 'null' - $ref: '#/components/schemas/Temporal' FeatureCollectionResponse: type: object description: OGC API Features `getFeatures` response over the collection's lake parquet. required: - type - timeStamp - numberMatched - numberReturned - features - links properties: features: type: array items: $ref: '#/components/schemas/FeatureResponse' links: type: array items: $ref: '#/components/schemas/Link' numberMatched: type: integer format: int64 numberReturned: type: integer minimum: 0 timeStamp: type: string type: type: string FeatureResponse: type: object description: 'A single GeoJSON Feature read from the lake parquet. `id` is the 0-based row index in glob scan order (the raw parquet carries no guaranteed id column) — only stable while the lake prefix doesn''t change.' required: - type - id - geometry - properties properties: geometry: type: object id: type: integer minimum: 0 links: type: array items: $ref: '#/components/schemas/Link' properties: type: object type: type: string FileInfo: type: object description: One parquet file under the collection's lake data prefix with its row count. required: - file - rows properties: file: type: string rows: type: integer format: int64 Grid: type: object required: - cellsCount properties: boundCoordinates: type: - array - 'null' items: oneOf: - type: 'null' - $ref: '#/components/schemas/NumStr' cellsCount: type: integer format: int32 minimum: 0 coordinates: type: - array - 'null' items: $ref: '#/components/schemas/NumStr' firstCoordinate: oneOf: - type: 'null' - $ref: '#/components/schemas/NumStr' relativeBounds: type: - array - 'null' items: $ref: '#/components/schemas/NumStr' resolution: oneOf: - type: 'null' - $ref: '#/components/schemas/NumStr' Link: type: object required: - href - rel properties: href: type: string hreflang: type: - string - 'null' length: type: - integer - 'null' format: int64 rel: type: string title: type: - string - 'null' type: type: - string - 'null' LinkTemplate: type: object required: - rel - title - uriTemplate properties: rel: type: string title: type: string uriTemplate: type: string NumStr: oneOf: - type: object required: - U8 properties: U8: type: integer format: int32 minimum: 0 - type: object required: - String properties: String: type: string PropertyType: type: string enum: - array - boolean - integer - 'null' - number - object - string RawItemResponse: type: object description: Raw inspection view of a single row (`/items/{feature_id}?f=json`). required: - collection - source - numberMatched - feature_id - item - links properties: collection: type: string feature_id: type: integer minimum: 0 item: type: object links: type: array items: $ref: '#/components/schemas/Link' numberMatched: type: integer format: int64 source: type: string description: The `read_parquet` glob the row was read from. RawItemsResponse: type: object description: 'Raw inspection view (`f=json`): rows exactly as they sit in the lake parquet (geometry as a truncated WKB hex preview), plus the file list and row counts a local `SELECT * FROM read_parquet(''s3://…'')` would show.' required: - collection - source - numberMatched - numberReturned - limit - offset - files - columns - items - links properties: collection: type: string columns: type: array items: type: string files: type: array items: $ref: '#/components/schemas/FileInfo' items: type: array items: type: object limit: type: integer minimum: 0 links: type: array items: $ref: '#/components/schemas/Link' numberMatched: type: integer format: int64 numberReturned: type: integer minimum: 0 offset: type: integer minimum: 0 source: type: string description: The `read_parquet` glob the rows were read from. RootResponse: type: object required: - links properties: attribution: type: - string - 'null' description: type: - string - 'null' links: type: array items: $ref: '#/components/schemas/Link' title: type: - string - 'null' Schema: type: object required: - type - properties properties: properties: type: object additionalProperties: $ref: '#/components/schemas/SchemaProperty' propertyNames: type: string required: type: - array - 'null' items: type: string type: $ref: '#/components/schemas/SchemaType' SchemaProperty: type: object properties: contentMediaType: type: - string - 'null' description: type: - string - 'null' enum: type: - array - 'null' items: {} exclusiveMaximum: type: - integer - 'null' format: int32 minimum: 0 exclusiveMinimum: type: - integer - 'null' format: int32 minimum: 0 format: type: - string - 'null' maxItems: type: - integer - 'null' format: int32 minimum: 0 maximum: type: - integer - 'null' format: int32 minimum: 0 minItems: type: - integer - 'null' format: int32 minimum: 0 minimum: type: - integer - 'null' format: int32 minimum: 0 pattern: type: - string - 'null' title: type: - string - 'null' type: oneOf: - type: 'null' - $ref: '#/components/schemas/PropertyType' x-ogc-definition: type: - string - 'null' x-ogc-unit: type: - string - 'null' x-ogc-unitLang: type: - string - 'null' SchemaType: type: string enum: - object Spatial: type: object properties: bbox: type: - array - 'null' items: type: array items: type: number format: double crs: type: - string - 'null' Temporal: type: object properties: interval: type: - array - 'null' items: type: array items: type: string trs: type: - string - 'null' ValueItem: type: object properties: average: type: - number - 'null' format: double maximum: type: - number - 'null' format: double minimum: type: - number - 'null' format: double stdDev: type: - number - 'null' format: double ZoneIdResponse: type: object required: - id - links properties: areaMetersSquare: type: - number - 'null' format: double bbox: type: - array - 'null' items: type: number format: double description: '[min_lon, min_lat, max_lon, max_lat] per OGC DGGS API spec' centroid: type: - array - 'null' items: type: number format: double description: '[lon, lat] per OGC DGGS API spec' crs: type: - string - 'null' geometry: type: object id: type: string level: type: - integer - 'null' format: int32 minimum: 0 links: type: array items: $ref: '#/components/schemas/Link' shapeType: type: - string - 'null' statistics: type: - object - 'null' additionalProperties: $ref: '#/components/schemas/ValueItem' propertyNames: type: string temporalDurationSeconds: type: - number - 'null' format: double temporalInterval: type: - array - 'null' items: type: string volumeMetersCube: type: - number - 'null' format: double ZonesResponse: type: object required: - zones - links properties: linkTemplates: type: array items: $ref: '#/components/schemas/LinkTemplate' links: type: array items: $ref: '#/components/schemas/Link' returnedAreaMetersSquare: type: - number - 'null' format: double zones: type: array items: type: string servers: - url: https://api.geoinsight.ai description: GeoInsight OGC API - DGGS production endpoint