Point Lookup
1 token per requestQuery multiple data layers at a single geographic coordinate. Returns feature information, metadata, and optional geometry for each matched layer at the given point.
Try point lookup
Live demo against the production API. Defaults to Ames, Iowa — adjust latitude, longitude, and layers, then look up.
POST https://api.landmapmagic.com/v1/data/point?key=YOUR_API_KEYShow body ▾Hide body ▴
{
"lat": 42.0308,
"lng": -93.4816,
"layers": [
"states",
"counties",
"townships",
"sections",
"clu",
"ssurgo",
"cdl:2025"
],
"options": {
"include_geometry": false,
"include_metadata": false
}
}POST
https://api.landmapmagic.com/v1/data/pointGET
https://api.landmapmagic.com/v1/data/point?lat={lat}&lng={lng}&layers={layers}A GET convenience endpoint is also available for simple lookups. Pass
lat, lng, and layers (comma-separated) as query parameters. Example: GET /v1/data/point?lat=42.03&lng=-93.48&layers=states,counties&key=lmm_live_4f7k...z9QpRequest Body (POST)
Parameters
| Name | Type | Description |
|---|---|---|
| lat* | number | Latitude of the point to query. Range: -90 to 90. |
| lng* | number | Longitude of the point to query. Range: -180 to 180. |
| layers* | string[] | Array of layer names to query at the given point. See Available Layers below. |
| options | object | Optional configuration object for the query. See Options below. |
Options
| Name | Type | Description |
|---|---|---|
| include_geometry | boolean | Include the complete GeoJSON geometry of each matched feature. Boundaries are reconstructed server-side even when the feature spans multiple map tiles internally, so you always receive the whole polygon (e.g. the full CLU field boundary). Default: false. Increases response size significantly. |
| include_metadata | boolean | Include layer metadata such as source, update date, and zoom information. Default: true. |
Available Layers
Supported Layers
| Attribute | Type | Description |
|---|---|---|
| states | polygon | U.S. state boundaries with FIPS codes and names. Optimal at zoom 4. |
| counties | polygon | U.S. county boundaries with FIPS codes, names, and state references. Optimal at zoom 6. |
| townships | polygon | PLSS township boundaries. Includes township, range, and principal meridian. Optimal at zoom 10. |
| sections | polygon | PLSS section boundaries (640-acre subdivisions within townships). Optimal at zoom 14. |
| clu | polygon | Common Land Unit (CLU) field boundaries from the USDA FSA. Optimal at zoom 14. |
| ssurgo | polygon | SSURGO soil map units at the queried coordinate. Optimal at zoom 14. |
| parcels | polygon | Property parcel at the queried coordinate, with ownership and assessment attributes where available. Feature id is the parcel robust_id. Optimal at zoom 16. |
| cdl:YYYY | raster_value | USDA Cropland Data Layer for a specific year (e.g. cdl:2023). Returns the crop code at the queried point. Optimal at zoom 12. |
Pricing is 1 token per request regardless of how many layers you query. Query multiple layers in a single request to minimize costs.
Requesting a layer that is not listed above returns a 400 error with an
invalid_layers list when no requested layer is servable. If a request mixes valid and invalid layers, valid layers are returned normally alongside top-level warnings and invalid_layers fields.Response Fields
Top-Level Fields
| Attribute | Type | Description |
|---|---|---|
| point | object | The queried coordinate as { lat, lng }. |
| layers | object | Object keyed by layer name, such as states, ssurgo, or cdl:2023. |
| summary | object | Overall query summary with layers_queried, total_features_found, and processing_time_ms. |
| query | object | Echoes lat, lng, requested_layers, normalized snake_case options, timestamp, and account_id. |
Layer Object
| Attribute | Type | Description |
|---|---|---|
| layers[layer].layer | string | Canonical layer key for this result. For CDL this includes the year, such as cdl:2023. |
| layers[layer].type | string | Layer result type. Vector layers return vector; CDL returns raster_value. |
| layers[layer].status | string | Query status for this layer. ok means the layer was queried successfully. |
| layers[layer].feature_count | number | Number of normalized features found at the queried point for this layer. |
| layers[layer].features | array | Normalized feature rows for the layer. Empty when no feature was found. |
| features[].id | string | Unique identifier for the matched feature (e.g. FIPS code, or the field's stable id for CLU). Ids are stable per dataset version: the same feature keeps the same id until the underlying dataset is rebuilt (announced in the changelog). The same id is returned by AOI queries, so point and AOI results can be joined. |
| features[].name | string | Human-readable name for the matched feature. |
| features[].kind | string | Normalized feature kind such as state, county, plss_section, field_boundary, soil_map_unit, or crop. |
| features[].properties | object | Layer-specific properties of the matched feature. Varies by layer type. |
| features[].geometry | GeoJSON geometry | null | Complete Polygon or MultiPolygon for the whole feature when options.include_geometry is true (dissolved across tile boundaries server-side). Null otherwise. |
| features[].geometry_complete | boolean | Present only when geometry is returned. True when the geometry represents the entire real-world feature; false in the rare case the feature could not be fully reconstructed. |
| layers[layer].zoom.optimal | number | Recommended zoom level for viewing this layer's data. |
| layers[layer].metadata | object | Layer metadata including source, last updated timestamp, and attribution. Only present when include_metadata is true. |
Geometry precision: returned boundaries are reconstructed from the tiled dataset (zoom 14–15, quantized and simplified at build time). They are suitable for rendering, PDFs, and acreage/statistics work within roughly 1–2% tolerance, but they are not survey-grade source coordinates.
Code Examples
Basic Point Lookup
cURL
curl -X POST "https://api.landmapmagic.com/v1/data/point?key=lmm_live_4f7k...z9Qp" \
-H "Content-Type: application/json" \
-d '{
"lat": 42.0308,
"lng": -93.4816,
"layers": ["states", "counties", "townships"]
}'JavaScript
const response = await fetch(
"https://api.landmapmagic.com/v1/data/point?key=lmm_live_4f7k...z9Qp",
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
lat: 42.0308,
lng: -93.4816,
layers: ["states", "counties", "townships"],
}),
}
);
const data = await response.json();
Object.entries(data.layers).forEach(([layer, result]) => {
const feature = result.features[0];
console.log(`${layer}: ${feature ? feature.name : "not found"}`);
});Python
import requests
response = requests.post(
"https://api.landmapmagic.com/v1/data/point?key=lmm_live_4f7k...z9Qp",
json={
"lat": 42.0308,
"lng": -93.4816,
"layers": ["states", "counties", "townships"],
},
)
data = response.json()
for layer, result in data["layers"].items():
feature = result["features"][0] if result["features"] else None
name = feature["name"] if feature else "not found"
print(f"{layer}: {name}")With Geometry and CDL
cURL
curl -X POST "https://api.landmapmagic.com/v1/data/point?key=lmm_live_4f7k...z9Qp" \
-H "Content-Type: application/json" \
-d '{
"lat": 41.8781,
"lng": -93.0977,
"layers": ["counties", "ssurgo", "clu", "cdl:2023"],
"options": {
"include_geometry": true,
"include_metadata": true
}
}'JavaScript
const response = await fetch(
"https://api.landmapmagic.com/v1/data/point?key=lmm_live_4f7k...z9Qp",
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
lat: 41.8781,
lng: -93.0977,
layers: ["counties", "ssurgo", "clu", "cdl:2023"],
options: {
include_geometry: true,
include_metadata: true,
},
}),
}
);
const data = await response.json();
console.log(data.layers);Python
import requests
response = requests.post(
"https://api.landmapmagic.com/v1/data/point?key=lmm_live_4f7k...z9Qp",
json={
"lat": 41.8781,
"lng": -93.0977,
"layers": ["counties", "ssurgo", "clu", "cdl:2023"],
"options": {
"include_geometry": True,
"include_metadata": True,
},
},
)
data = response.json()
print(data["layers"])Response Example
States + Counties + Townships Query
{
"point": {
"lat": 42.0308,
"lng": -93.4816
},
"layers": {
"states": {
"layer": "states",
"type": "vector",
"status": "ok",
"feature_count": 1,
"features": [{
"id": "19",
"name": "Iowa",
"kind": "state",
"properties": {
"fips": "19",
"abbreviation": "IA",
"area_sq_mi": 56272.81
},
"geometry": null
}],
"zoom": {
"optimal": 4,
"min": 0,
"max": 6
},
"metadata": {
"name": "US States",
"description": "U.S. state boundaries",
"category": "administrative"
}
},
"counties": {
"layer": "counties",
"type": "vector",
"status": "ok",
"feature_count": 1,
"features": [{
"id": "19169",
"name": "Story County",
"kind": "county",
"properties": {
"fips": "19169",
"state_fips": "19",
"state_name": "Iowa",
"area_sq_mi": 573.21,
"population": 98537
},
"geometry": null
}],
"zoom": {
"optimal": 6,
"min": 0,
"max": 8
},
"metadata": {
"name": "US Counties",
"description": "U.S. county boundaries",
"category": "administrative"
}
},
"townships": {
"layer": "townships",
"type": "vector",
"status": "ok",
"feature_count": 1,
"features": [{
"id": "IA050830N0220W0",
"name": "T83N R22W",
"kind": "plss_township",
"properties": {
"township": "83N",
"range": "22W",
"principal_meridian": "5th Principal Meridian",
"state": "IA",
"area_acres": 23040
},
"geometry": null
}],
"zoom": {
"optimal": 10,
"min": 8,
"max": 12
},
"metadata": {
"name": "PLSS Townships",
"description": "PLSS township boundaries",
"category": "land"
}
}
},
"summary": {
"layers_queried": ["states", "counties", "townships"],
"total_features_found": 3,
"processing_time_ms": 86
},
"query": {
"lat": 42.0308,
"lng": -93.4816,
"requested_layers": ["states", "counties", "townships"],
"options": {
"include_geometry": false,
"include_metadata": true
},
"timestamp": "2026-05-03T23:22:00.000Z",
"account_id": "acct_..."
}
}