Add Inventory Count features, upgrade MarketingEngagement, improve File APIs

10/23/2026, 12:02:46 AM

The Admin API now exposes inventoryCount and inventoryCounts queries, plus a suite of mutations for creating, updating, completing, recording observations, and canceling inventory counts, with new metadata and completion flags. The InventoryCount type receives several new fields (name, tags, status, note, plannedAt, createdBy, compareDigest, closedAt) and line items can be marked as invalidated or stale. File, GenericFile, MediaImage, Model3d, Video, and ExternalVideo types now expose name and path, while the files query adds a parent_directory_path filter to scope results by directory. The analyticsTargets query’s filter syntax has been expanded to include a created_at criterion. Marketing engagement APIs have been streamlined: channelHandle is removed from the create mutation, its field is deprecated, and marketingEngagementsDelete is now fully deprecated and its arguments removed. identityProviderSubjectDelete’s customerId description was simplified. New enum values were added for CustomerPaymentMethodRevocationReason, ProductVariantComplianceKey, InventoryLocationItemSortKeys, and RolloutTreatment change filtering, and new StaffMemberPermission enums (VIEW_INVENTORY_COUNTS, MANAGE_INVENTORY_COUNTS, PERFORM_INVENTORY_COUNTS) enable granular inventory‑count permissions.

Query Changes

➕ Added Queries (2)

inventoryCount

Returns an InventoryCount object by ID.

inventoryCounts

Returns a paginated list of inventory counts for the shop.

🔄 Modified Queries (4)

analyticsTargets

Returns a paginated list of analytics targets
for the shop. Each target represents a merchant-defined goal for a specific metric over a date range.

Results can be filtered by metric, name, date range, or filter expression, and sorted by fields
such as start_date, expected_value, or metric.

Use the analyticsTargetCreate
mutation to add new targets.

~ Modified argument: query
checkoutAndAccountsConfigurations

List of checkout and accounts configurations on a shop.

~ Modified argument: query
checkoutProfiles

List of checkout profiles on a shop.

~ Modified argument: query
files

Retrieves a paginated list of files that have been uploaded to a Shopify store. Files represent digital assets
that merchants can upload to their store for various purposes including product images, marketing materials,
documents, and brand assets.

Use the files query to retrieve information associated with the following workflows:

Files can include multiple content types,
such as images, videos, 3D models, and generic files. Each file has
properties like dimensions, file size, alt text for accessibility, and upload status. Files can be filtered
by media type and can be associated with
products,
themes,
and other store resources.

~ Modified argument: query

Mutation Changes

➕ Added Mutations (8)

inventoryCountAddItems

Adds inventory items to an existing inventory count.

inventoryCountCancel

Cancels an open inventory count. This operation is irreversible.

inventoryCountComplete

Marks an inventory count as completed and applies any inventory adjustments
based on the counted quantities. This operation is irreversible.

inventoryCountRecordObservations

Records observations for items in an inventory count as counted quantities. Each observation
input identifies an inventory item by its ID; if the item is not yet on the count, a line is
created for it. Each delta quantity for an observation adds to the item's total quantity.

inventoryCountRemoveItems

Removes line items from an existing inventory count.

inventoryCountRequestReview

Requests or withdraws a review of an inventory count. Requesting a review marks the count as
ready to be reviewed; withdrawing it removes that request.

inventoryCountUpdateLocation

Changes the location of an inventory count. Only allowed while the count is open and has no line items.

inventoryCountUpdateMetadata

Updates metadata for an inventory count.

🔄 Modified Mutations (4)

identityProviderSubjectDelete

Unlink a customer's third-party identity provider subject.

~ Modified argument: customerId
inventoryCountCreate

Creates an inventory count for auditing and adjusting stock levels at a specific location.

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

+ New argument: metadata
+ New argument: complete
marketingEngagementCreate

Creates a new marketing engagement for a marketing activity.

