Global IDs Take Over: Tax Webhook Summary and Calculation Requests Updated

Starting with API version 2027-01, Shopify tax webhooks and calculation requests now use Global IDs, streamlining identifier handling for developers. Learn what changed, who’s impacted, and how to update your integrations today.

Global IDs Take Over: Tax Webhook Summary and Calculation Requests Updated
6 sections

Shopify’s latest developer update simplifies the way third‑party tax apps interact with the platform. As of API version 2027-01, every entity reference in tax calculation requests and tax summary webhook payloads is expressed as a Global ID (GID). This shift aligns tax integrations with the rest of Shopify’s API ecosystem, eliminating the need to juggle multiple ID formats. In this post we’ll break down exactly what changed, who needs to act, and how to bring your code up to speed.

What Changed: Global IDs Everywhere

Previously, tax‑related payloads mixed raw integer IDs (e.g., "customer": {"id": "5"}) with Shopify’s newer GID format used elsewhere. The new schema standardizes every reference to the GID pattern "gid://shopify/<Entity>/<ID>". The change touches two integration points:

  • Tax calculation requests – Customer, Company, CompanyLocation, Product, and ProductVariant IDs are now GIDs.
  • Tax summary webhooks – All IDs inside the summary section (Order, Customer, Product, LineItem, Sale, Agreement, etc.) are now GIDs, and three new top‑level fields appear: shop_admin_graphql_api_id, order_admin_graphql_id, and admin_graphql_api_id for the TaxSummary itself.
  • The payload examples in the changelog illustrate the shift: a customer ID goes from "5" to "gid://shopify/Customer/5", a line item ID becomes "gid://shopify/LineItem/12", and the webhook now carries admin GraphQL IDs for the shop and order.

    Who Is Affected: Developers vs. Merchants

    Developers building or maintaining third‑party tax apps are the primary audience. Their code that parses tax calculation requests or consumes the tax summary webhook must accept the GID format, otherwise lookups will fail or produce unexpected results.

    Merchants generally won’t see a visual change in their admin, but they may notice errors if an installed tax app hasn’t been updated. A mis‑parsed ID can lead to incorrect tax calculations, delayed order fulfillment, or even webhook delivery retries.

    How to Update Your Tax Calculation Requests

    The change is straightforward: wherever your app builds or reads the request payload, replace raw integer IDs with the GID string. Below is a before‑and‑after snippet for the buyer identity block.

    // Before (API <= 2026-10)

    {"cart":{"buyer_identity":{"customer":{"id":"593934299"}}}}

    // After (API >= 2027-01)

    {"cart":{"buyer_identity":{"customer":{"id":"gid://shopify/Customer/593934299"}}}}

    If you generate IDs programmatically, use Shopify’s helper function (available in most SDKs) to convert an integer to a GID: ShopifyID.encode('Customer', id) or, in Ruby, ShopifyAPI::GID.encode('Customer', id). This ensures consistency across all endpoints.

    Handling the Updated Tax Summary Webhook

    The webhook payload now includes GIDs for every nested entity and adds three admin GraphQL IDs at the top level. A typical updated payload looks like this:

    {

    "id":80,

    "admin_graphql_api_id":"gid://shopify/TaxSummary/80",

    "shop_id":1,

    "shop_admin_graphql_api_id":"gid://shopify/Shop/1",

    "order_id":64,

    "order_admin_graphql_api_id":"gid://shopify/Order/64",

    "summary":{

    "agreements":[{

    "id":"gid://shopify/SalesAgreement/82",

    "sales":[{

    "id":"gid://shopify/Sale/106",

    "line_item_id":"gid://shopify/LineItem/76"

    }]

    }]

    }

    }

    To adapt:

  • Parse GIDs – Treat the id fields as opaque strings. If you need the numeric part, split on the last slash (/) or use Shopify’s SDK to decode.
  • Update database schemas – If you store tax webhook IDs, change column types from integer to string (or varchar) to preserve the full GID.
  • Leverage the new admin_graphql_api_id fields – These IDs map directly to GraphQL queries, so you can fetch the related Shop, Order, or TaxSummary without an extra lookup step.
  • Maintain backward compatibility – For stores still on older API versions, you may receive integer IDs. Guard your code with a conditional: if the ID starts with "gid://" use it as‑is, otherwise wrap it in the GID format before any downstream call.
  • Testing and Validation

  • Upgrade your API version – Switch your app’s GraphQL/REST client to 2027-01 (or later) in the Shopify Partner Dashboard. The platform will automatically start sending GIDs.
  • Use Shopify’s API reference explorer – Trigger a tax calculation request from a sandbox store and inspect the payload. Verify that every ID follows the gid://shopify/... pattern.
  • Run unit tests – Mock the webhook payload with GIDs and assert that your parsing logic extracts the numeric portion correctly. Include tests for the legacy integer format to ensure a smooth rollout.
  • Monitor webhook delivery – After deployment, watch the webhook logs in the Partner Dashboard. A spike in “400 Bad Request” errors usually points to lingering integer‑ID handling.
  • Conclusion & Next Steps

    The move to Global IDs for tax calculations and summary webhooks is a small but powerful step toward a unified Shopify API surface. By updating your app to recognize GIDs, you reduce friction, eliminate duplicate ID‑translation logic, and future‑proof your integration against upcoming API changes.

    Ready to upgrade? Switch your app’s API version to 2027-01, refactor the ID handling as shown above, and deploy to a staging store. If you hit any roadblocks, the Shopify dev forums and the official API reference are excellent resources. Happy coding!

    Tags
    Sources

    Related Articles

    Next‑Gen Events Give You Precise Control Over Shopify Commerce Updates

    Next‑Gen Events Give You Precise Control Over Shopify Commerce Updates

    Shopify’s Next‑Gen Events replace classic webhooks with granular triggers, inline GraphQL payloads, and query filters—saving developers time and reducing API calls. Learn what changed, who it affects, and how to migrate today.

    October 1, 20265 min
    Orders Webhooks Now Deliver Subscription Selling Plan IDs Directly

    Orders Webhooks Now Deliver Subscription Selling Plan IDs Directly

    Shopify’s latest webhook update adds a selling_plan_id field to order line items, letting developers identify subscription plans without extra API calls. Learn what changed, who it impacts, and how to adapt your apps today.

    October 1, 20263 min
    Unlocking Fiscal Compliance: New fiscalDeviceIdentifier Field on PointOfSaleDevice

    Unlocking Fiscal Compliance: New fiscalDeviceIdentifier Field on PointOfSaleDevice

    Shopify’s 2026-10 API adds a fiscalDeviceIdentifier to PointOfSaleDevice, giving developers a reliable way to access a device’s tax‑registered identifier for in‑person fiscal workflows. Learn what changed, who it impacts, and how to implement it today.

    October 1, 20264 min
    Why metafieldInteger Is Gone: Migrating to metafieldInt in API 2027‑01

    Why metafieldInteger Is Gone: Migrating to metafieldInt in API 2027‑01

    Shopify’s 2027‑01 API drops the metafieldInteger collection condition in favor of metafieldInt. Learn what changed, who’s affected, and step‑by‑step how to update your queries, mutations, and value types before the upgrade.

    October 1, 20264 min