See all services → Shopify Plus Partner
API Developer

Spot currency conversion rows in Shopify Payments payouts

Admin API 2026-10 adds CURRENCY_CONVERSION to ShopifyPaymentsTransactionType, giving multi-currency merchants an explicit label for conversion entries in balance transactions.

Executive summary

What changed

ShopifyPaymentsTransactionType is the enum that labels each row in a Shopify Payments balance transaction feed. It is already long, covering charges, refunds, chargeback holds and their reversals, customs duty, import tax, payouts, and dozens of adjustment variants. As of API version 2026-10 it gains one more value: CURRENCY_CONVERSION.

That is the whole of the change. No field is removed, no existing value is renamed, and nothing in a current integration stops working. What changes is that a class of balance movement which previously had to be deduced now declares itself.

Why it matters

Multi-currency selling produces balance activity that has nothing to do with any single order. When funds move between currency balances, the resulting entry still has to be classified, and integrations consuming balance transactions have generally handled this by pattern matching on amounts or by bucketing anything unrecognised into a catch-all account. Both approaches are fragile, and both tend to fail quietly.

An explicit type removes the inference. Middleware can route CURRENCY_CONVERSION rows to a foreign exchange gain or loss account without a heuristic, and a reconciliation report can separate genuine trading activity from treasury movement. For merchants running several currencies through Shopify Markets, that separation is what makes gross margin by market trustworthy rather than approximate.

There is a defensive point here too. A new enum value is a common cause of runtime failures in strictly typed clients. Code generated from a GraphQL schema and compiled against an exhaustive switch will reject an unknown member, so integrations that do not tolerate unrecognised values should be checked before the version bump, not after.

Role-specific impact

Use-case example

Real-world scenario

A brand sells in Canadian dollars, United States dollars, and euros, and syncs Shopify Payments balance transactions into its ERP nightly. Roughly 30 entries a month land in an unclassified suspense account because the integration cannot distinguish a currency conversion from an unexplained adjustment, and the controller clears them by hand at each close. Adding explicit handling for CURRENCY_CONVERSION after the upgrade routes those entries straight to the foreign exchange account. That removes about two hours of manual clearing per month and, more usefully, removes the judgement calls that came with it.

Implementation checklist

  1. Check whether your integration parses ShopifyPaymentsTransactionType, and whether it fails on values it does not recognise.
  2. Make an unknown enum value a logged warning rather than an exception, if that is not already the behaviour.
  3. Move to GraphQL Admin API version 2026-10 when convenient, since this change carries no urgency of its own.
  4. Add explicit handling for CURRENCY_CONVERSION and map it to the correct general ledger account with your finance team.
  5. Reconcile one closed month after the change and confirm entries that previously landed in suspense are now classified.

FAQ

Q: Is action required before we upgrade?

A: Only defensive action. Integrations that tolerate unrecognised enum values need nothing. Strictly typed clients with exhaustive handling should be reviewed, because that is where a new value surfaces as an error rather than as data.

Q: Does this change what Shopify charges for currency conversion?

A: No. This is a labelling change in the API. Conversion behaviour and its cost are unaffected, and no merchant-facing setting changes.

Resources

ShopifyPaymentsTransactionType enum reference

Need guidance? Talk to Makro.