RfidTagRegistry is the EPC master catalogue for a tenant. Every physical tag that Dragon Guard needs to recognise — whether on a unit, case, pallet, bin, or fixed asset — must have a corresponding registry entry. Entries are tenant-scoped (keyed by CompanyId), and active EPC uniqueness is enforced with a filtered unique index on (CompanyId, NormalizedEpc), so the same EPC cannot be active twice within one tenant. Deactivation is always logical; no hard-delete route exists.
Data model
Object types
Tag statuses
Key fields — RfidTagDto
Tag registry endpoints
List tags
Get tag by ID
RfidTagDto. Returns 404 if the tag does not exist or belongs to a different tenant.
Resolve EPC
RfidTagResolveDto containing the matched item, quantity, location, and bin.
If corrupted or migrated data has left more than one active row for the same EPC within a tenant, resolution returns
resolutionStatus: AMBIGUOUS_DUPLICATE rather than silently choosing one match. Resolve the duplicate via the PATCH or deactivate endpoints before scanning.RfidTagResolveDto):
Create a tag
string
required
The canonical EPC value used for uniqueness checks. Must be unique among active tags in the tenant.
string
The raw as-read EPC string. Defaults to
normalizedEpc if omitted.string
required
Object type of the physical entity bearing this tag. One of
ITEM_UNIT, CASE, PACK, PALLET, BIN, LOCATION, ASSET.guid
Required when
objectType is ITEM_UNIT, CASE, PACK, or PALLET. Must reference an item that belongs to the calling tenant.decimal
Quantity of the item represented by this tag. Defaults to
1 for ITEM_UNIT. Must be ≥ 1 for all inventory-bearing types.string
Initial status. Defaults to
COMMISSIONED if omitted. Accepted values: COMMISSIONED, AVAILABLE.guid
ID of the warehouse location where the tag currently resides. Required when
objectType is LOCATION.guid
ID of the bin where the tag currently resides. Required when
objectType is BIN.datetime
Optional timestamp of the last known physical read. Omit to let the system set this on the first scan event.
201 Created with the full RfidTagDto. Returns 409 Conflict if an active tag with the same EPC already exists for the tenant.
Bulk import
RfidBulkImportDto body and returns an RfidBulkImportResultDto with per-line create, update, and error counts. Useful when commissioning large tag batches printed from ZPL label jobs.
Each element in
items mirrors CreateRfidTagDto with an additional optional index field for error reporting.
Update a tag (partial)
UpdateRfidTagDto. Supports changes to EPC, status, quantity, item linkage, location, bin, and lastSeenAtUtc. Setting status to VOID automatically sets IsActive = false; any other valid status reactivates the tag.
UpdateRfidTagDto also exposes explicit clear flags — set the corresponding bool to true to null-out optional fields:
Update a tag (full)
PATCH using the same UpdateRfidTagDto payload. Provided for client compatibility.
Deactivate a tag
Status = VOID and IsActive = false. The tag record is retained for audit and re-commissioning review. Returns 404 if the tag does not exist in the tenant.
Tag assignment endpoints
Tag assignments link a registry entry to a specific document, item, lot, serial, package, location, or bin for a defined time window. TheRfidTagAssignmentsController exposes the following routes under api/rfid/tag-assignments.
List assignments
Get assignment by ID
RfidTagAssignmentDto. Returns 404 if not found or belonging to a different tenant.
Create assignment
201 Created with the saved RfidTagAssignmentDto, or 409 Conflict if an active conflicting assignment already exists.
Key request fields (CreateRfidTagAssignmentDto):
Update assignment
UpdateRfidTagAssignmentDto body. Returns 404 if the assignment is not found.
Deactivate assignment
204 No Content on success, 404 if not found.
Label print endpoint
Dragon Guard can generate a ZPL label string for a Zebra RFID printer. The ZPL includes^RFW commands to program the RFID chip during the print pass, so the print and encode steps happen in a single pass through the Zebra printer.
string
EPC to encode. Provide either
epc or tagId.guid
ID of the
RfidTagRegistry row to look up the EPC from. Provide either tagId or epc.int
Number of label copies embedded in the ZPL (
^PQ). Range 1–99. Defaults to 1.int
Print darkness (
^MD). Range 0–30. Defaults to 15.PrintRfidLabelResponseDto):
Business rules
BIN tags must include a currentBinId. LOCATION tags must include a currentLocationId. Submitting without the matching reference will return 400 Bad Request.- Active EPC uniqueness — only one active row may exist per
(CompanyId, NormalizedEpc). Attempting to create a duplicate returns409 Conflict. - Quantity floor —
quantitymust be ≥ 1 for all inventory-bearing types (ITEM_UNIT,CASE,PACK,PALLET). - No hard delete — deactivation is the only way to retire a tag. Historical (inactive) rows remain for audit.
- Tenant isolation —
CompanyIdis resolved from the JWT; request bodies cannot override it.