Skip to content
getgeolens.com

Import Map Style Endpoint

POST
/maps/import
curl --request POST \
--url https://example.com/api/maps/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "version": 1, "name": "example", "metadata": {}, "center": [ 1 ], "zoom": 1, "bearing": 1, "pitch": 1, "sources": {}, "sprite": "example", "glyphs": "example", "terrain": {}, "layers": [ {} ] }'

Import a MapLibre style JSON document into a new GeoLens map.

API-01 (M-05): the request body is now a typed Pydantic model instead of a bare dict. MapStyleImportRequest mirrors the MapLibre style spec top-level keys with extra="allow", so existing payloads keep working byte-identically while the OpenAPI schema gains a named class and the auto-generated SDKs stop emitting an opaque Mapping[str, Any] request type.

Media type application/json
MapStyleImportRequest

Typed request body for POST /maps/import — API-01 / M-05.

Mirrors the top-level keys of the MapLibre Style Specification that parse_maplibre_style_import actually reads. extra="allow" keeps forward-compatibility with future MapLibre fields (e.g. projection, light, transition) so adding a new key on the client side doesn’t require a server release.

Replacing the previous bare-dict body parameter removes additionalProperties: true from the OpenAPI schema and lets openapi-python-client generate a navigable named model class.

object
version
Any of:
integer
name
Any of:
string
<= 255 characters
metadata
Any of:
object
key
additional properties
any
center
Any of:
Array<number>
zoom
Any of:
number
<= 24
bearing
Any of:
number
>= -180 <= 180
pitch
Any of:
number
<= 85
sources
Any of:
object
key
additional properties
any
sprite
Any of:
string
<= 2000 characters
glyphs
Any of:
string
<= 2000 characters
terrain
Any of:
object
key
additional properties
any
layers
Any of:
Array<object>
object
key
additional properties
any
key
additional properties
any
Example generated
{
"version": 1,
"name": "example",
"metadata": {},
"center": [
1
],
"zoom": 1,
"bearing": 1,
"pitch": 1,
"sources": {},
"sprite": "example",
"glyphs": "example",
"terrain": {},
"layers": [
{}
]
}

Successful Response

Media type application/json
MapStyleImportResponse
object
map
required
MapResponse
object
id
required
Id
string format: uuid
name
required
Name
string
description
required
Any of:
string
notes
Any of:
string
center_lng
required
Any of:
number
center_lat
required
Any of:
number
zoom
required
Any of:
number
bearing
required
Bearing
number
pitch
required
Pitch
number
basemap_style
required
Basemap Style
string
show_basemap_labels
required
Show Basemap Labels
boolean
basemap_config
Any of:
BasemapConfig
object
label_mode
BasemapLabelMode

Basemap label prominence.

string
default: full
Allowed values: full subtle hidden
road_visibility
BasemapSublayerVisibility

Road and transit sublayer visibility where supported.

string
default: full
Allowed values: full subtle hidden
boundary_visibility
BasemapSublayerVisibility

Administrative boundary sublayer visibility where supported.

string
default: full
Allowed values: full subtle hidden
building_visibility
Building Visibility

Whether supported building/3D building basemap layers are shown.

boolean
default: true
land_water_tone
BasemapLandWaterTone

Land and water color treatment where supported.

string
default: default
Allowed values: default muted contrast monochrome
relief_contrast
Any of:
BasemapReliefContrast
string
Allowed values: soft standard strong
opacity
Opacity

Master basemap opacity 0.0-1.0

number
default: 1 <= 1
sublayer_overrides
Any of:
object
key
additional properties
SublayerOverride

Per-sublayer style override for a single basemap sublayer.

All fields are nullable — a None value means “use the basemap default”. Only #RRGGBB hex strings are accepted for color fields; None means the basemap default color is preserved. Numeric ranges are clamped at validation time (Pydantic ge/le constraints).

The key set of BasemapConfig.sublayer_overrides is treated as opaque (forward-compatible with future sublayer IDs) — see CONTEXT.md D-01.

Security: extra=“forbid” locks the D-14 scope guardrail: unknown style axes such as dash patterns, line caps, halo blur, and text-font are rejected at validation time (T-1059A-03).

object
stroke_color
Any of:
string
stroke_width
Any of:
number
<= 20
casing_color
Any of:
string
casing_width
Any of:
number
<= 20
min_zoom
Any of:
number
<= 24
max_zoom
Any of:
number
<= 24
opacity
Any of:
number
<= 1
terrain_config
Any of:
TerrainConfig
object
enabled
Enabled
boolean
source_dataset_id
Any of:
string format: uuid
exaggeration
Exaggeration
number
default: 1 <= 10
visibility
required
MapVisibility
string
Allowed values: private internal public
thumbnail_url
Any of:
string
forked_from_id
Any of:
string format: uuid
forked_from_name
Any of:
string
created_by
required
Any of:
string format: uuid
created_by_username
Any of:
string
created_at
required
Created At
string format: date-time
updated_at
required
Updated At
string format: date-time
layers
required
Layers
Array<object>
MapLayerResponse
object
id
required
Id
string format: uuid
dataset_id
required
Dataset Id
string format: uuid
dataset_name
required
Dataset Name
string
dataset_geometry_type
required
Any of:
string
dataset_table_name
required
Dataset Table Name
string
dataset_extent_bbox
required
Any of:
Array<number>
dataset_column_info
Any of:
Array<object>
object
key
additional properties
any
dataset_feature_count
Any of:
integer
dataset_sample_values
Any of:
object
key
additional properties
any
display_name
Any of:
string
sort_order
required
Sort Order
integer
visible
required
Visible
boolean
opacity
required
Opacity
number
paint
required
Paint
object
key
additional properties
any
layout
required
Layout
object
key
additional properties
any
layer_type
Layer Type
string
default: vector_geolens
dataset_record_type
Any of:
string
filter
Any of:
Array
label_config
Any of:
object
key
additional properties
any
popup_config
Any of:
PopupConfig

Per-layer popup configuration: enable/disable + custom title template

  • ordered visible-fields allowlist. Persisted as JSONB on map_layers.
object
enabled
required
Enabled
boolean
expression
Any of:
string
<= 500 characters
visible_fields
Any of:
Array<string>
<= 100 items
style_config
Any of:
object
key
additional properties
any
show_in_legend
Show In Legend
boolean
default: true
is_3d
Any of:
boolean
is_dem
Any of:
boolean
dem_vertical_units
Any of:
string
layer_count
required
Layer Count
integer
widgets
Any of:
Array<string>
summary
required
MapStyleImportSummary
object
sources_matched
Sources Matched
integer
0
sources_unsupported
Sources Unsupported
integer
0
layers_imported
Layers Imported
integer
0
layers_skipped
Layers Skipped
integer
0
warnings
Warnings
Array<object>
MapStyleImportWarning
object
code
required
Code
string
message
required
Message
string
source_id
Any of:
string
layer_id
Any of:
string
Example
{
"map": {
"basemap_config": {
"label_mode": "full",
"road_visibility": "full",
"boundary_visibility": "full",
"building_visibility": true,
"land_water_tone": "default",
"relief_contrast": "soft",
"opacity": 1
},
"terrain_config": {
"enabled": false,
"exaggeration": 1
},
"visibility": "private",
"layers": [
{
"layer_type": "vector_geolens",
"show_in_legend": true
}
]
},
"summary": {
"sources_matched": 0,
"sources_unsupported": 0,
"layers_imported": 0,
"layers_skipped": 0
}
}

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