Skip to content
getgeolens.com

Apply Manifest Endpoint

POST
/ingest/manifest/apply
curl --request POST \
--url https://example.com/ingest/manifest/apply \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "manifest_version": "1", "catalog": { "title": "example", "description": "example", "organization": "example", "contact": { "name": "example", "email": "hello@example.com", "url": "example" } }, "datasets": [ { "key": "example", "title": "example", "description": "example", "sources": [ { "type": "vector", "uri": "example", "title": "example", "description": "example", "format": "example", "layer": "example", "checksum": "example" } ], "metadata": { "tags": [ "example" ], "organization": "example", "crs": "example", "license": "example", "attribution": "example", "bbox": [ 1 ] }, "publication": { "intent": "example" } } ], "dry_run": false }'

Apply a versioned manifest through the ingest service layer.

Media type application/json
ManifestApplyRequest
object
manifest_version
required
Manifest Version
string
Allowed value: 1
catalog
required
ManifestCatalog
object
title
required
Title
string
>= 1 characters <= 500 characters
description
Any of:
string
>= 1 characters <= 5000 characters
organization
Any of:
string
>= 1 characters <= 500 characters
contact
Any of:
ManifestContact
object
name
Any of:
string
>= 1 characters <= 500 characters
email
Any of:
string format: email
<= 320 characters
url
Any of:
string
<= 2000 characters /^https?://[^\s]+$/
datasets
required
Datasets
Array<object>
>= 1 items <= 100 items
ManifestDataset
object
key
required
Key

Stable dataset identity key used for idempotent apply operations.

string
>= 1 characters <= 128 characters /^[a-z0-9][a-z0-9._-]{0,127}$/
title
required
Title
string
>= 1 characters <= 500 characters
description
Any of:
string
>= 1 characters <= 5000 characters
sources
required
Sources
Array<object>
>= 1 items <= 1 items
ManifestSource
object
type
required
Type

Source modality. Vector sources require zip, gpkg, geojson, json, csv, xlsx, xls, fgb, kml, or kmz; raster_cog sources require tif or tiff.

string
Allowed values: vector raster_cog
uri
required
Uri

Relative path (no .. traversal), HTTP(S) URL, or s3:// storage URI.

string
>= 1 characters <= 2000 characters /^(?:(?:\./)?[^\s:/][^\s:]*|https?://[^\s]+|s3://[^\s]+)$/
title
Any of:
string
>= 1 characters <= 500 characters
description
Any of:
string
>= 1 characters <= 5000 characters
format
Any of:
string
>= 1 characters <= 100 characters
layer
Any of:
string
>= 1 characters <= 500 characters
checksum
Any of:

Declared SHA-256 digest of the source bytes, as ‘sha256:<64 lowercase hex characters>’. Apply uses this only as a change-detection input alongside the rest of the entry; it is not verified against the fetched bytes. For a vector source, bump it when the file under a stable URI changes, to force apply to reclassify the entry as an update instead of skipping it. Manifest raster updates are not supported: do not set or change checksum on a raster_cog source, because a changed value there makes apply report that entry as an error (‘Manifest raster updates are not supported; create a new raster dataset instead.’), not a skip. An unchanged raster entry, checksum included, still skips normally.

string
>= 71 characters <= 71 characters /^sha256:[0-9a-f]{64}$/
metadata
Any of:
ManifestMetadata
object
tags
Any of:
Array<string>
organization
Any of:
string
>= 1 characters <= 500 characters
crs
Any of:
string
/^EPSG:[0-9]{1,6}$/
license
Any of:
string
>= 1 characters <= 500 characters
attribution
Any of:
string
>= 1 characters <= 5000 characters
bbox
Any of:

WGS84 bbox hint.

Array<number>
>= 4 items <= 4 items
publication
required
ManifestPublication
object
intent
required
Intent

Publication intent. Deliberately not pinned to an enum: the values come from the workflow extension’s status_order(), so an overlay may define its own, and apply validates against the live extension. Community default order: draft, ready, internal, published.

string
>= 1 characters <= 20 characters
dry_run
Dry Run
boolean

Successful Response

Media type application/json
ManifestApplyResponse
object
accepted
required
Accepted
boolean
dry_run
required
Dry Run
boolean
results
required
Results
Array<object>
ManifestApplyEntryResult
object
dataset_key
required
Dataset Key
string
action
required
Action

What apply did with the entry. blocked means the entry is unchanged since its last apply, whose replacement is held for review, so nothing was queued. Accept it by sending run_id as accept_blocked_run_id to the dataset’s refresh endpoint, or change the entry.

string
Allowed values: create update skip blocked error
job_id
Any of:
string format: uuid
dataset_id
Any of:
string format: uuid
run_id
Any of:
string format: uuid
review_reasons
Review Reasons

Why the blocked run needs review, when action is blocked.

Array<string>
message
required
Message
string
errors
Errors
Array<string>

Example

{
"results": [
{
"action": "create"
}
]
}

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"
}