diff --git a/src/pages/graphql/schema/products/queries/index.md b/src/pages/graphql/schema/products/queries/index.md index 5d642fe72..e03a1bb45 100644 --- a/src/pages/graphql/schema/products/queries/index.md +++ b/src/pages/graphql/schema/products/queries/index.md @@ -16,6 +16,7 @@ This section describes the following queries: * [`productReviewRatingsMetadata`](product-review-ratings-metadata.md) * [`products`](products.md) * [`route`](route.md) +* [`sourceAvailability`](source-availability.md) * [`urlResolver`](url-resolver.md) diff --git a/src/pages/graphql/schema/products/queries/source-availability.md b/src/pages/graphql/schema/products/queries/source-availability.md new file mode 100644 index 000000000..33c8cece9 --- /dev/null +++ b/src/pages/graphql/schema/products/queries/source-availability.md @@ -0,0 +1,92 @@ +--- +title: sourceAvailability query +description: Use the sourceAvailability query to check per-source inventory availability for one or more SKUs, scoped to the current sales channel's assigned stock sources. +--- + + + +# sourceAvailability query + +Use the `sourceAvailability` query to check per-source inventory availability for one or more SKUs. The query reports availability only for the inventory sources assigned and enabled for the current sales channel's stock, so a storefront read never disagrees with what checkout allows. + +An admin must enable this query before it returns data. Go to **Stores** > Configuration > **Catalog** > **Inventory** > **Per-Source Availability (Storefront)** and set **Enable `sourceAvailability` GraphQL Query** to **Yes**. The query is disabled by default because it discloses which sources stock a SKU, and returns an error while disabled. + +The exact `available_qty` value is returned only when it is at or below the store's **Only X left Threshold** setting. Above the threshold, `available_qty` is `null` and `is_in_stock` is the only reliable signal. This threshold defaults to `0`, so by default every positive quantity is masked and `is_in_stock` is the authoritative field to check. To change it, go to **Stores** > Configuration > **Catalog** > **Inventory** > **Stock Options** and set **Only X left Threshold**. + +## Syntax + +```graphql +sourceAvailability (skus: [String!]! source_codes: [String!] only_in_stock: Boolean): [SkuSourceAvailability!]! +``` + +| Argument | Description | +| --- | --- | +| `skus` | The product SKUs to report availability for. Required. Accepts up to 100 entries. | +| `source_codes` | Restricts the report to these inventory sources. Accepts up to 100 entries. When omitted, the query reports every source assigned to the current sales channel's stock. | +| `only_in_stock` | When `true`, omits sources where the SKU is not salable. Defaults to `false`. | + +## Reference + +The [`sourceAvailability`](/reference/graphql/saas/index.md#sourceavailability) reference provides detailed information about the types and fields defined in this query. + +## Example usage + +The following query checks availability for a single SKU at two named sources. + +**Request:** + +```graphql +{ + sourceAvailability( + skus: ["24-MB01"] + source_codes: ["default", "east-warehouse"] + only_in_stock: false + ) { + sku + sources { + source_code + sku + available_qty + is_in_stock + } + } +} +``` + +**Response:** + +```json +{ + "data": { + "sourceAvailability": [ + { + "sku": "24-MB01", + "sources": [ + { + "source_code": "default", + "sku": "24-MB01", + "available_qty": null, + "is_in_stock": true + }, + { + "source_code": "east-warehouse", + "sku": "24-MB01", + "available_qty": 0, + "is_in_stock": false + } + ] + } + ] + } +} +``` + +## Errors + +| Error | Description | +| --- | --- | +| `Required parameter "skus" is missing or empty.` | The `skus` argument was omitted or is an empty list. | +| `Parameter "skus" may contain at most 100 entries.` | The `skus` argument contains more than 100 entries. | +| `Parameter "source_codes" must be a list of source codes.` | The `source_codes` argument was provided as a non-list value. | +| `Parameter "source_codes" may contain at most 100 entries.` | The `source_codes` argument contains more than 100 entries. | +| `The per-source availability query is not enabled for this store.` | An admin has not enabled the query for the current store. |