Programmatically read and write geographic features from your projects. Available on Pro and Business plans. All responses are GeoJSON or JSON. All requests must include an Authorization: Bearer <api-key> header.
curl -H "Authorization: Bearer wkt_live_xxxxxxxx" \
"https://wktstudio.com/api/v1/projects/{projectId}/features"| Plan | Calls / month | Max features / call |
|---|---|---|
| Pro | 1,000 | 1,000 |
| Business | 10,000 | 10,000 |
The X-Rate-Limit-Remaining header is included on every GET response.
/api/v1/projects/{projectId}/layersCreate a new layer in a project. Optionally include features to populate it immediately.
Request body
{
"name": "My layer",
"features": [
{
"type": "Feature",
"geometry": { "type": "Polygon", "coordinates": [[...]] },
"properties": { "name": "Zone A" }
}
]
}features is optional — omit it to create an empty layer.
curl -X POST "https://wktstudio.com/api/v1/projects/abc123/layers" \
-H "Authorization: Bearer wkt_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Lima polygons",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[[-77.0428,-12.0464],[-77.0328,-12.0464],[-77.0328,-12.0364],[-77.0428,-12.0364],[-77.0428,-12.0464]]]
},
"properties": { "name": "Plaza Mayor" }
}
]
}'{ "layerId": "layer_1748000000000", "name": "Lima polygons", "featuresAdded": 1 }/api/v1/projects/{projectId}/featuresReturns all features in a project as a GeoJSON FeatureCollection.
Query parameters
| Param | Type | Description |
|---|---|---|
| layer | string | Filter by layer ID |
| name | string | Filter features by name (contains) |
| bbox | string | Bounding box: minLng,minLat,maxLng,maxLat |
| limit | number | Max results (default 100, max 1,000) |
| offset | number | Pagination offset (default 0) |
curl "https://wktstudio.com/api/v1/projects/abc123/features?bbox=-77.1,-12.1,-76.9,-11.9&limit=50" \
-H "Authorization: Bearer wkt_live_xxxxxxxx"{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": { "type": "Polygon", "coordinates": [[...]] },
"properties": {
"name": "Zona 1",
"_layerId": "layer_1234",
"_layerName": "Lima polygons",
"_wkt": "POLYGON((-77.03 -12.04, ...))"
}
}
],
"meta": { "total": 42, "limit": 50, "offset": 0, "hasMore": false }
}/api/v1/projects/{projectId}/featuresAppend features to an existing layer. Does not replace existing features.
Request body
{
"layerId": "layer_1234",
"features": [
{
"type": "Feature",
"geometry": { "type": "Point", "coordinates": [-77.03, -12.04] },
"properties": { "name": "Lima Centro" }
}
]
}curl -X POST "https://wktstudio.com/api/v1/projects/abc123/features" \
-H "Authorization: Bearer wkt_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"layerId":"layer_1234","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-77.03,-12.04]},"properties":{"name":"Lima Centro"}}]}'{ "added": 1, "total": 43 }/api/v1/projects/{projectId}/featuresDelete a single feature by index. Only the project owner can delete.
Request body
{
"layerId": "layer_1234",
"featureIndex": 0
}featureIndex is zero-based. Use GET first to identify the index of the feature you want to remove.
curl -X DELETE "https://wktstudio.com/api/v1/projects/abc123/features" \
-H "Authorization: Bearer wkt_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"layerId":"layer_1234","featureIndex":0}'{ "deleted": true, "remaining": 42 }| Status | Meaning |
|---|---|
| 401 | Missing or malformed Authorization header |
| 403 | Invalid API key, wrong plan, or no access to project |
| 404 | Project or layer not found |
| 422 | Feature limit exceeded or invalid featureIndex |
| 429 | Monthly API call limit reached |
Need higher limits? Upgrade to Business →