İçeriğe geç
siparis.app geliştiriciAnahtarları yönet ↗

Siparişleri listelemek

API temel adresi https://api.siparis.app/v1. Başlarken sayfasından anahtar oluşturup sunucunuzda SIPARIS_API_KEY değişkenine kaydedin. Komutlar curl ve yanıtı okumak için python3 kullanır; yerelde SIPARIS_API_URL değişkenine /v1 ile biten API adresini verebilirsiniz. Kendi kayıtlarınızın kimlikleri, sayıları ve tarihleri örneklerden farklı olacaktır. Sipariş açmak ve ilerletmek için Sipariş eklemek rehberine bakın.

1. Son siparişleri alın

Örnekte 16 Ekim 2026 günü Türkiye saatiyle oluşan siparişler istenir. Tarihleri istediğiniz günle değiştirin. Başlangıç dahil, bitiş hariçtir; saat dilimi zorunludur. created_at_from siparişin oluştuğu tarihe göre süzer.

curl --fail-with-body --silent --show-error --get \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders" \
  -H "Authorization: Bearer $SIPARIS_API_KEY" \
  --data-urlencode 'created_at_from=2026-10-16T00:00:00+03:00' \
  --data-urlencode 'created_at_to=2026-10-17T00:00:00+03:00' \
  --data-urlencode 'sort=-created_at' \
  --data-urlencode 'limit=50'

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "ord_1234567890abcdef1234567890abcdef",
      "number": "48273910",
      "status": "confirmed",
      "created_at": "2026-10-16T09:00:00Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

sort=-created_at en yeni siparişi başa getirir. sort vermezseniz liste son değişikliğe göre (updated_at) eskiden yeniye gelir; eşitleme için bu sıra uygundur. Sıralamayı değiştirince eski imleç geçersizdir, ilk sayfadan başlayın. Bir müşterinin siparişleri için sort=-created_at ile birlikte customer=cus_… ekleyin; müşteri süzgecinde başka sıra veya sort alanının atlanması 422 validation_error döndürür (Müşterileri bulmak). data=[] o aralıkta görünür sipariş olmadığını gösterir.

2. Duruma ve markaya göre süzün

status=confirmed onaylanmış siparişleri getirir. Diğer değerler: pending, processing, shipped, delivered, cancelled, refunded; eski payment_pending kabul edilir ama 19 Ekim 2026'dan beri hiçbir sipariş bu durumda olmadığı için boş sonuç verir (ödemesi beklenen sipariş payment_state alanındadır). Anlamları Kodlar ve durumlar sayfasındadır. Durum, marka ve tarih süzgeçleri birlikte kullanılabilir. Buradaki marka sizin satış markanızdır (store, sto_…); ürünün üretici markası (brand, brd_…) değildir.

Önce erişebildiğiniz markaları alın; /stores için ek kapsam (erişim izni) gerekmez.

curl --fail-with-body --silent --show-error \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/stores" \
  -H "Authorization: Bearer $SIPARIS_API_KEY" \
  --output /tmp/siparis-markalar.json && \
python3 -m json.tool /tmp/siparis-markalar.json

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "sto_1234567890abcdef1234567890abcdef",
      "name": "Örnek Marka"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Bu örnek ilk markayı seçer. Birden fazla markanız varsa SIPARIS_STORE_ID değerine istediğiniz markanın sto_… kimliğini yazın. Tek markayla sınırlı anahtarda store vermeseniz de yalnız o marka görünür.

SIPARIS_STORE_ID=$(python3 -c 'import json; print(json.load(open("/tmp/siparis-markalar.json"))["data"][0]["id"])')
curl --fail-with-body --silent --show-error --get \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders" \
  -H "Authorization: Bearer $SIPARIS_API_KEY" \
  --data-urlencode "store=$SIPARIS_STORE_ID" \
  --data-urlencode 'status=confirmed' \
  --data-urlencode 'created_at_from=2026-10-16T00:00:00+03:00' \
  --data-urlencode 'created_at_to=2026-10-17T00:00:00+03:00' \
  --data-urlencode 'limit=50'

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "ord_1234567890abcdef1234567890abcdef",
      "store": "sto_1234567890abcdef1234567890abcdef",
      "status": "confirmed"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

