Projects are the core unit of collaborative mapping in Tasking Manager. Each project defines an area of interest divided into tasks, a mapping difficulty, permitted editors, and metadata such as a campaign and organization. The endpoints below cover the full project lifecycle — from creating a draft to publishing, monitoring activity, and archiving. All authenticated endpoints expect anDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/hotosm/tasking-manager/llms.txt
Use this file to discover all available pages before exploring further.
Authorization: Token <session_token> header. Responses are JSON unless otherwise noted. The API base path is /api/v2.
Project CRUD
List and Search Projects
Authentication is optional. Unauthenticated requests return only published, public projects. Some filters (e.g.,
createdByMe, managedByMe) are silently ignored when no token is provided./api/v2/projects/
Returns a paginated list of projects matching the supplied filters. Supports ordering, filtering by mapping type, campaign, organisation, difficulty, status, country, and date ranges.
Query Parameters
Filter by project difficulty. Valid values:
EASY, MODERATE, CHALLENGING.Filter by possible user action. Valid values:
map, validate, any.Comma-separated mapping types to filter by. Valid values:
ROADS, BUILDINGS, WATERWAYS, LAND_USE, OTHER.When
true, only projects that match all listed mapping types are returned.Filter by organisation name.
Filter by organisation ID.
Filter by campaign name.
Filter by team membership on the project.
Filter by country name.
Free-text search across project name and description.
Comma-separated statuses. Valid values:
DRAFT, PUBLISHED, ARCHIVED. Project managers can access DRAFT and ARCHIVED.Sort field. Valid values:
id, difficulty, priority, status, last_updated, due_date.Sort direction. Valid values:
ASC, DESC.Page number (1-indexed).
When
true, omits project centroid geometries from the response, reducing payload size.ISO 8601 date. Return only projects last updated on or after this date.
ISO 8601 date. Return only projects last updated on or before this date.
ISO 8601 date. Return only projects created on or after this date.
ISO 8601 date. Return only projects created on or before this date.
Comma-separated interest IDs to filter projects by interest category.
Limit results to projects created by the authenticated user.
Limit results to projects the authenticated user has contributed to.
Limit results to projects favorited by the authenticated user.
Limit results to projects manageable by the authenticated user (excluding those they created).
Filter projects based on the authenticated user’s recorded interests.
When
true, streams results as a CSV file instead of JSON. Cannot be combined with omitMapResults=true.Filter by partner ID. Admin-only — requires authentication.
ISO 8601 date. Filter projects whose partnership started on or after this date. Requires
partnerId.ISO 8601 date. Filter projects whose partnership ended on or before this date. Requires
partnerId.Responses
| Status | Description |
|---|---|
200 | Projects found. Returns paginated results object or empty lists when none match. |
400 | Invalid query parameters or conflicting filter combination. |
500 | Internal server error. |
Create a Project
POST/api/v2/projects/
Creates a new draft project. Requires the caller to be a Project Manager or Admin.
Request Body
Human-readable project name.
GeoJSON
FeatureCollection defining the mapping boundary.GeoJSON
FeatureCollection of pre-defined task geometries. Leave empty or omit to use grid-based task generation.When
true, tasks are not constrained to a grid.ID of the organisation this project belongs to.
If provided, the new project clones settings from this existing project ID.
Responses
| Status | Description |
|---|---|
201 | Draft project created. Body: {"projectId": <int>} |
400 | Invalid request body or GeoJSON. |
401 | Missing or invalid token. |
403 | User lacks Project Manager role. |
Get a Project
GET/api/v2/projects/{project_id}/
Returns full project details including task grid, localized info, and mapping metadata. Authentication is optional; private or draft projects require a valid token and appropriate permissions.
Path Parameters
Unique project ID.
Query Parameters
When
true, returns the project as a downloadable JSON file attachment.When
true, returns only project status information (lightweight response).Responses
| Status | Description |
|---|---|
200 | Project found. Returns full ProjectDTO object. |
403 | User is not permitted to view this private or draft project. |
404 | Project not found. |
500 | Internal server error. |
Update a Project
PATCH/api/v2/projects/{project_id}/
Updates an existing project. The caller must be a project manager or admin for this project. Requires a valid token.
Path Parameters
Unique project ID.
Request Body
New project status. Valid values:
DRAFT, PUBLISHED, ARCHIVED.Priority level. Valid values:
URGENT, HIGH, MEDIUM, LOW.Mapper skill level required. Valid values:
EASY, MODERATE, CHALLENGING.Default locale code (e.g.,
en, fr).OSM changeset comment prepended to mapper edits (e.g.,
#hotosm-project-1234).Array of mapping type strings. Valid values:
ROADS, BUILDINGS, WATERWAYS, LAND_USE, OTHER.Editors allowed for mapping. Valid values:
ID, JOSM, POTLATCH_2, FIELD_PAPERS, RAPID, CUSTOM.Editors allowed for validation. Same values as
mappingEditors.When
true, only explicitly allowed users can see and contribute.ISO 8601 datetime for the project’s target completion date.
Background imagery URL for mappers.
Organisation ID for this project.
Campaign name to associate with this project.
Array of country name strings for geographic tagging.
For private projects: list of OSM usernames who may access the project.
Who can map. Valid values:
ANY, TEAMS.Who can validate. Valid values:
ANY, TEAMS.Array of localized project info objects with fields
locale, name, shortDescription, description, instructions, perTaskInstructions.Responses
| Status | Description |
|---|---|
200 | Project updated. Body: {"Status": "Updated"} |
400 | Invalid request body or GeoJSON. |
401 | Missing or invalid token. |
403 | User is not a project manager for this project. |
404 | Project not found. |
Delete a Project
DELETE/api/v2/projects/{project_id}/
Permanently deletes a project. The caller must be a project manager or admin for this project.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Project deleted. Body: {"Success": "Project deleted"} |
401 | Missing or invalid token. |
403 | User does not have permission to delete this project. |
404 | Project not found. |
Project Queries
Get Project Summary
GET/api/v2/projects/{project_id}/queries/summary/
Returns a lightweight summary of a project. Private or draft projects enforce authentication and permission checks.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Project summary returned. |
403 | User not permitted to view private or draft project. |
404 | Project not found. |
500 | Internal server error. |
Get Featured Projects
GET/api/v2/projects/queries/featured/
Returns projects that have been marked as featured. No authentication required.
Responses
| Status | Description |
|---|---|
200 | Featured projects returned. |
500 | Internal server error. |
Get Projects by Bounding Box
GET/api/v2/projects/queries/bbox/
Returns projects whose area of interest intersects with the supplied bounding box. Requires a valid token and the user must manage at least one organisation.
Query Parameters
Comma-separated bounding box coordinates:
xmin,ymin,xmax,ymax.Spatial reference ID of the bbox coordinates.
Limit to projects created by the authenticated user.
Responses
| Status | Description |
|---|---|
200 | Projects GeoJSON returned. |
400 | Invalid bounding box or bounding box too large. |
403 | User does not manage any organisation. |
500 | Internal server error. |
Get Own Projects (Admin)
GET/api/v2/projects/queries/myself/owner/
Returns all projects managed by the authenticated user. The caller must manage at least one organisation.
Responses
| Status | Description |
|---|---|
200 | Projects returned. |
401 | Missing or invalid token. |
403 | User does not manage any organisation. |
404 | No projects found. |
500 | Internal server error. |
Get Projects Touched by User
GET/api/v2/projects/queries/{username}/touched/
Returns projects that the specified user has mapped or validated.
Path Parameters
OSM username of the user.
Responses
| Status | Description |
|---|---|
200 | Mapped projects returned. |
404 | User not found. |
500 | Internal server error. |
Project Actions
Transfer Project Ownership
POST/api/v2/projects/{project_id}/actions/transfer-ownership/
Transfers ownership of a project to another user. The caller must be the current project manager or admin. Sends a notification to the new owner as a background task.
Path Parameters
Unique project ID.
Request Body
OSM username of the user to transfer project ownership to.
Responses
| Status | Description |
|---|---|
200 | Ownership transferred. Body: {"Success": "Project Transferred"} |
400 | Username not provided. |
401 | Missing or invalid token. |
403 | User is not authorized to transfer this project. |
Message All Contributors
POST/api/v2/projects/{project_id}/actions/message-contributors/
Sends an in-platform message to every user who has contributed to the project. Runs as a background task — the response is immediate while messages are dispatched asynchronously. Requires project manager or admin role.
Path Parameters
Unique project ID.
Request Body
Message subject line.
Message body text.
Responses
| Status | Description |
|---|---|
200 | Messaging job started. Body: {"Success": "Messages started"} |
400 | Invalid request body. |
401 | Missing or invalid token. |
403 | User is not a project manager. |
500 | Background task failed to start. |
Set Project as Featured
POST/api/v2/projects/{project_id}/actions/feature/
Marks a project as featured so it appears in the featured projects list. The caller must be a project manager or admin.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Project set as featured. Body: {"Success": true} |
401 | Missing or invalid token. |
403 | User is not a project manager. |
404 | Project not found. |
500 | Internal server error. |
Remove Project from Featured
POST/api/v2/projects/{project_id}/actions/remove-feature/
Removes a project from the featured list. The caller must be a project manager or admin.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Project removed from featured. Body: {"Success": true} |
401 | Missing or invalid token. |
403 | User is not a project manager. |
404 | Project not found. |
500 | Internal server error. |
Set Project Interests
POST/api/v2/projects/{project_id}/actions/set-interests/
Creates or replaces the interest associations for a project. The caller must be a project manager or admin.
Path Parameters
Unique project ID.
Request Body
Array of integer interest IDs to associate with the project.
Responses
| Status | Description |
|---|---|
200 | Interests updated. |
400 | Invalid request. |
401 | Missing or invalid token. |
403 | User is not a project manager. |
500 | Internal server error. |
Project Statistics
Get Project Statistics
GET/api/v2/projects/{project_id}/statistics/
Returns aggregated statistics for a project including counts of tasks by status (ready, mapped, validated, etc.) and contributor counts.
Path Parameters
Unique project ID.
Response Fields
Total number of tasks in the project.
Number of tasks in
MAPPED status.Number of tasks in
VALIDATED status.Number of tasks in
READY status.Number of tasks in
INVALIDATED status.Number of tasks in
BADIMAGERY status.Percentage of tasks that have been mapped.
Percentage of tasks that have been validated.
Responses
| Status | Description |
|---|---|
200 | Statistics returned. |
404 | Project not found. |
500 | Internal server error. |
Get Project User Statistics
GET/api/v2/projects/{project_id}/statistics/queries/{username}/
Returns detailed statistics about a specific user’s contributions to the project.
Path Parameters
Unique project ID.
OSM username to get statistics for.
Responses
| Status | Description |
|---|---|
200 | User project statistics returned. |
404 | User or project not found. |
500 | Internal server error. |
Get Project Activity Log
GET/api/v2/projects/{project_id}/activities/
Returns a paginated log of user mapping and validation activity events for a project, ordered by most recent first. Private or draft projects require authentication and appropriate permissions.
Path Parameters
Unique project ID.
Query Parameters
Page number for paginated results. Minimum value: 1.
Responses
| Status | Description |
|---|---|
200 | Activity log returned. |
403 | User not permitted to view private/draft project. |
404 | No activity found. |
500 | Internal server error. |
Favorites
Favorites allow authenticated users to bookmark projects they care about. Each endpoint operates on the authenticated user’s own favorites list.Check Favorite Status
GET/api/v2/projects/{project_id}/favorite/
Returns whether the authenticated user has favorited the specified project. Requires a valid token.
Path Parameters
Unique project ID.
Response Fields
true if the authenticated user has favorited this project, false otherwise.Responses
| Status | Description |
|---|---|
200 | Body: {"favorited": true} or {"favorited": false} |
401 | Missing or invalid token. |
Add Favorite
POST/api/v2/projects/{project_id}/favorite/
Adds the specified project to the authenticated user’s favorites. Requires a valid token.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
201 | Favorite added. Body: {"project_id": <int>} |
401 | Missing or invalid token. |
500 | Internal server error. |
Remove Favorite
DELETE/api/v2/projects/{project_id}/favorite/
Removes the specified project from the authenticated user’s favorites. Requires a valid token.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Favorite removed. Body: {"project_id": <int>} |
400 | Project was not in user’s favorites. |
401 | Missing or invalid token. |