Organising instruments with tags
This guide shows how to build a tag hierarchy, assign tags to instruments in bulk, and query instruments by their position in the tag tree. Tags are a powerful alternative to rigid type schemas for multi-dimensional classification.
Designing your tag hierarchy
Tags are most useful when they represent orthogonal dimensions of classification that cut across instrument types. Good examples:
#aus → #aus#asx, #aus#chi-x
#us → #us#nyse, #us#nasdaq#equity → #equity#large-cap, #equity#small-cap
#fixed-income → #fixed-income#sovereignUnlike instrument types (which define schema), tags can be assigned freely across any combination of instruments regardless of their type.
Creating the tag tree
Create parent tags first, then child tags referencing their parent by UUID or slug:
Bulk-assigning tags during import
When creating instruments, you can’t assign tags in the same request — tags must be assigned after creation. Use the bulk replace endpoint to set all tags at once:
PUT /instruments/{id}/tags (bulk replace) rather than calling POST for each tag individually. One request sets all tags atomically.Querying instruments by tag
Use tagged_with_descendants to find all instruments anywhere under a tag node:
Use tagged (without descendants) to match only instruments tagged with the exact tag — useful when you want only the instruments directly in a category, not subcategories:
Renaming and reorganising tags
Tags can be renamed, re-slugged, or re-parented without affecting existing assignments. Re-parenting moves the tag and its entire subtree to a new location in the hierarchy.
409 Conflict if the re-parent operation would create a cycle.