- Removed argument: channelHandle
~ Modified argument: marketingActivityId
~ Modified argument: remoteId
marketingEngagementsDelete

Marks engagement data for a channel so it no longer appears in reports. Activity-level data cannot be deleted directly; delete the MarketingActivity instead.

⚠️ Deprecated: Channel-level engagements are deprecated. Activity-level engagement data cannot be deleted directly; delete the MarketingActivity instead.
- Removed argument: channelHandle
- Removed argument: deleteEngagementsForAllChannels

Type Changes

➕ Added Types (31)

🏗️Directory➕ AddedOBJECT

Represents a directory for organizing files.

Fields: alt, createdAt, fileErrors, fileStatus, id ... +5 more
🏗️InventoryCountAddItemsPayload➕ AddedOBJECT

Return type for inventoryCountAddItems mutation.

Fields: addedLineItems, inventoryCount, userErrors
🏗️InventoryCountAddItemsUserError➕ AddedOBJECT

An error that occurs during the execution of InventoryCountAddItems.

Fields: code, field, message
📋InventoryCountAddItemsUserErrorCode➕ AddedENUM

Possible error codes that can be returned by InventoryCountAddItemsUserError.

Values: CHANGE_FROM_QUANTITY_STALE, DUPLICATE_ITEM, IDEMPOTENCY_CONCURRENT_REQUEST, IDEMPOTENCY_KEY_PARAMETER_MISMATCH, IDEMPOTENCY_PREVIOUS_ATTEMPT_FAILED, INVALID_ITEM, INVALID_STATE, ITEMS_EMPTY ... +3 more
🏗️InventoryCountCancelPayload➕ AddedOBJECT

Return type for inventoryCountCancel mutation.

Fields: inventoryCount, userErrors
🏗️InventoryCountCancelUserError➕ AddedOBJECT

An error that occurs during the execution of InventoryCountCancel.

Fields: code, field, message
📋InventoryCountCancelUserErrorCode➕ AddedENUM

Possible error codes that can be returned by InventoryCountCancelUserError.

Values: RESOURCE_NOT_FOUND, INVALID_STATE, IDEMPOTENCY_CONCURRENT_REQUEST, IDEMPOTENCY_PREVIOUS_ATTEMPT_FAILED, IDEMPOTENCY_KEY_PARAMETER_MISMATCH
🏗️InventoryCountCompletePayload➕ AddedOBJECT

Return type for inventoryCountComplete mutation.

Fields: inventoryCount, userErrors
🏗️InventoryCountCompleteUserError➕ AddedOBJECT

An error that occurs during the execution of InventoryCountComplete.

Fields: code, field, message
📋InventoryCountCompleteUserErrorCode➕ AddedENUM

Possible error codes that can be returned by InventoryCountCompleteUserError.

Values: RESOURCE_NOT_FOUND, INVALID_STATE, STALE_OBJECT, LOCATION_NOT_ACTIVE, IDEMPOTENCY_CONCURRENT_REQUEST, IDEMPOTENCY_PREVIOUS_ATTEMPT_FAILED, IDEMPOTENCY_KEY_PARAMETER_MISMATCH
🏗️InventoryCountConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple InventoryCounts.

Fields: edges, nodes, pageInfo
🏗️InventoryCountEdge➕ AddedOBJECT

An auto-generated type which holds one InventoryCount and a cursor during pagination.

Fields: cursor, node
📥InventoryCountMetadataInput➕ AddedINPUT_OBJECT

The input fields for the metadata that can be set on a count.

📥InventoryCountObservationInput➕ AddedINPUT_OBJECT

The input fields for an observation to record against an inventory count.

🏗️InventoryCountRecordObservationsPayload➕ AddedOBJECT

Return type for inventoryCountRecordObservations mutation.

Fields: inventoryCount, observedItems, userErrors
🏗️InventoryCountRecordObservationsUserError➕ AddedOBJECT

