Apply Manifest Endpoint
const url = 'https://example.com/ingest/manifest/apply';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"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}'};
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/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.
Authorizations
Section titled “ Authorizations ”Request Body required
Section titled “ Request Body required ”object
object
object
Stable dataset identity key used for idempotent apply operations.
object
Source modality. Vector sources require zip, gpkg, geojson, json, csv, xlsx, xls, fgb, kml, or kmz; raster_cog sources require tif or tiff.
Relative path (no .. traversal), HTTP(S) URL, or storage URI.
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.
object
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.
Responses
Section titled “ Responses ”Successful Response
object
Example
{ "results": [ { "action": "create" } ]}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