Extended Filtering & Bin‑Edit Mutation Added

11/2/2026, 8:27:46 PM

Shopify introduced a created_at filter for several query arguments—discountCodesCount, discountRedeemCodeSavedSearches, markets, menus, menusCount, metaobjects, productVariants, and productVariantsCount. This allows clients to limit results by creation date/time alongside existing filters. The rollouts.query argument now also supports created_at. A new mutation, inventoryBinsEdit, lets developers atomically create, update, or delete inventory bins in a single request. The automation workflow APIs now expose an activationErrors field and re‑classify configuration problems as validationErrors, with an added RESOURCE_NOT_FOUND enum value. Additional minor schema tweaks include a accountName field on AgenticExternalAccount, a CREATED_AT option for BlogSortKeys, and adjustments to Customer and CompanyLocation store credit account queries to include created_at. These changes enhance query flexibility, error granularity, and batch inventory bin management for developers.

Query Changes

🔄 Modified Queries (9)

discountCodesCount

The total number of discount codes for the shop. Limited to a maximum of 10000 by default.

~ Modified argument: query
discountRedeemCodeSavedSearches

List of the shop's redeemed discount code saved searches.

~ Modified argument: sortKey
~ Modified argument: query
markets

Returns a paginated list of Market objects configured for the shop. Markets match buyers based on defined conditions to deliver customized shopping experiences.

Filter markets by MarketType and MarketStatus, search by name, and control sort order. Retrieve market configurations including MarketCurrencySettings, MarketWebPresence objects, and MarketConditions.

Learn more about Shopify Markets.

~ Modified argument: query
menus

Retrieves navigation menus. Menus organize content into hierarchical navigation structures that merchants can display in the online store (for example, in headers, footers, and sidebars) and customer accounts.

Each Menu contains a handle for identification, a title for display, and a collection of MenuItem objects that can be nested up to 3 levels deep. Default menus have protected handles that can't be modified.

~ Modified argument: query
menusCount

Count of menus.

~ Modified argument: query
metaobjects

Returns a paginated list of Metaobject entries for a specific type. Metaobjects are custom data structures that extend Shopify's data model with merchant or app-specific data types.

Filter results using the query parameter with a search syntax for metaobject fields. Use fields.{key}:{value} to filter by field values, supporting any field previously marked as filterable.

Results are ordered by metaobject ID in ascending order by default. The sortKey parameter accepts id, type, updated_at, or display_name to control result ordering. Pass reverse: true to invert the order.

Learn more about querying metaobjects by field value.

~ Modified argument: query
productVariants

Retrieves a list of product variants
associated with a product.

A product variant is a specific version of a product that comes in more than
one option,
such as size or color. For example, if a merchant sells t-shirts with options for size and color,
then a small, blue t-shirt would be one product variant and a large, blue t-shirt would be another.

Use the productVariants query when you need to:

  • Search for product variants by attributes such as SKU, barcode, or inventory quantity.
  • Filter product variants by attributes, such as whether they're gift cards or have custom metafields.
  • Fetch product variants for bulk operations, such as updating prices or inventory.
  • Preload data for product variants, such as inventory items, selected options, or associated products.

The productVariants query supports pagination
to handle large product catalogs and saved searches
for frequently used product variant queries.

The productVariants query returns product variants with their associated metadata, including:

  • Basic product variant information (for example, title, SKU, barcode, price, and inventory)
  • Media attachments (for example, images and videos)
  • Associated products, selling plans, bundles, and metafields

Learn more about working with Shopify's product model.

~ Modified argument: query
productVariantsCount

Count of product variants. Limited to a maximum of 10000 by default.

~ Modified argument: query
rollouts

Returns the list of rollouts in the shop.

~ Modified argument: query

Mutation Changes

➕ Added Mutations (1)

inventoryBinsEdit

Creates, updates and deletes inventory bins in a single atomic operation. If any operation
fails, no changes are applied.