3. Siparişi numarayla bulun

number panelde görünen sekiz haneli sipariş numarasıdır. Örnekteki numarayı kendi siparişinizinkiyle değiştirin. Yanıt bir listedir; ayrıntıyı açarken bu listedeki id değerini kullanın. Numara ord_… kimliğinin yerine geçmez.

curl --fail-with-body --silent --show-error --get \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders" \
  -H "Authorization: Bearer $SIPARIS_API_KEY" \
  --data-urlencode 'number=48273910'

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "ord_1234567890abcdef1234567890abcdef",
      "number": "48273910"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

4. Sonraki sayfayı alın

Bu örnek süzgeçsiz listeyi iki siparişlik sayfalarla okur. İlk yanıtı geçici dosyaya kaydedin. Sipariş ayrıntısı adımı da bu dosyadaki ilk kimliği kullanır.

curl --fail-with-body --silent --show-error --get \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders" \
  -H "Authorization: Bearer $SIPARIS_API_KEY" \
  --data-urlencode 'limit=2' \
  --output /tmp/siparis-liste.json && \
python3 -m json.tool /tmp/siparis-liste.json

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "ord_1234567890abcdef1234567890abcdef",
      "number": "48273910"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

has_more=true ise yanıttaki next_cursor sonraki sayfanın yer imidir; değiştirmeden cursor parametresinde geri gönderilir. Aşağıdaki komut bunu yapar; liste bitmişse istek yapmaz.

SIPARIS_CURSOR=$(python3 -c 'import json; print(json.load(open("/tmp/siparis-liste.json"))["next_cursor"] or "")')
if [ -n "$SIPARIS_CURSOR" ]; then
  curl --fail-with-body --silent --show-error --get \
    "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders" \
    -H "Authorization: Bearer $SIPARIS_API_KEY" \
    --data-urlencode 'limit=2' \
    --data-urlencode "cursor=$SIPARIS_CURSOR" \
    --output /tmp/siparis-liste.json && \
  python3 -m json.tool /tmp/siparis-liste.json
fi

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "ord_1234567890abcdef1234567890abcdef",
      "number": "48273910"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

has_more=false ve next_cursor=null ise liste bitti. Süzgeçli bir listeyi sürdürürken aynı süzgeçleri de her isteğe ekleyin. İmlecin ayrıntıları İmleçle listeleme sayfasında.

5. Tek siparişi ve satırlarını görün

Önceki adımdaki liste boş değilse ilk siparişi açın. SIPARIS_ORDER_ID yerine başka bir liste veya olay yanıtındaki ord_… kimliğini de kullanabilirsiniz.

SIPARIS_ORDER_ID=$(python3 -c 'import json; print(json.load(open("/tmp/siparis-liste.json"))["data"][0]["id"])')
curl --fail-with-body --silent --show-error \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders/$SIPARIS_ORDER_ID" \
  -H "Authorization: Bearer $SIPARIS_API_KEY"

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "id": "ord_1234567890abcdef1234567890abcdef",
  "number": "48273910",
  "status": "confirmed",
  "total": "120.00",
  "currency": "TRY"
}

Satırlar için aynı siparişin /lines ucunu çağırın. Ek kapsam gerekmez.

curl --fail-with-body --silent --show-error \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders/$SIPARIS_ORDER_ID/lines" \
  -H "Authorization: Bearer $SIPARIS_API_KEY"

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "lin_1234567890abcdef1234567890abcdef",
      "quantity": "1.000",
      "unit_price": "120.00",
      "total": "120.00"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Satır sayfasında has_more=true ise yine bu /lines ucunda cursor ile devam edin. Sipariş ayrıntısına include=lines (yanıta alt kayıtları ekleme seçimi) eklemek de ilk 50 satırı getirir. Fiyat ve miktarlar ondalık metindir; sipariş anındaki değerleri kullanın.

6. Gönderiyi ve ödemeyi okuyun

