Create Empty Dataset Endpoint
const url = 'https://example.com/datasets/create/';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"title":"example","columns":[{"name":"example","type":"text"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/datasets/create/ \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "title": "example", "columns": [ { "name": "example", "type": "text" } ] }'Create an empty dataset with user-defined columns.
Creates a PostGIS table in the data schema and a catalog record.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”object
object
Responses
Section titled “ Responses ”Successful Response
object
Parent catalog record UUID
Internal PostGIS table name
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.
Describes a single column in a dataset’s attribute table.
Automated quality assessment results.
object
Monotonic version counter
Healthy, missing, inaccessible, or unknown. ‘unknown’ means never probed, or an origin kind with nothing to probe.
None, drifted, or unknown. Set at refresh commit from the schema diff; ‘unknown’ until a refresh has run.
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.
Access level: private, restricted, internal, public
Minimal reference to a collection a dataset belongs to.
object
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.
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
The dataset this one was derived from
Analysis operation that produced it
Operation parameters, minus any dataset reference the requester cannot access
object
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).
object
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
Unauthorized — missing or invalid credentials
Forbidden — caller lacks write access
Not found
Conflict — resource state prevents the operation
Validation error
Too many requests — retry after the advertised interval
Headers
Section titled “Headers ”Seconds until the request may be retried
Internal server error
Service unavailable — the database could not serve the request