GovMap Layers-Catalog REST API
Complete reference for querying Israeli government map layers via the GovMap layers-catalog REST API. All endpoints verified working as of 2026-04-10.
API Overview
GovMap exposes three REST API service prefixes. Only layers-catalog works without an API token:
| Service Prefix | Auth Required | Status |
|---|---|---|
/api/layers-catalog/* |
No (requires Origin header) |
Primary — use this |
/api/search-service/* |
No | Already used by nadlan autocomplete |
/api/spatial-analysis/* |
Yes (domain-bound apiToken) |
Requires registration at govmap.gov.il |
Base URL: https://www.govmap.gov.il/api
Required header: Origin: https://www.govmap.gov.il (for layers-catalog endpoints)
Coordinate system: All coordinates are EPSG:3857 (Web Mercator), NOT ITM. The autocomplete endpoint returns shapes in this projection.
Core Endpoints
1. POST /api/layers-catalog/entitiesByPoint
Query entities from one or more layers near a geographic point. No API token required.
Request body:
{
"point": [3873880, 3769003],
"layers": [
{ "layerId": "GASSTATIONS" },
{ "layerId": "Neighborhood" },
{ "layerId": "PARCEL_ALL", "filter": "optional CQL filter" }
],
"tolerance": 2000,
"calculateDistance": true,
"language": "he"
}
| Field | Type | Required | Description |
|---|---|---|---|
point |
[number, number] |
Yes | [x, y] in EPSG:3857 |
layers |
Array<{layerId, filter?}> |
Yes | Layers to query |
tolerance |
number |
Yes | Search radius in meters |
calculateDistance |
boolean |
No | Include distance from point |
language |
string |
No | "he" or "en" |
Response:
{
"data": [
{
"name": "gasstations",
"caption": "תחנות דלק",
"fieldsMapping": { "name": "שם", "company": "חברה" },
"entities": [
{
"objectId": 123,
"centroid": [3873500, 3769200],
"geom": "POINT Z (...)",
"fields": [
{ "fieldName": "שם", "fieldValue": "תל אביב", "fieldType": 1, "isVisible": true }
],
"distance": 475.7
}
],
"dim": 2,
"layerId": "42"
}
]
}
Key behaviors:
- Multi-layer queries supported (pass multiple objects in
layersarray) - Returns up to 100 entities per layer
- Empty
"data": []means no features found within tolerance - Layer IDs are case-sensitive (e.g.,
GASSTATIONSnotgasstations) fieldsMappingmaps internal field names to Hebrew display namesfieldType: 1=text, 2=number, 8=date
2. GET /api/layers-catalog/layer/{layerId}/metadata
Get field definitions and source info for a layer. No API token required.
Response:
{
"description": {
"name": "תחנות דלק",
"source": "משרד האנרגיה",
"description": "..."
},
"fields": {
"name": "שם",
"company": "חברה",
"address": "כתובת",
"city": "עיר"
}
}
Returns null for layers that don't expose metadata.
3. POST /api/spatial-analysis/layer-features-by-location (Token Required)
More powerful than entitiesByPoint — supports WKT geometry (polygons, lines), not just points.
Request body:
{
"data": {
"geometry": "POINT(179614.81 663968.73)",
"radius": 500,
"layers": [{ "name": "GASSTATIONS", "fields": ["name", "company"] }]
},
"apiToken": "your-domain-bound-token"
}
Requires both apiToken and Origin header matching the registered domain.
Geocoding Workflow
To query layers by Hebrew address, first geocode via autocomplete (already implemented in nadlan client):
POST /api/search-service/autocomplete
{ "searchText": "דיזנגוף 50 תל אביב יפו" }
Returns shape: "POINT(3873880 3769003)" in EPSG:3857. Parse with parseCoordinatesFromShape() from govmap.client.ts, then pass to entitiesByPoint.
Verified Layer Tiers
Layers tested and confirmed returning data via entitiesByPoint (5km tolerance, Tel Aviv center):
| Tier | Layer ID | Hebrew Name | Entities Found |
|---|---|---|---|
| Tier 1 | PARCEL_ALL |
חלקות | 100 |
SUB_GUSH_ALL |
גושים | 100 | |
Neighborhood |
שכונות | 4 | |
statistic_areas |
אזורים סטטיסטיים | 100 | |
bus_stops |
תחנות אוטובוס | 100 | |
hotels |
בתי מלון | 93 | |
GASSTATIONS |
תחנות דלק | 55 | |
| Tier 2 | POLICE_Yehida_Location |
תחנות משטרה | 9 |
FIRE_STATIONS |
תחנות כיבוי | 6 | |
Emergancy_Hospitals |
בתי חולים | 3 | |
| Null metadata | shmurot_teva_ganim |
שמורות טבע | 0 |
ganim_leumim |
גנים לאומיים | 0 | |
mitchmim_mshbsh |
התחדשות עירונית | 0 | |
activefaults |
שברים פעילים | 0 |
Layers returning null metadata may require different layer IDs or may not be queryable via this endpoint.
Implementation in This Project
The existing govmap data source at src/data-sources/govmap/ already has:
- Shared client infrastructure (
api/govmap.client.ts) with rate limiting and retry - Autocomplete geocoding (
/search-service/autocomplete) - Coordinate parsing (
parseCoordinatesFromShape) - Portal URL generation (
buildGovmapPortalUrl)
New layer tools should follow the subfolder pattern (like tools/nadlan/):
- Create
api/layers/for the layers-catalog client methods - Create
tools/layers/for the new tools - Spread new tools into the parent
tools/index.ts - Update agent instructions, translations, and source configs
Additional Resources
Reference Files
references/layers-catalog.md— Complete catalog of all 122 GovMap layers with IDs, Hebrew names, sources, and field schemas for every layer that exposes metadatareferences/api-endpoints.md— Detailed endpoint documentation including Zod schemas extracted from the GovMap JS bundle, response examples, error handling, and thelayer-features-by-location(token-required) endpoint specification
Existing Project Files
src/data-sources/govmap/api/govmap.client.ts— Shared HTTP client (reuse for new tools)src/data-sources/govmap/api/govmap.constants.ts— Layer ID constants (extend with new layers)src/data-sources/govmap/api/govmap.endpoints.ts— URL builders (add layers-catalog paths)src/data-sources/CLAUDE.md— Data source architecture guide (subfolder pattern)