Skip to content
getgeolens.com

Update Dataset Metadata

PATCH
/datasets/{dataset_id}
curl --request PATCH \
--url https://example.com/datasets/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "summary": "Revised from the 2026 authoritative release.", "title": "Updated flood zones", "visibility": "public" }'

Update user-editable dataset metadata.

dataset_id
required
Dataset Id
string format: uuid
Media type application/json
DatasetMeta

Partial-update payload for dataset metadata.

The class name remains DatasetMeta for generated-SDK compatibility; new backend call sites use the DatasetMetaUpdate alias below.

object
title
Any of:
string
<= 500 characters
summary
Any of:
string
<= 5000 characters
visibility
Any of:
string
Allowed values: private restricted internal public
license
Any of:
string
<= 1000 characters
attribution
Any of:
string
<= 5000 characters
source_organization
Any of:
string
<= 1000 characters
data_vintage_start
Any of:
string format: date
data_vintage_end
Any of:
string format: date
lineage_summary
Any of:
string
<= 5000 characters
update_frequency
Any of:
string
<= 30 characters
usage_constraints
Any of:
string
<= 1000 characters
access_constraints
Any of:
string
<= 1000 characters
sensitivity_classification
Any of:
string
<= 20 characters
theme_category
Any of:
Array<string>
record_status
Any of:
string
<= 20 characters
owner_org
Any of:
string
<= 1000 characters
quality_statement
Any of:
string
<= 5000 characters
source_url
Any of:
string
<= 2000 characters
language
Any of:
string
<= 35 characters
is_dem
Any of:
boolean
tile_columns
Any of:
Array<string>
<= 100 items

Successful Response

Media type application/json
DatasetResponse
object
id
required
Id
string format: uuid
record_id
required
Record Id

Parent catalog record UUID

string format: uuid
table_name
required
Table Name

Internal PostGIS table name

string
title
required
Title
string
summary
required
Any of:
string
srid
Any of:
integer
geometry_type
Any of:
string
has_generic_geometry
Has Generic Geometry

