Manage Trash

Projects and dataset versions moved to Trash are retained for 30 days before being permanently cleaned up. You can delete, list, and restore items through the REST API; permanent deletion is web-UI only (see the Permanent Deletion note at the bottom).

In-flight training jobs for a project or version are automatically cancelled when the item is moved to Trash.

Delete a Project

Move a project to Trash:

https://api.roboflow.com/:workspace/:project
curl "https://api.roboflow.com/my-workspace/my-detector?api_key=$ROBOFLOW_API_KEY" \
  -X DELETE

Example response:

{
  "deleted": true,
  "type": "project",
  "workspace": "my-workspace",
  "project": "my-detector",
  "projectId": "d_abc123",
  "trash": true
}

The calling API key must have the project:update scope.

Delete a Version

Move a single dataset version to Trash:

Example response:

The calling API key must have the version:update scope.

Delete a Workflow

Move a workflow to Trash:

Example response:

The calling API key must have the workflow:update scope.

List Items in Trash

List everything currently in the workspace Trash:

Example response:

Each item includes a scheduledCleanupAt timestamp — the point at which the item is eligible for permanent cleanup. Projects also carry a cleanupDeleteImages boolean indicating whether images exclusive to the project will be deleted along with it when cleanup runs.

The calling API key must have the project:read scope.

Restore an Item

Restore a project, version, or workflow from Trash:

For versions, you must also include the parent project id:

Restoring a version requires the parent project to still be active (not itself in Trash). If the parent is also in Trash, restore it first.

type must be one of project, version, or workflow. The required API-key scope is per-type — the request fails with 401 if the key doesn't carry the right scope for the item being restored:

type

Required scope

project

project:update

version

version:update

workflow

workflow:update

The endpoint also verifies that targetItem.owner === :workspace before delegating, so a key valid in workspace A cannot restore an item that lives in workspace B.

Permanent Deletion

Permanent deletion is intentionally not available on the REST API. The actions to empty Trash and to immediately delete a single Trash item destroy data irrecoverably, and we don't want a stray curl or automation to be able to trigger them. These actions are available only through the Trash view in the Roboflow web app.

Items left in Trash are cleaned up automatically after the 30-day retention window.

Last updated

Was this helpful?