Shopify RFID Integration

RFID Integration with Shopify

Inventory Sync

Retail store inventory display — RFID Shopify integration for omnichannel inventory sync and POS

Quick answer

An e-commerce and omnichannel merchant's guide to integrating RFID with Shopify for real-time inventory accuracy across the online store, Shopify POS locations, wholesale channels and external marketplaces. This page covers Shopify's multi-location inventory model, the Shopify Admin REST and GraphQL APIs (in particular the Inventory Levels mutations and inventoryAdjustQuantity mutations), Shopify POS integration with RFID readers for retail stores, the Shopify App Store ecosystem of RFID-inventory apps, webhook-driven event patterns, multi-channel inventory sync including Amazon / eBay / TikTok Shop / Walmart Marketplace via Shopify Markets and third-party channel connectors, and how Proud Tek delivers pre-encoded RFID tags sized for DTC brands, Shopify Plus retailers and fast-growing omnichannel businesses.

  • Eliminate overselling across every channel. Shopify's multi-location inventory model propagates on-hand quantities to every connected sales channel (online store, Shopify POS, wholesale, Amazon, eBay, TikTok Shop, Walmart Marketplace, Instagram Shopping). A single RFID count at the warehouse or store updates every channel simultaneously, closing the gap between shelf reality and channel availability.
  • Fast time-to-value via App Store and REST/GraphQL APIs. Shopify's App Store hosts dozens of RFID-inventory apps that offer plug-and-play connectivity for common reader vendors (Zebra, Chainway, TSL). For merchants with custom workflows, the Shopify Admin REST and GraphQL APIs (particularly the Inventory Levels and inventoryAdjustQuantity mutations) support direct integration in days rather than months.
  • Proud Tek delivers tag programmes sized for DTC and omnichannel retail. Smaller initial runs (500-10k tags per SKU), faster SKU refresh cycles, ready-to-apply pre-encoded labels with human-readable SKU printed alongside the RFID payload. Our TID-to-SKU mapping file imports directly into the merchant's Shopify app or middleware lookup table, getting stores live within a week of tag delivery.
10+ Years ISO 9001 500+ Clients 50+ Countries

At a glance

Use these short answers to decide whether this page matches the project before moving into the detail.

Key takeaway

Eliminate overselling across every channel. Shopify's multi-location inventory model propagates on-hand quantities to every connected sales channel (online store, Shopify POS, wholesale, Amazon, eBay, TikTok Shop, Walmart Marketplace, Instagram Shopping). A single RFID count at the warehouse or store updates every channel simultaneously, closing the gap between shelf reality and channel availability.

Shopify's multi-location inventory model — the foundation of omnichannel RFID

The last unit of a hero SKU has a genius for selling everywhere at once — the online store, the marketplace channels and a walk-in at the flagship counter all claim it i...

Shopify's multi-location inventory model — the foundation of omnichannel RFID

The last unit of a hero SKU has a genius for selling everywhere at once — the online store, the marketplace channels and a walk-in at the flagship counter all claim it in the same breath — and the customers who lose that race get an apology email instead of a parcel. That gap between what is physically on the shelf and what every channel believes is on the shelf is the entire problem RFID exists to close. On Shopify, closing it starts with respecting how the platform actually models inventory: products, variants, SKUs, locations and inventory levels compose a specific data model an RFID programme has to speak fluently. This section maps that model against the operational reality of a growing DTC or omnichannel retailer.

  • Products, variants and SKUs. A Shopify product can have up to 100 variants (size, colour, material combinations). Each variant has its own SKU, its own barcode (typically UPC/EAN/ISBN matching the GS1 GTIN) and its own inventory levels per location. RFID tag encoding must resolve to the variant SKU level, not just the product level, because inventory, pricing and fulfillment all happen per variant.
  • Multi-location inventory: per Shopify's official location limits as of 2025-2026, Shopify Plus supports up to 200 locations (or up to 1,000 with Shopify POS Pro on the Shopify plan or higher); Basic / Shopify / Advanced plans support up to 10 locations; Starter is capped at 2. Deactivated locations and 3PL-app-managed inventory locations do not count against the cap. A 'location' represents a physical warehouse, a retail store with Shopify POS, a 3PL fulfillment partner or a drop-ship supplier. Inventory is tracked per-variant-per-location, and inventory levels (available quantity and committed quantity) propagate to every connected sales channel.
  • Available vs committed vs on-hand. Shopify distinguishes on-hand (total physical quantity), committed (reserved for orders in process), available (on-hand minus committed) and incoming (purchase orders pending). Channels display 'available' as the sellable quantity; RFID updates generally target the on-hand figure, letting Shopify's commitment logic handle order-side reservations.
  • Channels connected to inventory. Shopify's online store, Shopify POS (at each store location), Shopify Markets (multi-currency storefronts), Amazon / eBay / Walmart Marketplace (via channel apps), TikTok Shop, Instagram Shopping, Facebook Shop, and third-party B2B / wholesale platforms. An RFID count at the warehouse updates the backing inventory level, which Shopify then reflects across all connected channels within their respective sync latencies.
  • Shopify POS as a first-class location. Shopify POS is a retail POS system that runs as an iOS / Android app at store checkout. Each store is a Shopify location with its own inventory level. RFID counting at the store uses handheld readers connected to a Shopify app or to middleware that updates the store location's inventory. The same inventory pool serves walk-in POS transactions and online orders fulfilled from the store.
  • Fulfillment location selection: for online orders, Shopify's fulfillment logic selects a location based on inventory availability, proximity, fulfillment priority and custom rules. Accurate RFID-driven inventory at every location dramatically improves fulfillment routing accuracy; when a warehouse shows true on-hand thanks to RFID, Shopify's fulfillment engine doesn't accidentally route an order to a stockout.

