Skip to content
getgeolens.com

Commit Fan Out

POST
/ingest/commit-fan-out/{job_id}
curl --request POST \
--url https://example.com/api/ingest/commit-fan-out/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "layers": [ { "layer_name": "example", "title": "example" } ] }'

Convert a single pending IngestJob into N independent per-layer ingest tasks.

For multi-layer sources (e.g. GeoPackage with 2+ layers), this endpoint fans out the original upload into one Procrastinate task per requested layer, each becoming a separate dataset. The original job is marked ‘fanned_out’ (a terminal state).

Required: original job must be in status=‘pending’. Each layer_name in the request body must appear in job.user_metadata[‘all_layers’]. Unknown layer names return HTTP 422 with the list of unrecognized names.

Returns HTTP 202 with per-layer outcomes. Partial success is possible: each layer result carries status=‘queued’ or status=‘failed’ with a user-safe error message.

Permission: same as POST /ingest/commit/{job_id} — ‘upload’ capability.

job_id
required
Job Id
string format: uuid
Media type application/json
FanOutCommitRequest

Request body for POST /ingest/commit-fan-out/{job_id}.

Converts one pending IngestJob (multi-layer file) into N independent ingest tasks — one per requested layer. Maximum 50 layers per request.

object
layers
required
Layers

Layers to ingest as separate datasets. Maximum 50 per request.

Array<object>
>= 1 items <= 50 items
FanOutLayerRequest

One layer to ingest as a separate dataset from a multi-layer source.

object
layer_name
required
Layer Name

Name of the layer within the source file (e.g. GeoPackage layer name).

string
>= 1 characters <= 500 characters
title
Any of:
string
<= 500 characters
Example generated
{
"layers": [
{
"layer_name": "example",
"title": "example"
}
]
}

Successful Response

Media type application/json
FanOutCommitResponse

Response from POST /ingest/commit-fan-out/{job_id}.

object
fan_out_id
required
Fan Out Id

The original job_id (parent). Use for client-side correlation.

string format: uuid
results
required
Results

Per-layer outcomes in the same order as the request layers.

Array<object>
FanOutLayerResult

Per-layer outcome from the fan-out commit operation.

object
layer_name
required
Layer Name

Layer name from the request.

string
new_job_id
Any of:
string format: uuid
dataset_id
Any of:
string format: uuid
status
required
Status

‘queued’ if the task was dispatched; ‘failed’ if an error occurred.

string
Allowed values: queued failed
error
Any of:
string
Example
{
"results": [
{
"status": "queued"
}
]
}

Bad request — invalid payload

Unauthorized — missing or invalid credentials

Forbidden — caller lacks write access

Not found

Conflict — resource state prevents the operation

Validation error

Internal server error