Upload From Url
const url = 'https://example.com/ingest/upload/url';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"url":"example","filename":"example","kind":"tiles3d"}'};
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/upload/url \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "url": "example", "filename": "example", "kind": "tiles3d" }'Start importing a geospatial file from an HTTP(S) URL.
The server fetches the file and sends the staged bytes through the same
preview and commit pipeline as a direct upload. With kind set to
tiles3d the URL names a 3D Tiles tileset archive, which the worker
checks as the upload door does before the job becomes previewable.
The download runs as a background job. This call validates the URL and
returns a job id immediately; poll GET /jobs/{job_id} and
preview once the job reaches pending. While the file is downloading
the job reports status running with step downloading.
URL validation, connection-time IP pinning, and per-hop redirect checks protect the download from SSRF. The worker enforces the size cap while streaming, validates the staged file like a direct upload, and gives GDAL only the local staged file.
Authorizations
Section titled “ Authorizations ”Request Bodyrequired
Section titled “ Request Bodyrequired ”Request body for importing a file from a URL.
The server validates the URL for SSRF, enforces the size limit, and stages the file through the same preview and commit flow as a direct upload.
Responses
Section titled “ Responses ”Successful Response
object
Unique identifier for the ingestion job. Use this to poll status and to commit the upload.
Initial job status. ‘pending’ means the file is staged and ready to preview; ‘running’ means the server is still fetching it, as it is for a URL import.
Human-readable message describing the upload result.
Example
{ "status": "pending"}Bad request — invalid payload
Unauthorized — missing or invalid credentials
Forbidden — caller lacks write access
Not found
Conflict — resource state prevents the operation
Payload too large
Validation error
Too many requests — retry after the advertised interval
Headers
Section titled “ Headers ”Seconds until the request may be retried
Internal server error
Bad gateway — an upstream provider failed
Service unavailable — the database could not serve the request