Shopify Admin REST and GraphQL APIs for RFID integration

Shopify exposes its admin surface through REST and GraphQL APIs, with GraphQL being the preferred interface for new development (Shopify is moving toward GraphQL-first and deprecating some REST endpoints). For RFID integration, the Inventory Levels and InventoryAdjustQuantity operations are the primary write surfaces. This section covers the API patterns relevant to RFID.

  • GraphQL Admin API: the modern, required interface for new public apps (per Shopify's announcement, the REST Admin API became a legacy API on October 1, 2024 and from April 1, 2025 all new public apps must be built on GraphQL). Key mutations for RFID include `inventoryAdjustQuantities` (apply delta changes at specified location/inventoryItem combinations), `inventorySetQuantities` (set absolute on-hand or available values, used for RFID full-count reconciliation — note this replaces the deprecated `inventorySetOnHandQuantities`), and `inventoryActivate`/`inventoryDeactivate` (turn inventory tracking on/off per location). The current API version is `2026-01` (with `2026-04` as the next published release). Introspection and strong typing make the GraphQL API easier to evolve with Shopify's quarterly versioned schema.
  • Idempotency for inventory mutations: as of API version `2026-01`, both `inventoryAdjustQuantities` and `inventorySetQuantities` accept an optional idempotency key via the `@idempotent(key: $idempotencyKey)` GraphQL directive; from `2026-04` onward the directive becomes required. Use a stable UUID per logical RFID count batch so retries after network timeout do not double-post. The `reason` field is a controlled vocabulary (e.g., `correction`, `cycle_count_app`, `damaged`, `restock`); free-form values are silently rejected.
  • REST Admin API: legacy interface, still supported for existing apps. Equivalent operations include POST to `/admin/api/2026-01/inventory_levels/adjust.json` for delta adjustments and POST to `/admin/api/2026-01/inventory_levels/set.json` for absolute set. REST is convenient for middleware that was built before GraphQL became the default; new builds should use GraphQL.
  • Authentication: Shopify apps authenticate with OAuth 2.0, receiving an access token scoped to the merchant's store. RFID middleware apps use the access token for server-to-server API calls. For private integrations (custom apps for a single merchant's store), the custom-app mechanism in the merchant's Shopify admin grants scoped API access without going through the App Store.
  • Rate limits: Shopify uses a leaky-bucket rate-limit model with per-app-per-shop limits (40 requests per minute for REST, 50 cost units per second for GraphQL on standard plans; higher on Shopify Plus). RFID integrations that post frequent small updates should batch updates and implement backoff on HTTP 429 responses. Bulk mutations in GraphQL let a single request update many inventory levels at once, reducing rate-limit pressure for large reconciliation jobs.
  • Webhooks for event-driven flows. Shopify can push webhooks to the middleware on relevant events: `orders/paid` (use to decrement inventory or trigger picking), `orders/fulfilled` (confirm RFID-verified pack-out), `inventory_levels/update` (confirm the RFID-driven inventory update was accepted). Webhook-driven architectures reduce polling and keep the RFID middleware in sync with Shopify state.
  • Bulk operations for large imports. GraphQL bulk operations (`bulkOperationRunQuery`, `bulkOperationRunMutation`) support asynchronous processing of large inventory exports and large-scale mutation. For initial RFID baseline loads or periodic full reconciliation runs involving 10k+ SKUs, bulk operations avoid rate-limit issues and complete in minutes rather than hours of sequential calls.

Shopify POS integration — RFID in the retail store

