Map tiles (beta)
Map keys and short-lived tokens for your own apps and pages; tiles are billed per thousand.
map.tiles
Beta
tile_1k
sMap SDKs
Tiles are read by the sMap SDKs with a map key or a map token. Installation, map keys and an example for each platform:
How to call it
REST
POST
/v1/map/token
GraphQL
query
openMapToken
MCP
open_map_token
Issue a short-lived map token for your own apps and pages (map tiles). Give ttl_seconds from 60 to 86400 (default 3600). The answer has the token, when it expires and the map service address. The call itself bills nothing; tiles loaded with the token are billed per thousand.
Request schema
Generated from the same validation rules the endpoint runs, so a field cannot be documented without being validated.
POST /v1/map/token
{
"type": "object",
"properties": {
"ttl_seconds": {
"type": [
"integer",
"null"
],
"minimum": 60,
"maximum": 86400
}
},
"additionalProperties": false
}
Request example
{
"ttl_seconds": 3600
}
Response
What a successful call returns: the schema of `data` and `meta`, with a description of each field, followed by an example response from a real call.
POST /v1/map/token
Response schema
{
"description": "A short-lived token for your apps and pages to load map tiles with. The call bills nothing; the tiles are billed per thousand.",
"data": {
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "The token. Send it as `Authorization: Bearer <token>` or give it to the map SDK as its token."
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "When the token stops working (UTC)."
},
"base_url": {
"type": "string",
"description": "The map service address the token is for."
},
"subject": {
"type": "string",
"description": "Whom the tiles loaded with the token are counted for: `open:` and your account number."
}
},
"required": [
"token",
"expires_at",
"base_url",
"subject"
]
},
"meta": {
"type": "object",
"properties": {
"ttl_seconds": {
"type": "integer",
"description": "How long the token is valid, in seconds."
}
}
}
}
Response example
{
"request_id": "req_01k8zr4n6p8q0s2u4w6y8a0c3e",
"capability": "map.tiles",
"billing": {
"unit": "tile_1k",
"quantity": 0,
"counted": true
},
"data": {
"token": "sm1.eyJzdWIiOiJvcGVuOjQyMTciLCJleHAiOjE3OTMxMjQ4MDB9.Q2v8m1Xb3dKp7Rz0Yt5Wn9Lc4Hs6Fg2Ja8Ue1Oi3Pk",
"expires_at": "2026-10-27T15:00:00Z",
"base_url": "https://maps.example.com",
"subject": "open:4217"
},
"meta": {
"ttl_seconds": 3600
}
}
What it costs
Thousands of map tiles, charged fractionally.
Every billable response carries a billing block with the unit, the quantity and how the quantity was derived.
Errors it can return
| Status | Code | Description |
|---|---|---|
| 401 | TOKEN_INVALID |
Unknown or revoked API token. |
| 401 | TOKEN_MISSING |
No API token. Send Authorization: Bearer <your token>. |
| 402 | QUOTA_EXHAUSTED |
The included allowance for this capability is used up for the current period. |
| 403 | CAPABILITY_NOT_ENABLED |
This capability is not enabled for your account. See :doc to enable it. |
| 403 | CAPABILITY_NOT_GRANTED_TO_KEY |
Your account has this capability, but this API key was not granted it. |
| 403 | OPEN_API_DISABLED |
Open Platform access is not enabled for this account. |
| 413 | REQUEST_TOO_LARGE |
The request body is too large. Upload large payloads as a reusable resource instead. |
| 422 | VALIDATION_FAILED |
The request failed validation. See details. |
| 429 | RATE_LIMITED |
Too many requests. Please retry after the indicated delay. |
| 500 | INTERNAL_ERROR |
An unexpected error occurred. Quote the request_id when contacting support. |
| 502 | ENGINE_UNAVAILABLE |
The routing engine is temporarily unreachable. Please retry. |