Gönderi için anahtarda orders:read yanında shipments:read gerekir. Alıcı, barkod ve takip alanları için ayrıca personal_data:read gerekir.

curl --fail-with-body --silent --show-error \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders/$SIPARIS_ORDER_ID/shipments" \
  -H "Authorization: Bearer $SIPARIS_API_KEY"

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "shp_1234567890abcdef1234567890abcdef",
      "status": "created"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Tahsilatlar için orders:read yanında payments:read gerekir. summary bütün siparişin para özetidir; yalnız bu sayfadaki işlemlerin toplamı değildir. Gönderi ve ödeme listesi boş da olabilir.

curl --fail-with-body --silent --show-error \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders/$SIPARIS_ORDER_ID/payments" \
  -H "Authorization: Bearer $SIPARIS_API_KEY"

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "col_1234567890abcdef1234567890abcdef",
      "amount": "120.00"
    }
  ],
  "summary": {
    "collected": "120.00",
    "collect_due": "0.00",
    "currency": "TRY"
  },
  "has_more": false,
  "next_cursor": null
}

7. Yeni veya değişen siparişleri alın

updated_at_from son değişiklik zamanına göre süzer. Örnekteki tarihi son kontrol zamanınızla değiştirin. updated_at_to ile bitişi sınırlayabilirsiniz. Yalnız yeni oluşanları arıyorsanız created_at_from kullanın.

curl --fail-with-body --silent --show-error --get \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders" \
  -H "Authorization: Bearer $SIPARIS_API_KEY" \
  --data-urlencode 'updated_at_from=2026-10-16T09:00:00Z'

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "ord_1234567890abcdef1234567890abcdef",
      "updated_at": "2026-10-16T10:00:00Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Sürekli aktarımda yalnız tarih süzgecine dayanmayın. Liste anlık görünümü verir; her değişikliğin geçmişini vermez. orders:read ve events:read ile olayları okuyun:

curl --fail-with-body --silent --show-error --get \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/events" \
  -H "Authorization: Bearer $SIPARIS_API_KEY" \
  --data-urlencode 'types=order.created,order.updated,order.status_changed' \
  --data-urlencode 'limit=50'

Örnek HTTP 200 yanıtı (uydurma veri; yalnız ilgili alanlar):

{
  "data": [
    {
      "id": "evt_1234567890abcdef1234567890abcdef",
      "type": "order.created",
      "data": {
        "object": {
          "id": "ord_1234567890abcdef1234567890abcdef"
        }
      }
    }
  ],
  "has_more": false,
  "next_cursor": "SUNUCUDAN_DONEN_IMLEC"
}

data.object.id değişen siparişi gösterir; ayrıntısını yeniden okuyun. Sonraki istekte aynı types ile cursor=next_cursor gönderin. Olaylarda boş/son sayfanın da imlecini saklayın; has_more=false olunca bekleyip aynı imleçten sürdürün. Kayıpsız ilk aktarım için İlk eşitleme, devamı için Siparişleri ERP’ye almak rehberini kullanın. Dışa aktarmanın resume_cursor değeriyle (dosyanın bittiği andaki olay konumu) başlarsanız types eklemeyin.

Sık hata ve çözümü

YanıtNe yapmalıyım?
403 insufficient_scopeAnahtarın kapsamlarını kontrol edin; gönderi ve ödeme için ek kapsam gerekir.
404 not_foundKimliği liste yanıtından alın; siparişin/markanın anahtarın erişiminde olduğunu kontrol edin.
422 invalid_range veya validation_errorBaşlangıcı bitişten önce yazın, saat dilimini ekleyin; number sekiz haneli olmalı.
400 invalid_cursorİmleci değiştirmeyin; aynı süzgeç ve anahtarla devam edin. Listeyi değiştirecekseniz imleçsiz başlayın.

Alıcı adı, e-posta ve adres görünmüyorsa işletme sahibinin personal_data:read iznini açıkça vermesi gerekir. Ortak hatalar ve çözümleri her ucun sayfasında; ayrıca kapsamlar ve hatalar.