Skip to content
getgeolens.com

Upload From Url

POST
/ingest/upload/url
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.

Media type application/json
UrlUploadRequest

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.

object
url
required
Url

HTTP(S) URL of the file to import. The server validates the URL against SSRF, downloads it with the configured size cap, and stages it like a direct upload.

string
>= 1 characters <= 2000 characters
filename
Any of:
string
>= 1 characters <= 255 characters
kind
Any of:
string
Allowed value: tiles3d

Successful Response

Media type application/json
UploadResponse
object
job_id
required
Job Id

Unique identifier for the ingestion job. Use this to poll status and to commit the upload.

string format: uuid
status
Status

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.

string
default: pending
message
required
Message

Human-readable message describing the upload result.

string

Example

{
"status": "pending"
}

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

Payload too large

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

Bad gateway — an upstream provider failed

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