T3 Endpoint IDs¶
Every T3 API endpoint that lists or reports Metrc data has a T3 endpoint id. It is the one name every feature uses for an endpoint:
- Search takes
t3EndpointIdsand labels every result with itst3EndpointId. - Metrc Pages gives each table's
t3EndpointId. - Tag lists store a
t3EndpointId, and resolve and COA extraction take one. - Saved reports record the
t3EndpointIdof the report they run.
The interactive docs show each endpoint's id at the end of its summary.
A collection's list endpoint and its object endpoint share an id: METRC_ACTIVE_PACKAGES names both /v2/packages/active and /v2/packages/active/{id}. Its /super endpoints have their own id, and each report has its own.
So a search result says where to load the full record:
PATHS = {"METRC_ACTIVE_PACKAGES": "/v2/packages/active", "METRC_ACTIVE_ITEMS": "/v2/items"}
hit = send_api_request(
api_client,
"/v2/search",
params={"licenseNumber": license_number, "query": "1A4FF0100000022000000123"},
)["data"][0]
record = send_api_request(
api_client,
f"{PATHS[hit['t3EndpointId']]}/{hit['matchedEntry']['id']}",
params={"licenseNumber": license_number},
)
The OpenAPI spec carries every id as x-t3-endpoint-id, so the full mapping can be built from it:
import requests
spec = requests.get("https://api.trackandtrace.tools/v2/spec/openapi.json").json()
paths = {
operation["x-t3-endpoint-id"]: path
for path, operations in spec["paths"].items()
for operation in operations.values()
if "x-t3-endpoint-id" in operation and "{" not in path
}
Collections¶
The collections search, tag lists or COA extraction accept. ✅ marks the features that accept the id. Every other endpoint's id is in the interactive docs.
| Path | T3 endpoint id | /super T3 endpoint id | Search | Tag lists | COA |
|---|---|---|---|---|---|
/v2/harvests/active | METRC_ACTIVE_HARVESTS | METRC_ACTIVE_SUPERHARVESTS | ✅ | ✅ | ❌ |
/v2/harvests/inactive | METRC_INACTIVE_HARVESTS | METRC_INACTIVE_SUPERHARVESTS | ✅ | ✅ | ❌ |
/v2/harvests/onhold | METRC_ONHOLD_HARVESTS | METRC_ONHOLD_SUPERHARVESTS | ✅ | ✅ | ❌ |
/v2/harvests/schedules | METRC_HARVEST_SCHEDULES | ✅ | ❌ | ❌ | |
/v2/items | METRC_ACTIVE_ITEMS | METRC_ACTIVE_SUPERITEMS | ✅ | ✅ | ❌ |
/v2/locations/active | METRC_ACTIVE_LOCATIONS | METRC_ACTIVE_SUPERLOCATIONS | ✅ | ❌ | ❌ |
/v2/packages/active | METRC_ACTIVE_PACKAGES | METRC_ACTIVE_SUPERPACKAGES | ✅ | ✅ | ✅ |
/v2/packages/inactive | METRC_INACTIVE_PACKAGES | METRC_INACTIVE_SUPERPACKAGES | ✅ | ✅ | ✅ |
/v2/packages/intransit | METRC_INTRANSIT_PACKAGES | METRC_INTRANSIT_SUPERPACKAGES | ✅ | ✅ | ✅ |
/v2/packages/lab-samples | METRC_LAB_SAMPLE_PACKAGES | METRC_SUPER_LAB_SAMPLE_PACKAGES | ✅ | ❌ | ❌ |
/v2/packages/onhold | METRC_ONHOLD_PACKAGES | METRC_ONHOLD_SUPERPACKAGES | ✅ | ✅ | ✅ |
/v2/packages/transferred | METRC_TRANSFERRED_PACKAGES | METRC_TRANSFERRED_SUPERPACKAGES | ✅ | ✅ | ❌ |
/v2/plantbatches/active | METRC_ACTIVE_PLANTBATCHES | METRC_ACTIVE_SUPERPLANTBATCHES | ✅ | ✅ | ❌ |
/v2/plantbatches/inactive | METRC_INACTIVE_PLANTBATCHES | METRC_INACTIVE_SUPERPLANTBATCHES | ✅ | ✅ | ❌ |
/v2/plantbatches/onhold | METRC_ONHOLD_PLANTBATCHES | METRC_ONHOLD_SUPERPLANTBATCHES | ✅ | ✅ | ❌ |
/v2/plants/flowering | METRC_FLOWERING_PLANTS | METRC_FLOWERING_SUPERPLANTS | ✅ | ✅ | ❌ |
/v2/plants/inactive | METRC_INACTIVE_PLANTS | METRC_INACTIVE_SUPERPLANTS | ✅ | ✅ | ❌ |
/v2/plants/mother/active | METRC_ACTIVE_MOTHER_PLANTS | METRC_ACTIVE_MOTHER_SUPERPLANTS | ✅ | ✅ | ❌ |
/v2/plants/mother/inactive | METRC_INACTIVE_MOTHER_PLANTS | METRC_INACTIVE_MOTHER_SUPERPLANTS | ✅ | ✅ | ❌ |
/v2/plants/mother/onhold | METRC_ONHOLD_MOTHER_PLANTS | METRC_ONHOLD_MOTHER_SUPERPLANTS | ✅ | ✅ | ❌ |
/v2/plants/onhold | METRC_ONHOLD_PLANTS | METRC_ONHOLD_SUPERPLANTS | ✅ | ✅ | ❌ |
/v2/plants/vegetative | METRC_VEGETATIVE_PLANTS | METRC_VEGETATIVE_SUPERPLANTS | ✅ | ✅ | ❌ |
/v2/processingjobs/active | METRC_ACTIVE_PROCESSING_JOBS | METRC_ACTIVE_SUPERPROCESSINGJOBS | ✅ | ❌ | ❌ |
/v2/processingjobs/inactive | METRC_INACTIVE_PROCESSING_JOBS | METRC_INACTIVE_SUPERPROCESSINGJOBS | ✅ | ❌ | ❌ |
/v2/sales/active | METRC_ACTIVE_SALES | METRC_ACTIVE_SUPERSALES | ✅ | ❌ | ❌ |
/v2/sales/inactive | METRC_INACTIVE_SALES | METRC_INACTIVE_SUPERSALES | ✅ | ❌ | ❌ |
/v2/strains | METRC_ACTIVE_STRAINS | METRC_ACTIVE_SUPERSTRAINS | ✅ | ✅ | ❌ |
/v2/tagorders/current | METRC_CURRENT_TAG_ORDERS | METRC_CURRENT_SUPERTAGORDERS | ✅ | ❌ | ❌ |
/v2/tagorders/history | METRC_HISTORY_TAG_ORDERS | METRC_HISTORY_SUPERTAGORDERS | ✅ | ❌ | ❌ |
/v2/tags/available | METRC_AVAILABLE_TAGS | METRC_AVAILABLE_SUPERTAGS | ✅ | ✅ | ❌ |
/v2/tags/used | METRC_USED_TAGS | METRC_USED_SUPERTAGS | ✅ | ✅ | ❌ |
/v2/tags/voided | METRC_VOIDED_TAGS | METRC_VOIDED_SUPERTAGS | ✅ | ✅ | ❌ |
/v2/transfers/hub | METRC_HUB_TRANSFERS | METRC_HUB_SUPERTRANSFERS | ✅ | ✅ | ❌ |
/v2/transfers/incoming/active | METRC_INCOMING_ACTIVE_TRANSFERS | METRC_INCOMING_ACTIVE_SUPERTRANSFERS | ✅ | ✅ | ❌ |
/v2/transfers/incoming/inactive | METRC_INCOMING_INACTIVE_TRANSFERS | METRC_INCOMING_INACTIVE_SUPERTRANSFERS | ✅ | ✅ | ❌ |
/v2/transfers/outgoing/active | METRC_OUTGOING_ACTIVE_TRANSFERS | METRC_OUTGOING_ACTIVE_SUPERTRANSFERS | ✅ | ✅ | ❌ |
/v2/transfers/outgoing/inactive | METRC_OUTGOING_INACTIVE_TRANSFERS | METRC_OUTGOING_INACTIVE_SUPERTRANSFERS | ✅ | ✅ | ❌ |
/v2/transfers/rejected | METRC_OUTGOING_REJECTED_TRANSFERS | METRC_OUTGOING_REJECTED_SUPERTRANSFERS | ✅ | ✅ | ❌ |
/v2/transfers/templates | METRC_TRANSFER_TEMPLATES | ✅ | ❌ | ❌ |