For omnichannel retailers with physical stores running Shopify POS, the RFID opportunity is as much about in-store operations (count accuracy, self-service fitting-room counts, endless-aisle fulfillment) as it is about backroom receiving. Every store has a backroom where inventory quietly turns into a rumour; RFID is what turns the rumour back into a count you can sell against. This section covers the Shopify POS side of RFID integration.

  • Shopify POS app and extensions. Shopify POS runs as an iOS / Android app on store terminals. POS UI extensions (built with Shopify's POS UI Kit) can integrate RFID reader output directly into the checkout and inventory workflows, letting store associates perform RFID-driven transactions inside the POS app.
  • Handheld RFID readers for retail. Common retail readers include Zebra MC3330xR, Chainway C72, TSL 1166 Bluetooth UHF reader and Nordic ID Stix. These connect to the POS iPad/Android device via Bluetooth and are paired with a companion app (built by the merchant or provided by a Shopify App Store vendor) that translates RFID reads into Shopify Admin API calls.
  • Retail use cases for RFID in Shopify POS. Cycle counting in the store aisle (associates walk the floor with a reader, comparing RFID reads against Shopify on-hand for the store location, adjusting for variance), receiving against a Shopify transfer order (incoming stock from warehouse to store validated by RFID), return acceptance (return tag scanned at POS counter for instant inventory credit), anti-theft detection (periodic RFID sweeps to identify missing items).
  • Endless aisle and omnichannel fulfillment. When a customer in-store asks for an item not on the shelf, an associate can use RFID to confirm availability in the backroom or at a nearby store location via Shopify's inventory view, then place an order through Shopify POS for warehouse or alternative-store fulfillment. RFID accuracy is what makes this workflow reliable; without RFID, backroom counts are wrong often enough that endless aisle promises backfire.
  • Self-service fitting-room RFID. Specialized retail deployments use RFID-enabled fitting rooms where a reader at the fitting-room door inventories the items a customer has brought in. Integrated with Shopify, this enables personalized recommendations, fit analytics and queue-less checkout patterns popular with premium apparel brands.
  • Proud Tek tag formats for retail store environments. Retail-friendly tag formats include small apparel hangtag inlays, fabric-friendly care-label inlays, jewelry-suitable small-format labels and tamper-evident tags for high-value merchandise. Each format is available with Shopify-SKU-aligned encoding (GTIN from the variant's barcode field, serial per tag).

Shopify App Store and middleware options for RFID merchants

Many Shopify merchants prefer to avoid custom development by selecting an RFID-inventory app from the Shopify App Store or a middleware platform with Shopify connectors. This section surveys the options and the criteria for selecting a fit for the merchant's specific programme.

  • Dedicated Shopify RFID-inventory apps. Several apps in the Shopify App Store offer RFID reader connectivity with out-of-the-box Shopify inventory integration. These apps handle tag-to-SKU mapping, reader discovery, count workflows and Shopify API sync without custom development. Fit: merchants with straightforward count-and-sync requirements who want fast deployment.
  • General RFID inventory platforms with Shopify connectors. Platforms like RFID4U TagMatiks, Chainway CloudRFID, Detego and SML Clarity offer broader RFID inventory management (cycle counting, shrinkage analytics, planogram compliance) with Shopify sync as one of their channel connectors. Fit: larger Shopify Plus merchants with multiple locations and richer analytics needs.
  • Custom apps via the Shopify Admin API. Merchants with internal development capacity or partner agencies can build a custom Shopify app (public or private) that integrates their chosen RFID reader's SDK with the Shopify Admin GraphQL API. Fit: merchants with unique workflow requirements or with cross-channel platforms already in place.
  • Headless commerce integration: for merchants running Shopify as the commerce engine behind a custom storefront (Shopify Hydrogen, custom Next.js, Shopify Plus with Storefront API), the RFID integration still uses the Admin API for inventory writes, and the custom storefront consumes the resulting inventory state via the Storefront API or Shopify's real-time inventory JavaScript library.
  • 3PL integration patterns: many growing Shopify merchants rely on 3PL partners for warehousing and fulfillment. If the 3PL runs their own RFID programme, they typically expose inventory updates to the merchant via EDI or the 3PL's proprietary API, which a middleware (Celigo, MESA, or custom) translates into Shopify inventory adjustments. For merchants who own the 3PL relationship technically, a direct RFID middleware deployment at the 3PL location may be preferable.
  • Selection criteria: when evaluating Shopify App Store RFID apps, check: supported reader vendors (match to the customer's hardware choice), Shopify Plus / non-Plus feature parity, multi-location support, Shopify POS integration, tag encoding format compatibility, import/export format for initial load, monthly pricing structure, and customer reviews focused on inventory accuracy outcomes rather than just reader connectivity.

Omnichannel inventory sync — propagating RFID updates across channels

The strategic value of RFID for Shopify merchants is almost always omnichannel: ensuring that one accurate count propagates to every sales channel without lag. This section details how Shopify's channel architecture distributes inventory updates and where RFID accuracy moves the needle on merchant KPIs.

  • Shopify online store: the primary channel for most merchants. Inventory updates via Admin API are reflected on the online store's product pages typically within seconds. The available-to-sell calculation accounts for active carts; merchants see fewer 'out of stock' displays when RFID inventory is accurate because true on-hand is higher than the drift-corrupted book quantity.
  • Shopify POS: each POS location's inventory is updated simultaneously. Store associates see accurate on-hand for the store, improving customer-facing answers ('is this in stock?') and reducing unnecessary backroom trips looking for items that drift has misreported as available.
  • Marketplace channels (Amazon, eBay, Walmart Marketplace, TikTok Shop). Shopify sync delay to external marketplaces varies by channel (Amazon typically 15-30 minutes, eBay faster, Walmart similar to Amazon). RFID-driven accuracy is particularly valuable here because marketplace oversells trigger penalty metrics (Amazon ODR, eBay seller ratings) that affect future discoverability.
  • Social commerce channels (Instagram Shopping, Facebook Shop, TikTok Shop). Shopify's channel architecture propagates inventory to these channels via the product catalog sync; RFID-accurate on-hand ensures that shoppers tapping into a social-media product post can actually buy the item.
  • Wholesale B2B — merchants running Shopify Plus with the Wholesale channel or a B2B app get the same inventory pool visibility for wholesale customers. RFID-driven accuracy benefits B2B ordering where large-quantity allocations across multiple wholesale accounts can exacerbate inventory-drift effects.
  • Shopify Flow automation: Shopify Flow (Plus only) can trigger automations on inventory events: when RFID count drops a SKU below reorder point, Flow can create a purchase order draft, email the buying team, or tag the product for replenishment. This closes the loop between physical inventory reality and operational response.

Concrete Shopify GraphQL and REST examples for RFID integration

The API patterns below are the copy-paste starting points for a new Shopify RFID integration. Variant lookup by barcode/GTIN, batched inventory adjustments via GraphQL, webhook subscription for fulfillment events, and the OAuth bootstrap that most App Store integrators already handle for you. They target Shopify Admin API version 2024-04 or later.

  • Variant lookup by barcode (GraphQL). `query { productVariants(first: 10, query: "barcode:0012345678905") { edges { node { id sku barcode inventoryItem { id } product { title } } } } }`. The `inventoryItem.id` returned here is the ID you pass to `inventoryAdjustQuantities` when posting an RFID count. Batch multiple barcodes with `query: "barcode:0012345678905 OR barcode:0012345678912"` or use bulk operations for 1000+ barcode lookups.
  • Inventory adjust by delta (GraphQL, 2026-01+). `mutation inventoryAdjust($input: InventoryAdjustQuantitiesInput!, $idempotencyKey: String!) { inventoryAdjustQuantities(input: $input) @idempotent(key: $idempotencyKey) { inventoryAdjustmentGroup { createdAt reason referenceDocumentUri changes { name delta } } userErrors { field message } } }` with input `{ reason: "correction", name: "available", referenceDocumentUri: "logistics://rfid_count/2026-05-10-dock-A", changes: [{ delta: -3, inventoryItemId: "gid://shopify/InventoryItem/12345", locationId: "gid://shopify/Location/67890" }] }`. The `reason` value is a controlled vocabulary — use `correction`, `cycle_count_app`, `received`, `restock`, `damaged`, etc. (free-form strings like `rfid_full_count` are silently rejected). The `@idempotent` directive is required from API version 2026-04 onward.
  • Inventory set absolute (GraphQL, 2026-01+). For full RFID reconciliation use `inventorySetQuantities` (the previous `inventorySetOnHandQuantities` mutation is deprecated): `mutation inventorySet($input: InventorySetQuantitiesInput!, $idempotencyKey: String!) { inventorySetQuantities(input: $input) @idempotent(key: $idempotencyKey) { inventoryAdjustmentGroup { createdAt } userErrors { code message } } }`. Pass an input like `{ reason: "correction", name: "on_hand", ignoreCompareQuantity: false, referenceDocumentUri: "logistics://rfid_count/2026-05-10-01", quantities: [{ inventoryItemId: "gid://shopify/InventoryItem/12345", locationId: "gid://shopify/Location/67890", quantity: 42, compareQuantity: 41 }] }`. The optional `compareQuantity` enables compare-and-swap concurrency control so a stale RFID count cannot overwrite a newer adjustment.
  • Webhook subscription: receive fulfillment events to mark RFID tags as shipped or retired: `mutation { webhookSubscriptionCreate(topic: FULFILLMENTS_CREATE, webhookSubscription: { format: JSON, callbackUrl: "https://rfid-mw.example.com/webhooks/fulfillment", includeFields: ["id","order_id","status","line_items"] }) { webhookSubscription { id } userErrors { message } } }`. Shopify HMAC-signs the webhook body with your app's shared secret; verify with `crypto.createHmac('sha256', secret).update(body).digest('base64')` compared against header `X-Shopify-Hmac-SHA256`.
  • REST adjust (legacy, still valid for existing apps). `POST /admin/api/2026-01/inventory_levels/adjust.json` with body `{"location_id": 67890, "inventory_item_id": 12345, "available_adjustment": -3}`. Returns 200 with updated `inventory_level` resource. Useful for pre-GraphQL middleware still in service; new code MUST use GraphQL because (1) REST became the legacy API on 2024-10-01, (2) new public apps after 2025-04-01 cannot be built on REST, and (3) only the GraphQL mutations support the required idempotency directive and bulk operations.
  • Rate-limit handling: GraphQL returns `extensions.cost` on every response (`actualQueryCost` and `throttleStatus.currentlyAvailable`). If `currentlyAvailable` drops below ~100, pause before the next call. REST returns `X-Shopify-Shop-Api-Call-Limit: 39/40` — pause when near the limit. Implement exponential backoff on HTTP 429: start at 1 s, cap at 32 s, respect `Retry-After` header when present.
  • Bulk operations for initial load. `mutation { bulkOperationRunMutation(mutation: "mutation inventoryAdjust($input: InventoryAdjustQuantitiesInput!){ inventoryAdjustQuantities(input: $input) { userErrors { message } } }", stagedUploadPath: "tmp/bulk/rfid-baseline-2026-04-17.jsonl") { bulkOperation { id status } userErrors { message } } }`. Upload a JSONL file where each line is one adjustment input; Shopify processes asynchronously and you poll `currentBulkOperation` for status. Completes 100,000-row baselines in ~10-30 minutes.
  • OAuth flow summary: for an App Store app: redirect merchant to `https://{shop}.myshopify.com/admin/oauth/authorize?client_id=...&scope=read_products,write_inventory,read_locations&redirect_uri=...&state=NONCE`, handle the callback, exchange code for access_token via POST to `/admin/oauth/access_token`, store token. For a private custom app (single-merchant), the merchant generates the token in their admin and you use it directly. All subsequent Admin API calls set header `X-Shopify-Access-Token: {token}`.

Tag encoding patterns for Shopify merchants

Shopify merchants span a wide range of maturity and data discipline. Some have pristine GTIN data on every variant; others use internal SKU codes without industry-standard barcodes. This section covers the tag encoding strategies that work well for each scenario.

  • GTIN-based SGTIN-96 — the preferred pattern for merchants with GS1 Company Prefixes and GTINs on every variant's barcode field. Middleware extracts the GTIN from the tag's SGTIN-96 and queries Shopify for the matching variant by barcode. Clean, industry-standard, forward-compatible with retailer-mandate expansion.
  • Shopify SKU in EPC user memory. For merchants without GS1 Company Prefixes (common for DTC brands that haven't formalized their barcode strategy), the tag can encode a placeholder EPC header plus the Shopify variant's SKU string in user memory. Middleware resolves to variant by SKU lookup. Works well but lacks the cross-ecosystem portability of GTIN-based encoding.
  • Variant ID embedded encoding. Tags can encode the Shopify numeric variant ID in the EPC (using a custom scheme or company-specific prefix). Resolution is a direct Shopify Admin API query by variant ID. Simplest middleware logic but couples the tag to a specific Shopify variant numbering, so re-platforming or duplicate-record scenarios require re-encoding.
  • Unique-per-tag serialization. Every tag gets a unique serial regardless of the variant, enabling per-unit traceability (good for high-value items, returnable merchandise or anti-counterfeit programmes). The middleware maintains the tag-to-variant mapping in its database and uses the tag ID for unit-level lookups.
  • NFC tag alternative: for direct-to-consumer brands wanting a consumer-engagement tap-to-verify experience alongside inventory accuracy, NFC tags (NTAG 213 or NTAG 424 DNA) encoded with variant-specific URLs accomplish both functions. Product-page visits triggered by tags can be tracked alongside inventory counts for cross-function analytics.
  • Proud Tek pre-encoding. Customers export their Shopify variant list (via admin CSV or GraphQL bulk query) with (variant ID, SKU, barcode/GTIN) and the desired encoding pattern. Our encoding-setup team produces a specification and the production line delivers pre-encoded tags with a TID-to-variant mapping CSV ready for the chosen middleware's lookup table.

Proud Tek engagement with DTC and Shopify Plus merchants

Shopify merchants span the range from bootstrapped DTC brands to global Shopify Plus retailers. Proud Tek's engagement approach adapts to where the merchant is in their growth cycle and to the specific operational problems RFID is solving for them.

  • DTC brand discovery: we start with the merchant's current order volume, SKU count, fulfillment location count (owned warehouse, 3PL, home-garage, or blend), current inventory pain points (overselling frequency, manual counting burden, cycle count accuracy) and Shopify plan tier. This scopes the RFID programme. Whether to pilot at one warehouse first, whether to include POS, whether to integrate with an existing 3PL.
  • Sample batches sized for DTC — 200-2000 tags per SKU for pilot (smaller than mid-market NetSuite samples, larger than NFC consumer samples). Multi-SKU sample packs coordinate like-for-like pilot encoding.
  • Pre-encoding from Shopify variant exports. Customers send a Shopify variant CSV (from the admin export tool or a GraphQL bulk query result); our encoding-setup team maps CSV columns to encoding parameters, validates GTIN / barcode completeness, and returns a specification for customer confirmation before production.
  • Shopify Plus enterprise engagement. For Shopify Plus merchants with multi-location inventory, multi-currency markets and multi-channel sync requirements, we engage with the merchant's Shopify Plus partner (a Plus Certified Agency like BVAccel, Tomorrow Agency, Kollective Agency) to coordinate technical integration with existing commerce architecture.
  • Omnichannel-retailer use cases. Premium apparel, shoes, accessories, beauty, nutraceuticals and specialty food merchants running Shopify with physical stores are the sweet spot for omnichannel RFID programmes. Proud Tek's catalogue includes apparel-friendly hangtag inlays, cosmetic-friendly small-format labels, care-label inlays for sewn-in deployment and tamper-evident stickers for luxury goods.
  • Post-pilot scaling: DTC brands typically scale production gradually as new SKU drops are added; Shopify Plus retailers scale in waves as additional store locations and channels come online. Proud Tek's production planning accommodates both profiles with weekly delivery cadences for growing merchants and larger seasonal batches (back-to-school, holiday, resort) for Plus retailers.

Shopify RFID API endpoint reference, scopes, rate limits and webhook events

This section consolidates the GraphQL mutations, REST endpoints, OAuth scopes, webhook topics, rate-limit budget and HMAC verification recipe that an RFID middleware integration touches in production. Pin to API version `2026-01` (or newer) for new builds; the dates below are taken directly from the Shopify Admin GraphQL reference accessed in May 2026.

  • Required OAuth scopes — `read_products`, `read_inventory`, `write_inventory`, `read_locations`, `read_orders`, `write_orders` (only if you also confirm fulfillments). For Shopify Plus B2B integration add `read_companies` and `read_draft_orders` as needed. Request the minimum scope your flow requires; over-requesting triggers App Store review friction.
  • Inventory write surface (GraphQL): `inventoryAdjustQuantities` (delta change), `inventorySetQuantities` (absolute set, replaces deprecated `inventorySetOnHandQuantities`), `inventoryActivate` / `inventoryDeactivate` (per-location tracking on/off), `inventoryMoveQuantities` (transfer between locations on the same inventoryItem). All accept the `@idempotent(key:)` directive (optional in 2026-01, required in 2026-04).
  • Inventory read surface — `inventoryItem(id:)`, `inventoryLevel(id:)`, `productVariants(query: "barcode:...")` for tag→variant resolution, `locations(first:)` for dynamic location-ID lookup. Bulk operations (`bulkOperationRunQuery` / `bulkOperationRunMutation`) handle 100k+ row reconciliation runs asynchronously with JSONL upload/download.
  • Rate limits — REST: 40 requests/app/store/minute (the leaky-bucket replenishes at 2 req/s; Plus stores get 10x = 400 req/s headroom). GraphQL: cost-based, baseline 100 cost points/second sustained with a 1,000-point bucket; Plus stores get 1,000/s sustained with a 10,000-point bucket. Every GraphQL response carries `extensions.cost.throttleStatus.currentlyAvailable`; pause when below ~100. REST responses carry header `X-Shopify-Shop-Api-Call-Limit: 39/40` and on 429 a `Retry-After` seconds value to honour.
  • Webhook topics relevant to RFID — `INVENTORY_LEVELS_UPDATE` (confirm RFID-driven adjustment was accepted and observe POS / online drift), `ORDERS_PAID` and `ORDERS_FULFILLED` (decrement inventory or trigger picking), `FULFILLMENTS_CREATE` and `FULFILLMENTS_UPDATE` (mark RFID tags as shipped or retired), `BULK_OPERATIONS_FINISH` (poll-free completion signal for baseline loads). Subscribe via `webhookSubscriptionCreate` and verify HMAC: `crypto.createHmac('sha256', appSecret).update(rawBody).digest('base64')` compared against header `X-Shopify-Hmac-SHA256` (constant-time comparison).
  • API status & error codes — 200 OK; 401 Unauthorized (token expired or revoked); 402 Payment Required (shop is frozen for unpaid balance); 403 Forbidden (missing access scope); 404 Not Found; 422 Unprocessable Entity (semantic validation failure, e.g., negative on_hand on item with `inventory_policy: deny`); 429 Too Many Requests (rate limit exhausted, honour `Retry-After`); 5xx (Shopify-side; check status.shopify.com before alerting on-call). For inventory mutations, `userErrors` returns structured codes including `INVALID_REASON`, `LOCATION_NOT_FOUND`, `ITEM_NOT_TRACKED` and (in 2026-01+) `IDEMPOTENCY_KEY_REUSED_WITH_DIFFERENT_INPUT`.
  • Real-world omnichannel deployments: Allbirds, Gymshark, Beyond Yoga and other Shopify Plus apparel merchants run RFID inventory programmes that publish to the online store, Shopify POS, Amazon, Instagram Shopping and (where applicable) wholesale channels, with fulfillment routing rules driving ship-from-store. Plus Certified Agencies (Tomorrow, Eastside Co, Pixel Union and others) routinely build the integration glue between an RFID middleware platform and the Shopify Admin GraphQL API using the patterns described above.

Common Shopify RFID integration pitfalls and field-tested fixes

Shopify-specific RFID integrations fail in recognizable ways — almost always at the boundaries between Shopify's data model, the middleware's tag-to-variant resolver and the merchant's operational reality. None of these failure modes are exotic; they are the same handful of boundary mismatches every integration rediscovers, usually the hard way. The ones below tend to surface in the first 2-4 weeks of production. Get them right early and the integration settles into the most underrated state in retail operations — boring — which is exactly what inventory infrastructure is supposed to be.

  • Barcode field collisions: Shopify's `barcode` field is technically free-text, and merchants sometimes populate it with SKU, vendor code, or mixed formats. If RFID middleware queries `productVariants(query: "barcode:...")` and multiple variants share the same barcode, the first match wins silently. Enforce barcode uniqueness with a pre-flight audit query before go-live: GraphQL `products(first: 250)` paged with a local dedupe check, surface collisions to the merchandising team for cleanup.
  • Location ID stability: Shopify location IDs are stable but are sometimes renumbered during store moves or account consolidations. Middleware that hardcodes location IDs breaks when a store is re-created. Query locations dynamically at middleware startup: `query { locations(first: 50, includeInactive: false) { edges { node { id name } } } }` and resolve by name-to-ID mapping each time.
  • Available vs. on-hand misunderstanding: cycle-count RFID updates often target `available` but should target `on_hand` (with Shopify computing `available = on_hand - committed`). Writing to `available` directly works but bypasses the commitment math and can desynchronize with in-flight orders. Use `inventorySetQuantities` with `name: "on_hand"` for true physical counts; use `inventoryAdjustQuantities` with `name: "available"` only for explicit channel-reservation workflows.
  • Marketplace oversell lag: Amazon sync via the Shopify Amazon channel takes 15-30 minutes; during a dock-door receive with 500 items in 10 seconds, the online store updates immediately but Amazon doesn't. If you're running aggressive discount campaigns on Amazon while receiving, rare oversells can still happen in the sync window. Mitigation: throttle Amazon sync to conservative (lower quantities published to Amazon than actual Shopify on-hand) during active receive windows.
  • Shopify Flow trigger delays. Flow automations trigger off `inventory_levels/update` webhooks but can have delays of 30-60 seconds during high-volume bursts. If an RFID count triggers replenishment Flow and you're also making rapid adjustments (like during transfer receiving), Flow may deduplicate or skip triggers. Critical replenishment logic should run in the RFID middleware itself, not in Flow, for guaranteed execution.
  • POS offline mode: Shopify POS can operate offline (queued transactions that sync on reconnect). If an RFID-counted receive happens while POS is offline, the POS's inventory view is stale until reconnection. Train store associates to recognize 'POS offline' state and avoid RFID counts during those periods, or queue RFID counts in the middleware for post-reconnect application.
  • Development vs. production API version drift. Shopify versions the API monthly (e.g., 2024-04, 2024-07, 2024-10). Development against `unstable` and production against a specific version means testing can miss breaking changes. Pin production to a specific version (e.g., `2024-04`) and test against the next version before migration. Subscribe to the Shopify Partners newsletter for deprecation timelines.

Useful next pages

Use these linked product, guide and comparison pages to keep the next click specific and practical.

RFID products for Shopify merchants

UHF RFID labels, NFC stickers and apparel-friendly tags pre-encoded against your Shopify variant catalogue. Small-batch flexibility for DTC brands; Plus-tier scale for omnichannel retailers.

Encoding and related integration guides

Companion guides on GS1 EPC encoding, NetSuite and SAP integrations and NDEF for NFC-based consumer engagement.

Start a Shopify RFID pilot

Request samples sized for a store or warehouse pilot; share your Shopify variant export for pre-encoding specification.

FAQ

How do I link RFID tags to Shopify product variants?

The preferred method is to encode tags with an SGTIN-96 value derived from your GS1 Company Prefix and the GTIN stored in the variant's barcode field on Shopify. The RFID middleware extracts the GTIN from the EPC and queries Shopify's Admin API to resolve the matching variant. For merchants without GS1 Company Prefixes (common for DTC brands), an alternative is to encode the Shopify variant SKU into the tag's user memory or use a custom EPC scheme with the variant ID; middleware resolution is then a direct SKU or variant ID lookup. Proud Tek pre-encodes tags based on a Shopify variant CSV the customer provides, returning a TID-to-variant mapping file that imports into the chosen middleware or Shopify app.

Do I need to tag every item for Shopify RFID integration?

For accurate inventory sync, yes. Every physical unit that should appear in Shopify inventory counts must carry an RFID tag. Untagged items are invisible to the RFID read and will show as zero stock. The most cost-effective operational pattern is source tagging (supplier applies tags before shipping to your warehouse or 3PL) so that incoming inventory is already RFID-ready. For existing untagged stock, a one-time backfill tagging pass at the warehouse gets you to steady state; after that, source-tagged new arrivals eliminate ongoing tagging labour. Proud Tek can coordinate tag shipments directly to your suppliers for source-tagging workflows.

What RFID readers work with Shopify?

Shopify doesn't connect directly to RFID readers. The integration runs through a middleware app (from the Shopify App Store or a third-party platform) that speaks to the reader via its native protocol and to Shopify via the Admin REST or GraphQL API. Common reader choices for Shopify merchants include Zebra MC3330xR (handheld Android), Chainway C72 (Android-based handheld), TSL 1166 Bluetooth UHF reader (pairs with iPad / iPhone / Android), and Nordic ID Stix. For fixed deployment (overhead readers, dock portals), Zebra FX9600 and Impinj Speedway R420 are common enterprise choices typically managed through a general RFID middleware platform rather than a Shopify-specific app.

Can Shopify POS work with RFID for in-store inventory counts and returns?

Yes. Shopify POS is an iOS / Android app that runs at each physical store; store associates can pair a Bluetooth RFID handheld (like the TSL 1166) to the POS device and use a companion app (from the App Store or custom-built) to perform RFID counts, receive transfer orders from the warehouse, validate returns at the counter and perform zone-by-zone cycle counts. The RFID-driven inventory updates propagate through Shopify's multi-location inventory to the online store, other POS locations, and connected marketplace channels. Retailers with omnichannel fulfillment (endless aisle, buy-online-pickup-in-store, ship-from-store) rely on RFID-accurate store inventory to make fulfillment routing reliable.

How do I handle multi-location inventory with RFID on Shopify?

Shopify's multi-location inventory model is directly compatible with RFID. Each physical location (warehouse, store, 3PL, drop-ship partner) is a Shopify location with its own inventory levels. RFID counts at each physical location update the corresponding Shopify location through the middleware, which scopes inventory adjustments to the reader's location ID. Shopify Plus supports unlimited locations; non-Plus plans support up to 10 (sufficient for most DTC brands and mid-size omnichannel retailers). For Plus merchants with global operations, Shopify Markets additionally enables per-market inventory and pricing while still sharing the underlying inventory pool.

Will RFID integration work if we use a 3PL or fulfillment partner?

Yes, with the 3PL's participation. If the 3PL already runs their own RFID programme, they typically expose inventory updates via EDI or their own API; a middleware like Celigo, MESA or a custom integration translates 3PL inventory events into Shopify inventory adjustments. If your 3PL doesn't run RFID yet, some will accept a customer-provided RFID infrastructure (readers installed at your allocated slot in their facility, managed by your middleware), while others prefer standardized processes across all their customers. We recommend confirming 3PL support early in the programme design; Proud Tek has experience coordinating source-tagged shipments directly to customer 3PL partners.

Do I have to use the GraphQL Admin API or can I keep building on REST?

For new integrations, GraphQL is effectively required. Per Shopify's deprecation timeline, the REST Admin API became a legacy API on October 1, 2024, and from April 1, 2025 all new public apps in the Shopify App Store must be built exclusively on the GraphQL Admin API. Existing REST-based middleware continues to work, but new development should use GraphQL. The current API version is `2026-01` (with `2026-04` next), and inventory mutations gain a required `@idempotent(key:)` directive in `2026-04` — pin to a specific version, plan a quarterly upgrade cadence, and migrate your inventory writes to GraphQL `inventoryAdjustQuantities` and `inventorySetQuantities` (which replaces the deprecated `inventorySetOnHandQuantities`).

How do I avoid double-posting RFID counts when the network drops mid-mutation?

Use Shopify's idempotency directive on the GraphQL inventory mutations. As of API version `2026-01`, `inventoryAdjustQuantities` and `inventorySetQuantities` accept `@idempotent(key: $idempotencyKey)` where the key is a stable string per logical RFID count batch (a UUIDv4 derived from reader-ID + UTC timestamp + sequence number works well). If the same key is replayed with the same input, Shopify returns the original successful result; if replayed with different input, the mutation returns `IDEMPOTENCY_KEY_REUSED_WITH_DIFFERENT_INPUT` so your middleware can flag a logic bug instead of silently corrupting stock. From version `2026-04` the directive is required, not optional.

What does a Shopify RFID programme typically cost at DTC or Plus-merchant scale?

Programme cost has three components: tags (variable by SKU count and volume, typically a few cents per UHF label for retail apparel volumes), reader hardware (handhelds from USD 1,000-3,000 each, fixed portal infrastructure USD 5,000-15,000 per dock door, scaling with location count), and middleware / app subscription (App Store apps from USD 50-500/month depending on features; enterprise middleware platforms scale to thousands/month). For a DTC brand with one warehouse, a meaningful programme might start at USD 5,000-15,000 upfront plus USD 100-500/month ongoing. For a Shopify Plus retailer with multiple stores, costs scale with location count but so does the ROI from overselling reduction and fulfillment accuracy improvements. Proud Tek can provide tag-cost estimates alongside third-party hardware and software budgeting guidance as part of the sample-pass conversation.

Sources & references

Primary standards, OEM datasheets and regulatory documents cited by this article. All URLs were verified on the access date shown below.

  1. Shopify Admin API — REST and GraphQL ReferenceShopify · accessed May 10, 2026

    Admin API 官方文档,涵盖 Inventory / Location / Product / Variant 资源与 Webhook,是"库存同步章节"的第一引用。

  2. Shopify GraphQL Admin — inventoryAdjustQuantities mutationShopify · accessed May 10, 2026

    Authoritative mutation reference for delta-style RFID inventory adjustments, including the @idempotent directive that becomes required in API version 2026-04.

  3. Shopify GraphQL Admin — inventorySetQuantities (replaces inventorySetOnHandQuantities)Shopify · accessed May 10, 2026

    Current mutation for absolute on-hand / available quantity sets used in full RFID reconciliation; the previous inventorySetOnHandQuantities is deprecated.

  4. Shopify Admin API — Inventory Levels (REST, legacy)Shopify · accessed May 10, 2026

    REST Admin API became a legacy API on 2024-10-01; from 2025-04-01 all new public apps must be built on GraphQL. Reference retained for existing REST-based RFID middleware.

  5. Shopify Help — Locations limits per planShopify · accessed May 10, 2026

    Authoritative limits cited in the multi-location section: Starter 2; Basic / Shopify / Advanced 10; Plus 200 (or 1,000 with POS Pro on Shopify plan or higher).

  6. Shopify POS — Unified Commerce DocumentationShopify · accessed Apr 20, 2026

    POS 扩展/UI Extension 接入文档,用于门店端读码器/手持盘点与 POS 的联动。

  7. Shopify Webhooks ReferenceShopify · accessed Apr 20, 2026

    订单/履约事件 Webhook 配置文档,对应"履约异常回调"章节。

  8. GS1 EPC Tag Data Standard (TDS) 2.1GS1 · Nov 1, 2022 · accessed Apr 20, 2026

    SGTIN-96 编码规范,Shopify Variant SKU 映射到 UHF RFID 标签的官方依据。

  9. GS1 EPCIS 2.0 — Electronic Product Code Information ServicesGS1 · Jun 1, 2022 · accessed Apr 20, 2026

    事件数据模型标准,作为 3PL 与 Shopify 之间 ObjectEvent / TransactionEvent 交换格式引用。

  10. ISO/IEC 18000-63:2021 — Parameters for air interface communications at 860 MHz to 960 MHz Type CISO/IEC · Mar 1, 2021 · accessed Apr 20, 2026

    UHF Gen2 空中接口标准,Shopify 零售 RFID 标签硬件层的协议基线。

  11. GS1 Digital Link 1.3.0GS1 · accessed Apr 20, 2026

    Web-resolvable URI 规范,用于 Shopify PDP 与 RFID/NFC/QR 的统一深链策略。

10+ Years RFID Manufacturing
ISO 9001 Certified Factory
500+ Enterprise Clients
50+ Countries Served

Proud Tek is a Shenzhen-based RFID & NFC manufacturer supplying hotel chains, transit operators, event venues and retail brands worldwide. Every order includes free samples, RF testing and dedicated project support.

Get a Quick Quote

Tell us about your project and we'll respond within one business day. Fields marked (asterisk) are required.

We'll only use this to reply to your inquiry.
Optional, but helps us route your inquiry faster.
e.g. 5,000 pcs
e.g. hotel, event, asset tracking
Chip preference, timeline, special requirements...

Next step

Ready to discuss your project?

Use the contact route when you are ready for pricing, samples, or compatibility help, or continue into the linked product and comparison pages below.