Skip to main content

Project Shapefiles (Map Layers) API Reference

The project routes under /v1/projects/{projectId}/shapefiles work with the map layers in a single project. They follow the same workflows as the top-level routes. Read the Shapefiles (Map Layers) API Reference first: it covers the zip upload and GeoJSON workflows, jobs, name rules and limits.

This page covers what is different on a project route.


Differences from the Top-Level Routes​

OperationOn a project route
List, get, HEAD, featuresOnly layers in this project. Company layers are not included. There are no scope or projectId filters; name is supported.
Create (zip import or GeoJSON)The layer is always created in this project. Don't send scope or projectIds.
Zip uploadsAn upload reserved on /v1/projects/{projectId}/shapefiles/uploads must be imported on the same project's /uploads/{uploadId}.
Update (PATCH)Not available. Use PATCH /v1/shapefiles to rename a layer or change its projects.
DeleteRemoves the layer from this project, and only deletes it if no other project uses it. See below.
JobsOnly upload and delete jobs that involved this project.

projectIds on each layer still lists every project the layer belongs to, not just this one.


Name Rules in a Project​

A layer created on a project route can't use a name already used by:

  • another layer in this project, or
  • any company layer.

A conflict returns 409. See Layer Names for the response body and how to resolve it.


Deleting from a Project​

DELETE /v1/projects/66aa1b2c3d4e5f6a7b8c9d0e/shapefiles/6703e9a1b2c3d4e5f6a7b8c9

The result depends on which projects use the layer:

The layer belongs toResultResponse
Only this projectThe layer is deleted, in the background202 with a delete jobId
This project and othersThe layer is removed from this project and stays in the others200, immediately
Not this project, or it is a company layerNothing changes404

When the layer is removed from this project only:

{
"id": "6703e9a1b2c3d4e5f6a7b8c9",
"result": "unlinked",
"remainingProjectIds": ["66bb1b2c3d4e5f6a7b8c9d0f"]
}

The name is available in this project straight away, so you can create a new layer with the same name without waiting. After a 202, wait for the delete job to succeed before re-using the name.

To delete a shared layer from every project at once, use DELETE /v1/shapefiles/{id}. Company layers can only be deleted there.


Example: Upload a Zip into a Project​

POST /v1/projects/{projectId}/shapefiles/uploads              → uploadId, uploadUrl
PUT <uploadUrl> → upload the zip to cloud storage
POST /v1/projects/{projectId}/shapefiles/uploads/{uploadId} → 202 { jobId }
GET /v1/projects/{projectId}/shapefiles/jobs/{jobId} → poll until successful

The import body has only the layer's details:

{
"name": "DSU Outlines",
"description": "Q3 DSUs",
"color": "#a0a0a0"
}

See Workflow A: Upload a Shapefile Zip for each step in detail.