Executive summary
- What: The GraphQL Admin API now returns a live cash drawer balance, and cash count activities carry a staff note plus a merchant defined reason code.
- Why: Reconciliation detail that previously required per location exports or admin side inspection can now be pulled programmatically into finance systems.
- Who: Plus merchants operating physical retail, their finance and loss prevention teams, and the developers maintaining POS, ERP, or reporting integrations.
What changed
Shopify added three fields to the cash management resources in the GraphQL Admin API, available from the 2026-07 version. The CashDrawer object now returns balance as a MoneyV2 value, giving you the current amount in a given drawer without summing activities yourself. CashCountActivity, the record produced when staff open or close a drawer, now carries two additional fields: note, which holds the free text a staff member left during a count, and reasonCode, which ties the count back to a merchant defined category. Reading any of this requires the read_cash_tracking access scope. Everything around these fields is unchanged. Drawers still hang off a location, and cashActivities remains a paginated connection you can filter and sort.
Why it matters
Cash variance is a slow leak. At one or two locations it stays visible, but across a few dozen stores it compounds quietly and usually surfaces at quarter close rather than at the till. Until now, getting drawer level detail out of Shopify meant exporting reports per location or asking staff to reconcile inside the admin. With balance exposed directly on the drawer, a nightly job can compare expected against counted across every store and escalate only the outliers. The note and reasonCode fields matter more than they first appear: they turn a bare variance number into an explanation, so a sixty dollar discrepancy tagged as a float correction gets triaged differently from one left blank. Paired with the automatic cash transfer behaviour Shopify shipped earlier, this closes most of the remaining distance between POS cash handling and the general ledger.
Role-specific impact
- Marketers: Little direct impact. The indirect benefit is cleaner store level profitability data, which makes regional campaign attribution less noisy when cash heavy locations are in the mix.
- Developers: Move affected queries to 2026-07 or later and confirm the app requests read_cash_tracking. Reading balance from the drawer replaces client side aggregation over activities, which removes a pagination loop and a rounding risk.
- Store admins: Notes and reason codes staff enter at close now travel into head office reporting. That raises the value of a consistent reason taxonomy and makes it worth retraining teams on what to write.
Use-case example
Real-world scenario
A 40 store apparel retailer on Shopify Plus closes drawers nightly. Two head office staff spent roughly six hours a week chasing variances by opening each location in the admin, and discrepancies under a set amount were usually written off because investigating cost more than the loss. With the new fields, a scheduled job pulls balance and the day's cash count activities across all 40 locations, computes variance per drawer, and posts anything over 25 dollars into a district manager queue with the staff note attached. The manual review window drops from six hours to under one, and, more usefully, the write off floor comes down because triage is now cheap enough to be worth doing.
Implementation checklist
- Confirm the app or integration requesting this data holds the read_cash_tracking access scope, and re-authorise if you are adding it to an existing app.
- Move the relevant queries to Admin API version 2026-07 or later.
- Replace any client side balance calculation with a direct read of CashDrawer.balance, and verify the MoneyV2 currency matches what your finance system expects per location.
- Query note and reasonCode on CashCountActivity, handling null for both. Historical activities will not have them populated.
- Agree a reason code taxonomy with store operations before you build reporting on it, otherwise the field fills with inconsistent values and the analysis is worth little.
- Validate a full week of API output against manual counts from the same period before you retire the manual process.
FAQ
Q: Do we need to upgrade POS hardware or app versions to get these fields? A: No. These are additions to the GraphQL Admin API surface. Your integration reads them once it targets a supported API version and holds the right scope.
Q: Is reasonCode a fixed list defined by Shopify? A: It resolves to a union type for cash management reason codes rather than a single fixed enum, and it is designed to connect counts to merchant defined categorisation. Handle unknown values gracefully rather than switching on an exhaustive list.
Resources
CashDrawer object reference, GraphQL Admin API 2026-07
Need guidance? Talk to Makro.