Note:
This mutation is available only in the unstable API version and to development stores
that have enabled the Physical inventory feature preview.

🔄 Modified Mutations (3)

automationWorkflowCreate

Creates a draft automation from a JSON configuration.

Input errors are returned in userErrors and nothing is saved. A saved draft can still have
validationErrors for its configuration and activationErrors for non-structural blockers; resolve both before activating.

automationWorkflowUpdate

Updates an automation's name, tags, note, or configuration. Supply at least one editable field.
Omitted fields keep their existing values.

Replacing the configuration edits the latest draft in place, or creates a draft if none exists.
Any active version continues running with its existing configuration. Changes to the name, tags, or note
don't create a draft.

Input errors are returned in userErrors and nothing is saved. A saved version can still have
validationErrors for its configuration and activationErrors for non-structural blockers; resolve both before activating it.

refundCreate

Creates a refund for an order, allowing you to process returns and issue payments back to customers.

Use the refundCreate mutation to programmatically process refunds in scenarios where you need to
return money to customers, such as when handling returns, processing chargebacks, or correcting
order errors.

The refundCreate mutation supports various refund scenarios:

  • Refunding line items with optional restocking
  • Refunding shipping costs
  • Refunding duties and import taxes
  • Refunding additional fees
  • Processing refunds through different payment methods
  • Issuing store credit refunds (when enabled)

You can create both full and partial refunds, and optionally allow over-refunding in specific
cases.

If the order has an existing
write-off,
calling this mutation can reduce the written-off amount automatically when it reduces the order total
before write-offs below the remaining written-off amount.

After creating a refund, you can track its status and details through the order's
refunds
field. The refund is associated with the order and can be used for reporting and reconciliation purposes.

Learn more about
managing returns
and refunding duties.

Note:
The refunding behavior of the refundCreate mutation is similar to the
returnRefund
mutation. The key difference is that the refundCreate mutation lets you to specify restocking behavior
for line items, whereas the returnRefund mutation focuses solely on handling the financial refund without
any restocking input.

Caution:
As of 2026-01, this mutation supports an optional idempotency key using the @idempotent directive.
As of 2026-04, the idempotency key is required and must be provided using the @idempotent directive.
For more information, see the idempotency documentation.

Type Changes

➕ Added Types (8)

📥InventoryBinCreateInput➕ AddedINPUT_OBJECT

The input fields to create a bin at a location.

📥InventoryBinDeleteInput➕ AddedINPUT_OBJECT

The input fields to delete a bin.

📥InventoryBinUpdateInput➕ AddedINPUT_OBJECT

The input fields to update an existing bin.

📥InventoryBinsEditInput➕ AddedINPUT_OBJECT

The input fields for a single bin operation. Exactly one of the fields must be provided.

🏗️InventoryBinsEditPayload➕ AddedOBJECT

Return type for inventoryBinsEdit mutation.

Fields: createdBins, deletedBinIds, updatedBins, userErrors
🏗️InventoryBinsEditUserError➕ AddedOBJECT

An error that occurs during the execution of InventoryBinsEdit.

Fields: code, field, message
📋InventoryBinsEditUserErrorCode➕ AddedENUM

Possible error codes that can be returned by InventoryBinsEditUserError.

Values: BIN_BARCODE_TAKEN, BIN_DUPLICATED, BIN_NAME_BLANK, BIN_NAME_TAKEN, BIN_NOT_EMPTY, BIN_NOT_FOUND, BIN_SHOP_LIMIT_REACHED, DEFAULT_BIN_CANNOT_BE_DELETED ... +4 more
📥ShopifyPaymentsUploadedDisputeFile➕ AddedINPUT_OBJECT

The input fields for a staged file to add to dispute evidence. Stage the file with
stagedUploadsCreate
using the DISPUTE_FILE_UPLOAD resource, upload it to the returned target, and then pass the target's
resourceUrl as originalSource.

🔄 Modified Types (28)