An error that occurs during the execution of InventoryCountRecordObservations.

Fields: code, field, message
📋InventoryCountRecordObservationsUserErrorCode➕ AddedENUM

Possible error codes that can be returned by InventoryCountRecordObservationsUserError.

Values: IDEMPOTENCY_CONCURRENT_REQUEST, IDEMPOTENCY_PREVIOUS_ATTEMPT_FAILED, IDEMPOTENCY_KEY_PARAMETER_MISMATCH, RESOURCE_NOT_FOUND, LOCATION_NOT_ACTIVE, INVALID_STATE, EMPTY_INPUT, INVALID_QUANTITY ... +3 more
🏗️InventoryCountRemoveItemsPayload➕ AddedOBJECT

Return type for inventoryCountRemoveItems mutation.

Fields: inventoryCount, removedLineItemIds, userErrors
🏗️InventoryCountRemoveItemsUserError➕ AddedOBJECT

An error that occurs during the execution of InventoryCountRemoveItems.

Fields: code, field, message
📋InventoryCountRemoveItemsUserErrorCode➕ AddedENUM

Possible error codes that can be returned by InventoryCountRemoveItemsUserError.

Values: RESOURCE_NOT_FOUND, INVALID_STATE, EMPTY_INPUT, STALE_OBJECT, IDEMPOTENCY_CONCURRENT_REQUEST, IDEMPOTENCY_PREVIOUS_ATTEMPT_FAILED, IDEMPOTENCY_KEY_PARAMETER_MISMATCH
🏗️InventoryCountRequestReviewPayload➕ AddedOBJECT

Return type for inventoryCountRequestReview mutation.

Fields: inventoryCount, userErrors
🏗️InventoryCountRequestReviewUserError➕ AddedOBJECT

An error that occurs during the execution of InventoryCountRequestReview.

Fields: code, field, message
📋InventoryCountRequestReviewUserErrorCode➕ AddedENUM

Possible error codes that can be returned by InventoryCountRequestReviewUserError.

Values: RESOURCE_NOT_FOUND, INVALID_STATE, IDEMPOTENCY_CONCURRENT_REQUEST, IDEMPOTENCY_PREVIOUS_ATTEMPT_FAILED, IDEMPOTENCY_KEY_PARAMETER_MISMATCH
📋InventoryCountStatus➕ AddedENUM

Represents the status of an inventory count.

Values: DRAFT, IN_PROGRESS, IN_REVIEW, COMPLETED, CANCELED
🏗️InventoryCountUpdateLocationPayload➕ AddedOBJECT

Return type for inventoryCountUpdateLocation mutation.

Fields: inventoryCount, userErrors
🏗️InventoryCountUpdateLocationUserError➕ AddedOBJECT

An error that occurs during the execution of InventoryCountUpdateLocation.

Fields: code, field, message
📋InventoryCountUpdateLocationUserErrorCode➕ AddedENUM

Possible error codes that can be returned by InventoryCountUpdateLocationUserError.

Values: RESOURCE_NOT_FOUND, LOCATION_NOT_ACTIVE, INVALID_STATE, IDEMPOTENCY_CONCURRENT_REQUEST, IDEMPOTENCY_PREVIOUS_ATTEMPT_FAILED, IDEMPOTENCY_KEY_PARAMETER_MISMATCH
🏗️InventoryCountUpdateMetadataPayload➕ AddedOBJECT

Return type for inventoryCountUpdateMetadata mutation.

Fields: inventoryCount, userErrors
🏗️InventoryCountUpdateMetadataUserError➕ AddedOBJECT

An error that occurs during the execution of InventoryCountUpdateMetadata.

Fields: code, field, message
📋InventoryCountUpdateMetadataUserErrorCode➕ AddedENUM

Possible error codes that can be returned by InventoryCountUpdateMetadataUserError.

