Tasks are the individual mapping units within a Tasking Manager project. Each task corresponds to a geographic tile or custom polygon that a mapper can lock, edit in an external editor (iD, JOSM, RAPID, etc.), and submit back with a status. Validators then review mapped tasks, marking themDocumentation 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.
VALIDATED or sending them back as INVALIDATED. This page documents all task resource and action endpoints.
All authenticated endpoints require an Authorization: Token <session_token> header. The API base path is /api/v2.
Task Resources
List All Tasks for a Project
GET/api/v2/projects/{project_id}/tasks/
Returns all tasks for a project as a GeoJSON FeatureCollection. Private or draft projects enforce authentication. Optionally filter to a specific subset of task IDs, or download the result as a file.
Path Parameters
Unique project ID.
Query Parameters
Comma-separated list of task IDs to retrieve (e.g.,
1,2,5). Omit to retrieve all tasks.When
true, returns the response as a downloadable application/geo+json file.Responses
| Status | Description |
|---|---|
200 | GeoJSON FeatureCollection of tasks. |
403 | User not permitted to access private or draft project. |
404 | Project not found. |
500 | Internal server error. |
Get a Single Task
GET/api/v2/projects/{project_id}/tasks/{task_id}/
Returns metadata for a single task, including its current status, lock holder, task history, and geometry. No authentication required for public projects.
Path Parameters
Project ID the task belongs to.
Unique task ID within the project.
Response Fields
The task’s numeric ID within the project.
Current task status. One of:
READY, LOCKED_FOR_MAPPING, MAPPED, LOCKED_FOR_VALIDATION, VALIDATED, INVALIDATED, BADIMAGERY, SPLIT.OSM username of the user who currently holds the lock, or
null if unlocked.Ordered list of status-change history events for this task.
GeoJSON geometry for the task boundary.
Responses
| Status | Description |
|---|---|
200 | Task metadata returned. |
404 | Task or project not found. |
500 | Internal server error. |
Get Mapped Tasks by User
GET/api/v2/projects/{project_id}/tasks/queries/mapped/
Returns all mapped tasks for a project grouped by the username of the mapper.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Mapped tasks returned, grouped by mapper username. |
500 | Internal server error. |
Get Tasks as OSM XML
GET/api/v2/projects/{project_id}/tasks/queries/xml/
Returns tasks for a project in OSM XML format, suitable for import into JOSM or other OSM editors.
Path Parameters
Unique project ID.
Query Parameters
Comma-separated task IDs. Omit to retrieve all tasks.
When
true, returns the response as a downloadable .osm file.Responses
| Status | Description |
|---|---|
200 | OSM XML returned. |
400 | Client error. |
404 | No mapped tasks found. |
500 | Internal server error. |
Get Tasks as GPX
GET/api/v2/projects/{project_id}/tasks/queries/gpx/
Returns tasks for a project in GPX format.
Path Parameters
Unique project ID.
Query Parameters
Comma-separated task IDs. Omit to retrieve all tasks.
When
true, returns the response as a downloadable .gpx file.Responses
| Status | Description |
|---|---|
200 | GPX XML returned. |
400 | Client error. |
404 | No mapped tasks found. |
500 | Internal server error. |
Task Actions
The task action endpoints form the core of the mapping and validation workflow. The typical lifecycle is:- Lock the task (
lock-for-mapping) - Edit features in your chosen editor using the task’s bounding box
- Unlock with a result status (
unlock-after-mapping)
lock-for-validation and unlock-after-validation.
Lock Task for Mapping
POST/api/v2/projects/{project_id}/tasks/actions/lock-for-mapping/{task_id}/
Locks a READY or INVALIDATED task for the authenticated user to map. Only one task per project may be locked by a user at a time. Returns the updated task object.
If the project requires a license agreement and the user has not accepted it, this endpoint returns
409 Conflict with SubCode: UserLicenseError.Path Parameters
Project ID the task belongs to.
ID of the task to lock.
Responses
| Status | Description |
|---|---|
200 | Task locked. Returns updated task DTO. |
400 | Invalid request. |
401 | Missing or invalid token. |
403 | Task cannot be locked (e.g., already locked, wrong status, insufficient mapping level). |
404 | Task or project not found. |
409 | User has not accepted the project’s license terms. |
500 | Internal server error. |
Unlock After Mapping (Submit Result)
POST/api/v2/projects/{project_id}/tasks/actions/unlock-after-mapping/{task_id}/
Unlocks a task after the user has finished editing, submitting a new status. The mapper must currently hold the lock on the task.
Path Parameters
Project ID the task belongs to.
ID of the task to unlock.
Request Body
The result status for the task. Valid values:
MAPPED (edit complete), BADIMAGERY (imagery quality prevents mapping), READY (return to ready without mapping).Optional text comment for the task history log.
Responses
| Status | Description |
|---|---|
200 | Task unlocked. Returns updated task DTO. |
400 | Invalid request body or status value. |
401 | Missing or invalid token. |
403 | User does not hold the lock on this task. |
404 | Task or project not found. |
500 | Internal server error. |
Stop Mapping (Release Lock Without Submitting)
POST/api/v2/projects/{project_id}/tasks/actions/stop-mapping/{task_id}/
Releases the mapping lock without changing the task status. Use this when a mapper needs to abandon a task mid-session. The task reverts to its previous status.
Path Parameters
Project ID.
ID of the locked task.
Request Body
Optional comment added to the task history.
Responses
| Status | Description |
|---|---|
200 | Lock released. Returns updated task DTO. |
400 | Invalid request body. |
401 | Missing or invalid token. |
403 | User does not hold the lock on this task. |
404 | Task or project not found. |
Undo Last Action
POST/api/v2/projects/{project_id}/tasks/actions/undo-last-action/{task_id}/
Reverts a task to its previous status, undoing the last mapping or validation action. Requires authentication.
Path Parameters
Project ID.
ID of the task to revert.
Responses
| Status | Description |
|---|---|
200 | Task reverted. Returns updated task DTO. |
403 | User is not permitted to undo this action. |
404 | Task or project not found. |
500 | Internal server error. |
Lock Tasks for Validation
POST/api/v2/projects/{project_id}/tasks/actions/lock-for-validation/
Locks one or more MAPPED tasks for validation by the authenticated user. Accepts an array of task IDs. Returns the list of locked tasks.
Path Parameters
Project ID.
Request Body
Array of integer task IDs to lock for validation. All tasks must be in
MAPPED status.Responses
| Status | Description |
|---|---|
200 | Tasks locked. Returns list of locked task objects. |
400 | Invalid request body. |
401 | Missing or invalid token. |
403 | Tasks cannot be locked (wrong status, insufficient validator level, etc.). |
404 | Project not found. |
409 | User has not accepted the project’s license terms. |
500 | Internal server error. |
Unlock After Validation (Submit Validation Result)
POST/api/v2/projects/{project_id}/tasks/actions/unlock-after-validation/
Submits validation results for one or more tasks currently locked for validation by the authenticated user.
Path Parameters
Project ID.
Request Body
Array of validation result objects.
Responses
| Status | Description |
|---|---|
200 | Validation submitted. Returns list of updated task objects. |
400 | Invalid request body. |
401 | Missing or invalid token. |
403 | User does not hold the validation lock on one or more tasks. |
404 | Project not found. |
500 | Internal server error. |
Stop Validation (Release Validation Lock)
POST/api/v2/projects/{project_id}/tasks/actions/stop-validation/
Releases validation locks without submitting results, reverting locked tasks to their previous status. Used when a validator needs to abandon a session.
Path Parameters
Project ID.
Request Body
Array of task objects to release.
Responses
| Status | Description |
|---|---|
200 | Locks released. Returns updated task list. |
400 | Invalid request body. |
401 | Missing or invalid token. |
403 | User does not hold the lock on one or more tasks. |
404 | Project not found. |
Extend Task Lock Time
POST/api/v2/projects/{project_id}/tasks/actions/extend/
Extends the lock expiry time for one or more tasks currently locked by the authenticated user. Useful for long mapping sessions.
Path Parameters
Project ID.
Request Body
Array of integer task IDs whose lock time should be extended.
Responses
| Status | Description |
|---|---|
200 | Lock time extended. Body: {"Success": "Successfully extended task expiry"} |
400 | Invalid request body. |
401 | Missing or invalid token. |
403 | User does not hold the lock on one or more tasks. |
404 | Project not found. |
500 | Internal server error. |
Map All Tasks
POST/api/v2/projects/{project_id}/tasks/actions/map-all/
Marks all tasks in the project as MAPPED. Requires project manager or admin role.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Body: {"Success": "All tasks mapped"} |
401 | Missing or invalid token. |
403 | User is not a project manager. |
500 | Internal server error. |
Validate All Tasks
POST/api/v2/projects/{project_id}/tasks/actions/validate-all/
Marks all mapped tasks in the project as VALIDATED. Requires project manager or admin role.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Body: {"Success": "All tasks validated"} |
401 | Missing or invalid token. |
403 | User is not a project manager. |
500 | Internal server error. |
Invalidate All Tasks
POST/api/v2/projects/{project_id}/tasks/actions/invalidate-all/
Marks all validated tasks in the project as INVALIDATED. Requires project manager or admin role.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Body: {"Success": "All tasks invalidated"} |
401 | Missing or invalid token. |
403 | User is not a project manager. |
500 | Internal server error. |
Reset Bad Imagery Tasks
POST/api/v2/projects/{project_id}/tasks/actions/reset-all-badimagery/
Resets all tasks in BADIMAGERY status back to READY, allowing them to be picked up for mapping again. Requires project manager or admin role.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Body: {"Success": "All bad imagery tasks marked ready for mapping"} |
401 | Missing or invalid token. |
403 | User is not a project manager. |
500 | Internal server error. |
Reset All Tasks
POST/api/v2/projects/{project_id}/tasks/actions/reset-all/
Resets every task in the project back to READY status, preserving the task history. Requires project manager or admin role.
Path Parameters
Unique project ID.
Responses
| Status | Description |
|---|---|
200 | Body: {"Success": "All tasks reset"} |
401 | Missing or invalid token. |
403 | User is not a project manager. |
500 | Internal server error. |
Revert Tasks by User
POST/api/v2/projects/{project_id}/tasks/actions/reset-by-user/
Reverts tasks previously actioned by a specific user within the project. For example, reverts all tasks a user marked as BADIMAGERY or VALIDATED. Requires project manager or admin role.
Path Parameters
Project ID.
Query Parameters
Username of the user whose task actions should be reverted.
The action type to revert. Valid values:
BADIMAGERY, VALIDATED.Responses
| Status | Description |
|---|---|
200 | Body: {"Success": "Successfully reverted tasks"} |
400 | Username or action not provided, or invalid data. |
401 | Missing or invalid token. |
403 | User is not a project manager. |
500 | Internal server error. |
Split a Task
POST/api/v2/projects/{project_id}/tasks/actions/split/{task_id}/
Splits a single task into four smaller subtasks. Only tasks in READY status that cover a minimum area and have not reached the maximum zoom level can be split. Returns the newly created subtask objects.
Path Parameters
Project ID.
ID of the task to split. The task must be in
READY status and large enough to subdivide.Responses
| Status | Description |
|---|---|
200 | Task split. Returns the four new subtask objects. |
400 | Invalid request. |
401 | Missing or invalid token. |
403 | Task cannot be split (too small, wrong status, or insufficient permissions). |
404 | Task or project not found. |
500 | Internal server error. |
Task Statistics
Get Task Statistics
GET/api/v2/tasks/statistics/
Returns aggregated task completion statistics across the platform, filterable by date range, organisation, campaign, project, and country. Requires authentication. Date range cannot exceed 366 days.
This is a global statistics endpoint under
/api/v2/tasks/, not under a specific project. Use the project statistics endpoint (/api/v2/projects/{project_id}/statistics/) for per-project counts.Query Parameters
Start date in
YYYY-MM-DD format. Defines the lower bound of the date range.End date in
YYYY-MM-DD format. Defaults to today. Cannot be earlier than startDate. Date range cannot exceed 366 days.Filter by organisation ID.
Filter by organisation name.
Filter by campaign name.
Comma-separated project IDs to filter results.
Filter by country name.
Responses
| Status | Description |
|---|---|
200 | Task statistics returned. |
400 | Invalid date format or range exceeds 366 days. |
401 | Missing or invalid token. |
500 | Internal server error. |