Labels Manager
The Labels Manager is an org-level label library that lets you define a set of labels once and reuse them across projects. Useful when several projects share an ontology (e.g. "PII categories", "sentiment values", "African-language POS tags") and you want one canonical source of truth.
Without Labels Manager, every project's <Labels> / <Choices>
list is hard-coded into its XML β meaning a label-naming change has
to be made N times if N projects use it.
Where it livesβ
Organization β Resources β Labels (/organization/resources/labels).
The Resources tab groups the org's reusable assets β
Templates, Consent, Labels and Knowledge bases β behind one top-level
tab with a rail of sections on the left. Visible to org Owner, Admin, and
Manager.
Conceptsβ
Two model types:
- Label β a single label entry. Has a
value(the string the XML uses and annotation results store), atitle(the human-friendly display annotators see), and an optionaldescription(tooltip shown to annotators). - LabelLink β joins a Label to one project's
<Labels>/<Choices>tag, identified by the tag's name (from_name). A label can be linked into many projects via many LabelLinks. Editing the Label updates everywhere it's linked.
So the model is:
Two LabelLinks β same label, two projects.
Create a labelβ
- Organization β Resources β Labels β + New label
- Fill in:
- Value β the literal string used in XML and stored in
annotation results (e.g.
POSITIVE). Pick it carefully β titles can be renamed safely later, values require an annotation-history rewrite. - Title β the display label shown to annotators
(e.g.
Positive sentiment) - Description β optional tooltip / help text
- Link to projects β type to search, click to add one or more projects. At least one is required β a label is always created linked.
- from_name β the name of the
<Labels>/<Choices>tag in the linked project's config (e.g.sentiment). Applied to every project you picked; if a project uses a different tag name, link it separately afterwards.
- Value β the literal string used in XML and stored in
annotation results (e.g.
- Click Create
The label lands in the library with a LabelLink to each project you picked.
Link to another projectβ
From the label's card in the library:
- In + link to projectβ¦, type the project name and pick it
- Enter the tag's
from_namein that project's config - Click Link
Each link shows as a chip: project name, from_name, and the
count of annotations using the label there. Click the chip's Γ
to unlink.
Editing labelsβ
Two renames, with very different blast radii:
- Rename title β safe. Display-only; propagates to every linked project. The stored annotation values don't change.
- Rename valueβ¦ β risky, and the UI says so. This rewrites
the value in existing annotations across the label's linked
projects (via
POST /api/labels/bulk), then updates the library entry. The confirmation toast reports how many annotations were updated. Use it only when you mean to rewrite history β exports made before the rename will still carry the old value.
Delete a labelβ
Delete is only available after every LabelLink has been removed β unlink it from each project first (links keep annotations attributable). Deleting removes the label from the library; existing annotations are not touched.
There is no archive state β a label is either in the library or deleted.
Why use itβ
A few common scenarios:
Shared ontologies across projectsβ
Your org runs five sentiment-analysis projects on five different
text corpora. Without Labels Manager, you'd hard-code POSITIVE /
NEUTRAL / NEGATIVE into each project's XML. Six months later
you decide to add MIXED β you'd have to edit five XMLs.
With Labels Manager, you add MIXED to the library once and link
it into each project.
Hierarchical taxonomiesβ
Your team labels animals with a 3-level taxonomy (kingdom β phylum β species, with hundreds of entries). Maintaining that as inline XML is painful. As a library, you define each label once, then link it into every project that needs it.
APIβ
Labels Manager is exposed via REST. All endpoints are scoped to your active organization:
# List labels with their project links
curl "{{platformURL}}/api/labels/?expand=links" \
-H "Authorization: Bearer YOUR_PAT"
# Create a label linked to a project (takes an array; one project
# per request β add more projects via label_links)
curl -X POST "{{platformURL}}/api/labels/" \
-H "Authorization: Bearer YOUR_PAT" \
-H "Content-Type: application/json" \
-d '[{"value": "POSITIVE", "title": "Positive", "description": "",
"project": 12, "from_name": "sent"}]'
# Link an existing label to another project
curl -X POST "{{platformURL}}/api/label_links/" \
-H "Authorization: Bearer YOUR_PAT" \
-H "Content-Type: application/json" \
-d '{"label": 42, "project": 13, "from_name": "kind"}'
# Safe title edit
curl -X PATCH "{{platformURL}}/api/labels/42/" \
-H "Authorization: Bearer YOUR_PAT" \
-H "Content-Type: application/json" \
-d '{"title": "Positive sentiment"}'
# Risky value rename β rewrites existing annotation values
curl -X POST "{{platformURL}}/api/labels/bulk" \
-H "Authorization: Bearer YOUR_PAT" \
-H "Content-Type: application/json" \
-d '{"old_label": "POSITIVE", "new_label": "POS"}'
When NOT to use Labels Managerβ
For projects with one-off, project-specific labels that won't ever be reused, inlining in XML is fine. Labels Manager has a small overhead β every label needs a row in the database, every link adds a join. For 5-label classification projects that don't share labels with anything else, hard-coded XML is simpler.
What's nextβ
- Labeling config β β XML grammar
- Tag reference β β the
<Labels>tag - Templates β β starter labeling configs with pre-filled labels you can promote to library entries