🏗️AgenticExternalAccount🔄 Modified
➕ Field added: accountName

The partner account's name, or null when no account is linked or the account has no name.

🏗️AutomationWorkflow🔄 Modified
➕ Field added: activationErrors

Non-structural errors that prevent this automation version from activating. Results describe current readiness; activation validates again.

🔄 Field modified: validationErrors
🏗️AutomationWorkflowValidationErrorCode🔄 Modified
➕ Enum value added: RESOURCE_NOT_FOUND
🏗️BlogSortKeys🔄 Modified
➕ Enum value added: CREATED_AT
🏗️CompanyLocation🔄 Modified
🔄 Field modified: storeCreditAccounts
🏗️Customer🔄 Modified
🔄 Field modified: storeCreditAccounts
🏗️DiscountCodeApp🔄 Modified
🔄 Field modified: codes
🏗️DiscountCodeBasic🔄 Modified
🔄 Field modified: codes
🏗️DiscountCodeBxgy🔄 Modified
🔄 Field modified: codes
🏗️DiscountCodeFreeShipping🔄 Modified
🔄 Field modified: codes
🏗️DisputeEvidenceUpdateUserErrorCode🔄 Modified
➕ Enum value added: PORTFOLIO_TYPE
➕ Enum value added: UNSUPPORTED_TYPE
➕ Enum value added: TOO_MANY_PAGES
➕ Enum value added: INVALID_PNG_FORMAT
🏗️DraftOrderSortKeys🔄 Modified
➕ Enum value added: CREATED_AT
🏗️HasStoreCreditAccounts🔄 Modified
🔄 Field modified: storeCreditAccounts
🏗️InventoryPurchaseOrder🔄 Modified
🔄 Field modified: lineItems
➕ Field added: updatedAt

The date and time when the purchase order itself was last updated. Adding, changing, or removing
line items doesn't change this value. Each line item's updatedAt reflects changes to that line item.

🏗️InventoryPurchaseOrderLineItem🔄 Modified
➕ Field added: createdAt

The date and time the purchase order line item was created.

➕ Field added: updatedAt

The date and time when the line item was last updated.

🏗️InventoryShipment🔄 Modified
🔄 Field modified: lineItems
🔄 Field modified: lineItemsCount
🏗️InventoryShipmentLineItem🔄 Modified
➕ Field added: createdAt

The date and time the shipment line item was created.

🏗️InventoryTransfer🔄 Modified
🔄 Field modified: lineItems
🔄 Field modified: lineItemsCount
🏗️Market🔄 Modified
➕ Field added: createdAt

The date and time the market was created.

🏗️MarketCatalog🔄 Modified
🔄 Field modified: marketsCount
🏗️MenuSortKeys🔄 Modified
➕ Enum value added: CREATED_AT
🏗️PageSortKeys🔄 Modified
➕ Enum value added: CREATED_AT
🏗️ProductVariantSortKeys🔄 Modified
➕ Enum value added: CREATED_AT
🏗️PurchaseOrderLineItemSortKeys🔄 Modified
➕ Enum value added: CREATED_AT
🏗️ShipmentLineItemSortKeys🔄 Modified
➕ Enum value added: CREATED_AT
🏗️Shop🔄 Modified
🔄 Field modified: domainsPaginated
🔄 Field modified: productVariants
🏗️UrlRedirectSortKeys🔄 Modified
➕ Enum value added: CREATED_AT
🏗️WebhookSubscriptionTopic🔄 Modified
➕ Enum value added: INVENTORY_COUNTS_CANCELED
➕ Enum value added: INVENTORY_COUNTS_COMPLETED
➕ Enum value added: INVENTORY_COUNTS_CREATED
➕ Enum value added: INVENTORY_COUNTS_LINE_ADDED
➕ Enum value added: INVENTORY_COUNTS_LINE_REMOVED
➕ Enum value added: INVENTORY_COUNTS_UPDATED