# Lokasyona göre stok seviyelerini okuma

> Bir lokasyondaki tüm ürünlerin satılabilir, eldeki, ayrılmış ve yoldaki stoğunu ya da tek bir ürünün tüm lokasyonlardaki stoğunu okuyun.

Sayfa: https://lintelagency.com/tr/kaynaklar/graphql/lokasyona-gore-stok-seviyeleri

## Kısaca

Lokasyon bazında stok okumak için location(id) sorgusunun inventoryLevels bağlantısını sayfalayın ve her seviyeden quantities(names: ["available", "on_hand", "committed", "incoming"]) isteyin. Tek bir ürünü her yerde görmek için inventoryItem(id) ve onun inventoryLevels’ını sorgulayın; lokasyon başına bir seviye döner. quantities alanı eski available sayısının yerini alır ve istediğiniz her stok durumunu döndürür.

## Bilgiler

- **API:** Admin GraphQL API
- **İşlemler:** location, inventoryItem (inventoryLevels, quantities)
- **Erişim yetkileri:** read_inventory, read_locations
- **Yerini aldığı REST çağrısı:** GET /admin/api/inventory_levels.json?location_ids=…
- **API sürümü:** 2026-10
- **Son kontrol:** 2 Kasım 2026

## Nasıl kullanılır

1. Lokasyon ID’lerini locations sorgusuyla bir kez alın.
2. StockAtLocation’ı first: 100 ile gönderin ve hasNextPage false olana kadar after: endCursor ile sayfalayın.
3. names içinde ihtiyacınız olan durumları seçin: available, on_hand, committed, incoming, reserved, damaged, safety_stock ya da quality_control.
4. Tek bir SKU’nun depolar arasındaki stoğu için StockOfItem’ı envanter kalemi ID’siyle gönderin.

## Kod

### location-inventory-levels.graphql

```graphql
query StockAtLocation($locationId: ID!, $first: Int!, $after: String) {
  location(id: $locationId) {
    id
    name
    inventoryLevels(first: $first, after: $after) {
      nodes {
        item {
          id
          sku
        }
        quantities(names: ["available", "on_hand", "committed", "incoming"]) {
          name
          quantity
        }
      }
      pageInfo {
        hasNextPage
        endCursor
      }
    }
  }
}
```

### location-inventory-levels.variables.json

```json
{
  "locationId": "gid://shopify/Location/1234567890",
  "first": 100,
  "after": null
}
```

### location-inventory-levels.response.json

```json
{
  "data": {
    "location": {
      "id": "gid://shopify/Location/1234567890",
      "name": "Main warehouse",
      "inventoryLevels": {
        "nodes": [
          {
            "item": {"id": "gid://shopify/InventoryItem/1111111111", "sku": "LS-S"},
            "quantities": [
              {"name": "available", "quantity": 12},
              {"name": "on_hand", "quantity": 15},
              {"name": "committed", "quantity": 3},
              {"name": "incoming", "quantity": 20}
            ]
          }
        ],
        "pageInfo": {
          "hasNextPage": true,
          "endCursor": "eyJsYXN0X2lkIjoxMTExMTExMTExfQ=="
        }
      }
    }
  }
}
```

### item-inventory-levels.graphql

```graphql
query StockOfItem($inventoryItemId: ID!) {
  inventoryItem(id: $inventoryItemId) {
    id
    sku
    tracked
    inventoryLevels(first: 20) {
      nodes {
        location {
          id
          name
        }
        quantities(names: ["available", "on_hand"]) {
          name
          quantity
        }
      }
    }
  }
}
```

### item-inventory-levels.variables.json

```json
{
  "inventoryItemId": "gid://shopify/InventoryItem/1111111111"
}
```

### item-inventory-levels.response.json

```json
{
  "data": {
    "inventoryItem": {
      "id": "gid://shopify/InventoryItem/1111111111",
      "sku": "LS-S",
      "tracked": true,
      "inventoryLevels": {
        "nodes": [
          {
            "location": {"id": "gid://shopify/Location/1234567890", "name": "Main warehouse"},
            "quantities": [{"name": "available", "quantity": 12}, {"name": "on_hand", "quantity": 15}]
          },
          {
            "location": {"id": "gid://shopify/Location/1234567891", "name": "Shop floor"},
            "quantities": [{"name": "available", "quantity": 2}, {"name": "on_hand", "quantity": 2}]
          }
        ]
      }
    }
  }
}
```

## Sınırlar ve özel durumlar

- includeInactive: true vermezseniz pasif seviyeler listelenmez.
- on_hand; available, committed ve satılamayan durumların toplamıdır. incoming henüz elde olmayan, yoldaki stoktur.
- Binlerce kalemlik tam bir stok dökümü için aynı sorguyu bulk operation olarak çalıştırın.

## Sorular

### Shopify’da belirli bir lokasyonun stoğunu nasıl alırım?

location(id) { inventoryLevels(first: 100) { nodes { item { sku } quantities(names: ["available"]) { quantity } } } } sorgusunu çalıştırıp sonuçları sayfalayın.

### available ile on_hand arasındaki fark nedir?

available şu an satılabilecek miktardır. on_hand ise fiziksel olarak orada olan her şeydir; siparişlere ayrılmış ve hasarlı ya da rezerve olarak ayrılmış adetler dahil.

### inventoryLevel.available alanı neden yok?

Yerini, herhangi bir stok durumunu adıyla döndüren quantities(names: [...]) aldı.

## Shopify belgeleri

- [InventoryLevel object](https://shopify.dev/docs/api/admin-graphql/latest/objects/InventoryLevel)
- [Inventory states](https://shopify.dev/docs/apps/build/orders-fulfillment/inventory-management-apps/manage-quantities-states)

## İlgili içerikler

- [Harici bir sistemden stok miktarlarını ayarlama](https://lintelagency.com/tr/kaynaklar/graphql/stok-miktarlarini-ayarlama)
- [Sonuçları cursor ile sayfalama](https://lintelagency.com/tr/kaynaklar/graphql/cursor-ile-sayfalama)
- [Shopify stoğunu başka bir sistemle senkron tutmak](https://lintelagency.com/tr/blog/shopify-stok-senkronizasyonu)

Lisans: MIT. Kendi mağazanızda da müşteri işlerinizde de ücretsiz kullanabilirsiniz.
