Skip to main content

Issues End-to-End Guide

This guide explains how to use the Issues feature in Encord. Each step in the process is intended for a specific user role, which is indicated in the heading of that step.
This guide assumes you have already added data into Encord and set up your annotation Projects.

STEP 1: [Workspace Admin] Create Issue Tags

Issue tags can be created in the Workspace Settings by Workspace admins, or the Project Settings by Project admins.
For more information, refer to our Issue Tags documentation.
Issue tags serve as a system to categorize, group, and filter issues within Projects.
  1. Click Settings in the My workspace section. The Users page appears.
  2. Navigate to the Issue Tags tab. The Issue Tags page appears.
  3. Click + New issue tag to create a new issue tag for your Workspace.
  1. Give your Issue Tag a meaningful name and press ENTER to create the Issue Tag.
  2. Repeat Steps 3 and 4 to create as many Issue Tags as necessary.

Delete Issue Tags

You can delete issue tags individually or in bulk: To delete a single issue tag:
  1. Click the delete icon next to the issue tag you want to remove.
  2. Confirm the deletion when prompted.
To delete multiple issue tags:
  1. Select the checkboxes next to the issue tags you want to delete.
  2. Click the Delete selected button that appears.
  3. Confirm the bulk deletion when prompted.
Deleting issue tags is permanent and cannot be undone. Ensure you no longer need these tags before proceeding.

STEP 2: [Admin] Add Issue Tags

  1. Navigate to your annotation Project.
  2. Navigate to the Settings tab.
  3. Click the dropdown in the Issue tags section.
  4. Select, or type the name of, the issue tag you want to add to the Project.

STEP 3: [Annotator / Reviewer] Create Issues

For more information, refer to the Issues documentation.
Issues cannot be created in a Consensus annotate stage.
  1. Open a review task from the Queue tab of your annotation Project.
  2. Reject a label. The Issues pane opens.
  3. Select any Issue Tags you want to apply to the issue.
  4. Add a comment explaining why the label is being rejected.
  5. Click Reject to create the label rejection Issue.
  1. Click Reject task to reject the task.
  1. Open a task from the Queue tab of your annotation Project.
  2. Open the Issues pane by clicking the Issues icon.
  3. Click the New issue icon (or keyboard shortcut Ctrl+N).
  4. Click the Apply to dropdown to select the type of issue you want to create.
  5. Select any Issue Tags you want to apply to the issue.
  6. Add a comment to the issue.
  7. If you selected ‘Pin on canvas’ in Step 3, click the desired location on the canvas.
  8. Click Create issue.

STEP 4: [Annotator / Reviewer] Resolve Issues

More information can be found in the Issues documentation.
  1. Open a task from the Queue tab of your annotation Project. Rejected tasks The Label Editor with the Issues pane already opened appears.
  2. Address the problem raised by the Issue.
  3. Add a reply to the Issue acknowledging the issue has been addressed.
  4. Resolve the Issue by clicking the tick icon on the thread.

STEP 5: [Project Admin / Team Manager] Issue Analytics

The number of issue actions taken by each Project collaborator can be viewed in the Collaborators tab.
  1. Navigate to the Analytics tab of your Project.
  2. Navigate to the Issues section. Analytics pertaining to Issues appear.
ChartDescription
Issue actionsShows the number of issues created, resolved, and opened.
Issue tag occurrenceShows the count of all issue tags used within the chosen timeframe.
Issue tag occurrence by classShows the actions taken for all objects and classifications in the Ontology.
The Issue actions chart shows the following:
  • Total issues created: The total number of issues created.
  • Total issues resolved: The number of issues marked as resolved.
  • Total issues reopened: The number of issues that were reopened.
Example - How to Understand Issue Analytics: If your Issue actions chart shows:
  • Total issues created = 19
  • Total issues resolved = 20
  • Total issues reopened = 2
This means that:
  • 19 issues were created.
  • All 19 issues were resolved.
  • 2 resolved issues were reopened. (This includes manually reopening an issue and re-rejections of labels)
  • 1 of the reopened issues was resolved.
  • There is one remaining open issue.

Creating Issues With Agents

Issues can be created inside an Agent Workflow Stage. The following example shows how to list all issues, and create file-level, frame-level, and coordinate-level issues on tasks within an Agent stage.
from encord import EncordUserClient
from encord.workflow import AgentStage

# User input
SSH_PATH = "<private_key_path>"  # Replace with the file path to your SSH private key
PROJECT_ID = "<project_id>"      # Replace with the unique Project ID
AGENT_STAGE_NAME = "<agent_stage_name>"  # Replace with the name of your Agent stage

# --- Connect to Encord ---
user_client = EncordUserClient.create_with_ssh_private_key(
    ssh_private_key_path=SSH_PATH,
    # For US platform users use "https://api.us.encord.com"
    domain="https://api.encord.com",
)

# Get Project and Workflow
project = user_client.get_project(PROJECT_ID)
workflow = project.workflow

# Get the Agent stage and iterate over its tasks
agent_stage = workflow.get_stage(name=AGENT_STAGE_NAME, type_=AgentStage)
for task in agent_stage.get_tasks():

    # List all existing issues on the task
    existing_issues = list(task.issues.list())
    print(f"Task {task.uuid} has {len(existing_issues)} existing issue(s)")

    # Add a file-level issue (applies to the entire data unit)
    task.issues.add_file_issue(
        description="File is corrupted or unreadable",
    )

    # Add a frame-level issue (applies to a specific frame)
    task.issues.add_frame_issue(
        frame=0,
        description="Motion blur makes annotation impossible on this frame",
    )

    # Add a coordinate-level issue (applies to a specific location within a frame)
    task.issues.add_coordinate_issue(
        frame=0,
        x=0.5,
        y=0.5,
        description="Ambiguous object boundary at this location",
    )

    print(f"Issues added to task {task.uuid}")