Skip to main content
The 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

Returns a paged list of tags scoped to the calling tenant.

Get tag by ID

Returns a single RfidTagDto. Returns 404 if the tag does not exist or belongs to a different tenant.

Resolve EPC

Resolves a raw or normalised EPC string to its item context. This is the primary endpoint used by handhelds during Item Inquiry. Returns an 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.
Response fields (RfidTagResolveDto):

Create a tag

Commissions a single new EPC 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.
Returns 201 Created with the full RfidTagDto. Returns 409 Conflict if an active tag with the same EPC already exists for the tenant.

Bulk import

Imports a batch of tags in a single request. Accepts an 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)

Applies a partial update to a tag using 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)

Alias of PATCH using the same UpdateRfidTagDto payload. Provided for client compatibility.

Deactivate a tag

Logically deactivates a tag by setting 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. The RfidTagAssignmentsController exposes the following routes under api/rfid/tag-assignments.

List assignments

Returns a paged list of assignments scoped to the calling tenant.

Get assignment by ID

Returns a single RfidTagAssignmentDto. Returns 404 if not found or belonging to a different tenant.

Create assignment

Creates a new tag assignment. Returns 201 Created with the saved RfidTagAssignmentDto, or 409 Conflict if an active conflicting assignment already exists. Key request fields (CreateRfidTagAssignmentDto):

Update assignment

Replaces the mutable fields of an existing assignment with an UpdateRfidTagAssignmentDto body. Returns 404 if the assignment is not found.

Deactivate assignment

Logically deactivates an assignment. Returns 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.
Response (PrintRfidLabelResponseDto):

Business rules

itemId is required for object types ITEM_UNIT, CASE, PACK, and PALLET. Creating any of these without an item reference will return 400 Bad Request.
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 returns 409 Conflict.
  • Quantity floor — quantity must 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 — CompanyId is resolved from the JWT; request bodies cannot override it.

Examples

Commission a tag

Resolve an EPC