Map API
Base URL: https://YOUR-SERVER/api. Send your API key in x-api-key where authentication is required. A key also needs the listed permission; your account's access rules still apply.
API guide · All endpoints · OpenAPI JSON
GET /map/markers— Retrieve map markersGET /map/reverse-geocode— Reverse geocode coordinatesGET /map/statistics— Retrieve map statistics
Retrieve map markers
GET /api/map/markers
Retrieve a list of latitude and longitude coordinates for every asset with location data.
Authentication: API key. Permission: map.read.
Parameters
| Name | Where | Required | Description |
|---|---|---|---|
fileCreatedAfter | query | No | Filter assets created after this date |
fileCreatedBefore | query | No | Filter assets created before this date |
isArchived | query | No | Filter by archived status |
isFavorite | query | No | Filter by favorite status |
withSharedAlbums | query | No | Include shared album assets |
Parameter types, defaults and constraints
[
{
"name": "fileCreatedAfter",
"required": false,
"in": "query",
"description": "Filter assets created after this date",
"schema": {
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"example": "2024-01-01T00:00:00.000Z",
"type": "string"
}
},
{
"name": "fileCreatedBefore",
"required": false,
"in": "query",
"description": "Filter assets created before this date",
"schema": {
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"example": "2024-01-01T00:00:00.000Z",
"type": "string"
}
},
{
"name": "isArchived",
"required": false,
"in": "query",
"description": "Filter by archived status",
"schema": {
"type": "boolean"
}
},
{
"name": "isFavorite",
"required": false,
"in": "query",
"description": "Filter by favorite status",
"schema": {
"type": "boolean"
}
},
{
"name": "withSharedAlbums",
"required": false,
"in": "query",
"description": "Include shared album assets",
"schema": {
"type": "boolean"
}
}
]Responses
Field definitions: MapMarkerResponseDto
{
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/MapMarkerResponseDto"
},
"type": "array"
}
}
},
"description": ""
}
}Reverse geocode coordinates
GET /api/map/reverse-geocode
Retrieve location information (e.g., city, country) for given latitude and longitude coordinates.
Authentication: API key. Permission: map.search.
Parameters
| Name | Where | Required | Description |
|---|---|---|---|
lat | query | Yes | Latitude (-90 to 90) |
lon | query | Yes | Longitude (-180 to 180) |
Parameter types, defaults and constraints
[
{
"name": "lat",
"required": true,
"in": "query",
"description": "Latitude (-90 to 90)",
"schema": {
"format": "double",
"type": "number"
}
},
{
"name": "lon",
"required": true,
"in": "query",
"description": "Longitude (-180 to 180)",
"schema": {
"format": "double",
"type": "number"
}
}
]Responses
Field definitions: MapReverseGeocodeResponseDto
{
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/MapReverseGeocodeResponseDto"
},
"type": "array"
}
}
},
"description": ""
}
}Retrieve map statistics
GET /api/map/statistics
Count what the map settings would add: the viewer's own located archived items and the located items of partners who share their locations, under the same date and favorite filters, and the viewer's own items without a location.
Authentication: API key. Permission: map.read.
Parameters
| Name | Where | Required | Description |
|---|---|---|---|
fileCreatedAfter | query | No | Filter assets created after this date |
fileCreatedBefore | query | No | Filter assets created before this date |
isArchived | query | No | Filter by archived status |
isFavorite | query | No | Filter by favorite status |
withSharedAlbums | query | No | Include shared album assets |
Parameter types, defaults and constraints
[
{
"name": "fileCreatedAfter",
"required": false,
"in": "query",
"description": "Filter assets created after this date",
"schema": {
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"example": "2024-01-01T00:00:00.000Z",
"type": "string"
}
},
{
"name": "fileCreatedBefore",
"required": false,
"in": "query",
"description": "Filter assets created before this date",
"schema": {
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"example": "2024-01-01T00:00:00.000Z",
"type": "string"
}
},
{
"name": "isArchived",
"required": false,
"in": "query",
"description": "Filter by archived status",
"schema": {
"type": "boolean"
}
},
{
"name": "isFavorite",
"required": false,
"in": "query",
"description": "Filter by favorite status",
"schema": {
"type": "boolean"
}
},
{
"name": "withSharedAlbums",
"required": false,
"in": "query",
"description": "Include shared album assets",
"schema": {
"type": "boolean"
}
}
]Responses
Field definitions: MapStatisticsResponseDto
{
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MapStatisticsResponseDto"
}
}
},
"description": ""
}
}© 2026 Frameleaf Inc. All rights reserved.
Frameleaf and the Frameleaf logo are Trademarks of Frameleaf Inc.