Values: RESOURCE_NOT_FOUND, IDEMPOTENCY_CONCURRENT_REQUEST, IDEMPOTENCY_PREVIOUS_ATTEMPT_FAILED, IDEMPOTENCY_KEY_PARAMETER_MISMATCH
📋ProductVariantComplianceKeyInput➕ AddedENUM

The kind of compliance declaration a merchant can record on a product variant. The identifiers Shopify
derives (M_PID, NS_PID, S_PID, EU_PID_EXEMPTION) are read-only and only appear in
ProductVariantComplianceKey.

Values: Y081

🔄 Modified Types (19)

🏗️CustomerPaymentMethodRevocationReason🔄 Modified
➕ Enum value added: RETRY_DECLINED
🏗️ExternalVideo🔄 Modified
➕ Field added: name

The name of the file.

➕ Field added: path

The full path of the file from the root directory.

🏗️FeeDetails🔄 Modified
🔄 Field modified: amount
🔄 Field modified: settlementAmount
🔄 Field modified: taxAmount
🏗️File🔄 Modified
➕ Field added: name

The name of the file.

➕ Field added: path

The full path of the file from the root directory.

🏗️FulfillmentOrderDestination🔄 Modified
➕ Field added: addressCode

A country-specific address code of the destination (for example, a Saudi short address code).

➕ Field added: addressLineComponents

Structured components of the destination's address1 and address2 lines, such as streetName,
streetNumber, additionalInformation, district, and subdistrict. Each component is null
when the destination has no stored value for it.

🏗️GenericFile🔄 Modified
➕ Field added: name

The name of the file.

➕ Field added: path

The full path of the file from the root directory.

🏗️InventoryCount🔄 Modified
➕ Field added: closedAt

The date and time the count was closed. A count is closed when it's completed or canceled.

➕ Field added: compareDigest

The data stored in the resource, represented as a digest.

➕ Field added: createdBy

The staff member who created the count.

➕ Field added: lineItemsCount

The number of line items in this count.

➕ Field added: name

The display name for the count.

➕ Field added: note

A note about the count.

➕ Field added: plannedAt

The planned date for the count.

➕ Field added: status

The derived status of the count.

➕ Field added: tags

A list of tags associated with the count.

➕ Field added: title

The title of the count.

🏗️InventoryCountLineItem🔄 Modified
➕ Field added: invalidated

Whether this line's counted result has been invalidated.

➕ Field added: stale

Whether the item's expected quantity has gone out of date because its on-hand quantity changed during the count.

🏗️InventoryLocationItemSortKeys🔄 Modified
➕ Enum value added: CREATED_AT
🏗️MarketingEngagement🔄 Modified
🔄 Field modified: channelHandle
🏗️MarketingEngagementCreatePayload🔄 Modified
🔄 Field modified: marketingEngagement
🏗️MediaImage🔄 Modified
🔄 Field modified: mimeType
➕ Field added: name

The name of the file.

➕ Field added: path

The full path of the file from the root directory.

🏗️Model3d🔄 Modified
➕ Field added: name

The name of the file.

➕ Field added: path

The full path of the file from the root directory.

🏗️ProductVariant🔄 Modified
🔄 Field modified: compliance
🏗️ProductVariantCompliance🔄 Modified
🔄 Field modified: key
🔄 Field modified: value
🏗️ProductVariantComplianceKey🔄 Modified
➕ Enum value added: M_PID
➕ Enum value added: NS_PID
➕ Enum value added: S_PID
➕ Enum value added: EU_PID_EXEMPTION
🏗️RolloutTreatment🔄 Modified
🔄 Field modified: changes
🏗️StaffMemberPermission🔄 Modified
➕ Enum value added: VIEW_INVENTORY_COUNTS
➕ Enum value added: MANAGE_INVENTORY_COUNTS
➕ Enum value added: PERFORM_INVENTORY_COUNTS
🏗️Video🔄 Modified
➕ Field added: name

The name of the file.

➕ Field added: path

The full path of the file from the root directory.