True when the underlying column is generic GEOMETRY (created sketch datasets): the dataset accepts ANY geometry subtype on write regardless of the display geometry_type above. Computed on the detail endpoint only (fix #430 codex r18); list endpoints always report false.

boolean
is_3d
Any of:
boolean
n_dims
Any of:
integer
z_min
Any of:
number
z_max
Any of:
number
feature_count
required
Any of:
integer
extent_bbox
Any of:
Array<number>
column_info
Any of:
Array<object>
ColumnInfo

Describes a single column in a dataset’s attribute table.

object
name
required
Name
string
type
required
Type
string
semantic_role
Any of:
string
domain_type
Any of:
string
sample_values
Any of:
Array
stats
Any of:
object
key
additional properties
any
license
Any of:
string
attribution
Any of:
string
source_organization
Any of:
string
data_vintage_start
Any of:
string format: date
data_vintage_end
Any of:
string format: date
quality_detail
Any of:
QualityDetail

Automated quality assessment results.

object
overall
required
Overall
number
<= 100
metadata_completeness
required
Metadata Completeness
number
<= 100
geometry_validity
Any of:
number
<= 100
attribute_completeness
required
Attribute Completeness
number
<= 100
crs_defined
Any of:
number
<= 100
computed_at
Any of:
string format: date-time
source_format
Any of:
string
source_filename
required
Any of:
string
tile_columns
Any of:
Array<string>
original_srid
Any of:
integer
current_version
Current Version

Monotonic version counter

integer
default: 1
source_url
Any of:
string
<= 2000 characters
origin
Any of:
string
origin_uri
Any of:
string
<= 2000 characters
origin_ref
Any of:
object
key
additional properties
any
last_refreshed_at
Any of:
string format: date-time
last_checked_at
Any of:
string format: date-time
source_health
Source Health

Healthy, missing, inaccessible, or unknown. ‘unknown’ means never probed, or an origin kind with nothing to probe.

string
default: unknown
source_health_detail
Any of:
string
schema_drift_status
Schema Drift Status

None, drifted, or unknown. Set at refresh commit from the schema diff; ‘unknown’ until a refresh has run.

string
default: unknown
source_freshness
Source Freshness

Fresh, due, overdue, or unknown, computed from last_refreshed_at against the declared update_frequency: due past one declared period, overdue past two. ‘unknown’ when the origin cannot be refreshed at all (created), when no cadence is declared (asNeeded, irregular, notPlanned, unknown), or when nothing has been refreshed yet. Advisory only; never blocks an operation. Distinct from the quality score’s own freshness, which measures quality_detail.computed_at rather than the source.

string
default: unknown
quality_statement
Any of:
string
visibility
required
Visibility

Access level: private, restricted, internal, public

string
created_by
required
Any of:
string format: uuid
created_by_display
required
Created By Display
string
created_at
required
Created At
string format: date-time
updated_at
required
Updated At
string format: date-time
last_edited_by_display
Any of:
string
last_edited_at
Any of:
string format: date-time
collections
Any of:
Array<object>
CollectionRef

Minimal reference to a collection a dataset belongs to.

object
id
required
Id
string format: uuid
name
required
Name
string
record_status
Record Status

Lifecycle status. Deliberately not pinned to an enum: the values come from the workflow extension’s status_order(), so an overlay may define its own. Community default order: draft, ready, internal, published.

string
default: draft
lineage_summary
Any of:
string
derived_from
Any of:
DerivedFromResponse

Provenance for an analysis output: what it came from, and how.

fix(#765 review): declared as a model rather than dict[str, Any]. The dict spelled itself into the checked-in OpenAPI as bare additionalProperties: true, so both generated SDKs lost the shape — the TypeScript one degraded to an index signature and the Python one to an empty additional-properties container. The stable shape was documented in prose and mirrored by hand in the frontend types while the SDKs, which is where most consumers actually meet it, could not use it type-safely.

params stays untyped on purpose: it is the operation’s own parameter dict, so its keys differ per operation (distance_meters for a buffer, mask_source/mask_dataset_id for a clip), and it is additionally REDACTED per requester — visible_derived_from drops any embedded dataset id the caller cannot see. A union of per-operation models would describe a shape the redaction is free to punch holes in.

object
dataset_id
required
Dataset Id

The dataset this one was derived from

string format: uuid
operation
required
Operation

Analysis operation that produced it

string
params
required
Params

Operation parameters, minus any dataset reference the requester cannot access

object
key
additional properties
any
created_at
required
Created At
string format: date-time
update_frequency
Any of:
string
usage_constraints
Any of:
string
access_constraints
Any of:
string
sensitivity_classification
Any of:
string
theme_category
Any of:
Array<string>
owner_org
Any of:
string
published_at
Any of:
string format: date-time
updated_by
Any of:
string format: uuid
record_type
Record Type

Record type: ‘vector_dataset’ (spatial features), ‘raster_dataset’ (single COG), ‘vrt_dataset’ (VRT mosaic), ‘table’ (non-spatial tabular), ‘map’ (saved map), ‘service’ (catalogued remote service), ‘collection’ (flat dataset group).

string
default: vector_dataset
raster
Any of:
RasterMetadata
object
epsg
Any of:
integer
crs_is_geographic
Any of:
boolean
res_x
Any of:
number
res_y
Any of:
number
band_count
Any of:
integer
is_dem
Any of:
boolean
nodata
Any of:
string
compression
Any of:
string
width
Any of:
integer
height
Any of:
integer
size_bytes
Any of:
integer
tile_url
Any of:
string
bands
Bands
Array<object>
default:
RasterBandInfo
object
index
required
Index

1-based band index

integer
dtype
required
Dtype

Pixel data type, e.g. uint8, float32

string
nodata
Any of:
string
color_interp
Any of:
string
connect
Any of:
RasterConnect
object
download_url
Any of:
string
tile_url
required
Tile Url

Titiler tile endpoint for this raster

string
s3_uri
Any of:
string
status
Any of:
string
vrt_type
Any of:
string
source_count
Any of:
integer
resolution_strategy
Any of:
string
stac_assets
Any of:
object
key
additional properties
StacAsset
object
href
required
Href
string
type
Any of:
string
title
Any of:
string
description
Any of:
string
roles
Any of:
Array<string>
size_bytes
Any of:
integer
stac_extensions
Any of:
Array<string>
language
Any of:
string
metadata_warnings
Any of:
Array<string>
Example
{
"has_generic_geometry": false,
"current_version": 1,
"source_health": "unknown",
"schema_drift_status": "unknown",
"source_freshness": "unknown",
"record_status": "draft",
"record_type": "vector_dataset",
"raster": {
"bands": []
}
}

Bad request — invalid payload

Media type application/problem+json
ProblemDetail
object
type
Type
string
default: about:blank
title
required
Title
string
status
required
Status
integer
detail
required
Any of:
string
Example
{
"detail": "Dataset not found",
"status": 404,
"title": "Not Found",
"type": "about:blank"
}

Unauthorized — missing or invalid credentials

Media type application/problem+json
ProblemDetail
object
type
Type
string
default: about:blank
title
required
Title
string
status
required
Status
integer
detail
required
Any of:
string
Example
{
"detail": "Dataset not found",
"status": 404,
"title": "Not Found",
"type": "about:blank"
}

Forbidden — caller lacks write access

Media type application/problem+json
ProblemDetail
object
type
Type
string
default: about:blank
title
required
Title
string
status
required
Status
integer
detail
required
Any of:
string
Example
{
"detail": "Dataset not found",
"status": 404,
"title": "Not Found",
"type": "about:blank"
}

Not found

Media type application/problem+json
ProblemDetail
object
type
Type
string
default: about:blank
title
required
Title
string
status
required
Status
integer
detail
required
Any of:
string
Example
{
"detail": "Dataset not found",
"status": 404,
"title": "Not Found",
"type": "about:blank"
}

Conflict — resource state prevents the operation

Media type application/problem+json
ProblemDetail
object
type
Type
string
default: about:blank
title
required
Title
string
status
required
Status
integer
detail
required
Any of:
string
Example
{
"detail": "Dataset not found",
"status": 404,
"title": "Not Found",
"type": "about:blank"
}

Validation error

Media type application/problem+json
ProblemDetail
object
type
Type
string
default: about:blank
title
required
Title
string
status
required
Status
integer
detail
required
Any of:
string
Example
{
"detail": "Dataset not found",
"status": 404,
"title": "Not Found",
"type": "about:blank"
}

Too many requests — retry after the advertised interval

Media type application/problem+json
ProblemDetail
object
type
Type
string
default: about:blank
title
required
Title
string
status
required
Status
integer
detail
required
Any of:
string
Example
{
"detail": "Dataset not found",
"status": 404,
"title": "Not Found",
"type": "about:blank"
}
Retry-After
integer

Seconds until the request may be retried

Internal server error

Media type application/problem+json
ProblemDetail
object
type
Type
string
default: about:blank
title
required
Title
string
status
required
Status
integer
detail
required
Any of:
string
Example
{
"detail": "Dataset not found",
"status": 404,
"title": "Not Found",
"type": "about:blank"
}

Service unavailable — the database could not serve the request

Media type application/problem+json
ProblemDetail
object
type
Type
string
default: about:blank
title
required
Title
string
status
required
Status
integer
detail
required
Any of:
string
Example
{
"detail": "Dataset not found",
"status": 404,
"title": "Not Found",
"type": "about:blank"
}