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

Siparişler

Siparişi düzelt

PATCH/v1/orders/{id}

Siparişin adresini, notlarını, teslim gününü veya kalemlerini değiştirin.

Gereken izin

Bearer anahtarı ve orders:write

Koşula bağlı izin

internal_notes:write: İstekte note gönderirseniz gerekir. Eksikse 403 döner. money_out:write: İstekte refund_amount gönderirseniz gerekir. Eksikse 403 döner. personal_data:write: İstekte shipping_address, customer_note gönderirseniz gerekir. Eksikse 403 döner.

Yanıtı genişleten izin

personal_data:read, internal_notes:read: yanıttaki ilgili alanları açar; izin yoksa bu alanlar atlanır, istek reddedilmez.

Maliyet

1 puan (bağlantı başına 60 saniyede 600 puan)

Tekrar anahtarı

Gerekir: Idempotency-Key başlığı.

İstek

Temel adres: https://api.siparis.app/v1

Yol parametreleri

AlanTürZorunluAçıklamaÖrnek
idmetinEvetOkunacak kaynağın ord_ önekli dış kimliği."ord_1234567890abcdef1234567890abcdef"

Başlıklar

AlanTürZorunluAçıklamaÖrnek
Idempotency-Keymetin · null olabilirEvetZorunlu tekrar anahtarı; en çok 200 karakter. Yeni işte yeni değer; ağ tekrarında aynı gövde ve aynı değer."ilk-esitleme-20261016-001"
If-Matchmetin · null olabilirHayırİsteğe bağlı önkoşul: son ETag değerini çift tırnaklarıyla gönderin. Komutun kilidi altında farklıysa 412 revision_mismatch."\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\""

Gövde (application/json)

AlanTürZorunluAçıklamaÖrnek
add_itemsliste: nesne (en çok 50 öğe) · null olabilirHayırMarka fiyatıyla eklenecek kalemler; burada unit_price desteklenmez.
quantitysayı (en çok 100000) veya metinEvetMiktar; en çok üç ondalık hane. Adetle satılan üründe tam sayı gerekir."2"
skumetin (en çok 200 karakter) · null olabilirHayırStok kodu; baş/son boşluk ve harf farkı kaldırılarak tam eşleşir."KUPA-MAVI"
unit_pricesayı (en az 0; en çok 10000000) veya metin · null olabilirHayırİsteğe bağlı TRY birim fiyatı; orders.price eylem izni gerekir. Yoksa markanın kampanya dahil fiyatı kullanılır."120.00"
variantmetin · null olabilirHayırvar_ dış kimliği; variant veya sku alanından tam biri gerekir."var_1234567890abcdef1234567890abcdef"
allow_waitingtrue/falseHayırEklenen kalemin eksik adedi mal gelince gönderilsin.false
customer_notemetin (en çok 2000 karakter) · null olabilirHayırMüşteri notu; boş metin kaldırır, personal_data:write gerekir."Teslimden önce arayın."
delivery_daytarih · null olabilirHayırYeni teslim günü; null günü kaldırır. Gönderilmeyen alan değişmez."2026-10-17"
itemsliste: nesne (en çok 100 öğe) · null olabilirHayırYalnız değişen satırlar; panelin kargo/fatura/ödeme ve stok kilitleri geçerlidir.
idmetinEvetDeğişen sipariş satırının lin_ kimliği."lin_1234567890abcdef1234567890abcdef"
quantitysayı (en az 0; en çok 100000) veya metinEvetYeni miktar; 0 satırı çıkarır, reason gerekir. Son ürün çıkarılamaz."1"
reasonmetin (en çok 200 karakter)HayırÜrün çıkarılırken zorunlu gerekçe."Müşteri bir adet istedi."
unit_pricesayı (en az 0; en çok 10000000) veya metin · null olabilirHayırYeni TRY birim fiyatı; yalnız panelde fiyat düzeltilebilen siparişte ve orders.price izniyle."120.00"
variantmetin · null olabilirHayırYeni var_ seçeneği; atlanırsa satırın seçeneği korunur."var_1234567890abcdef1234567890abcdef"
notemetin (en çok 2000 karakter) · null olabilirHayırİç not; boş metin kaldırır, internal_notes:write gerekir."Paket kontrol edildi."
refund_amountsayı (en az 0; en çok 10000000) veya metin · null olabilirHayırPara dönen düzeltmede gördüğünüz iade tutarı; money_out:write gerekir. Kart iadesi panelin mevcut yoluyla yürür."120.00"
restore_itemsliste: metin (en çok 100 öğe) · null olabilirHayırÇıkarılmış lin_ satırlarını kayıtlı adet/fiyatla geri ekler.
shipping_addressnesne · null olabilirHayırYeni teslimat adresi; personal_data:write gerekir. Müşteri kartının adresi değiştirilmez.
address_linemetin (en çok 500 karakter)EvetAçık teslimat adresi."Örnek Sokak No: 1"
citymetin (en çok 100 karakter)EvetAdresin ili."İstanbul"
districtmetin (en çok 100 karakter)EvetAdresin ilçesi."Kadıköy"
full_namemetin (en çok 200 karakter)HayırAlıcının adı; boşsa sipariş verenin adı kullanılır."Örnek Alıcı"
neighborhoodmetin (en çok 100 karakter)HayırKargoda resmî listedeki mahalle veya köy adı gerekir."Caferağa"
neighborhood_areametin (en çok 100 karakter)HayırVarsa bağlı köy, semt veya belde.""
phonemetin (en çok 30 karakter)HayırAlıcının telefonu; kargoda zorunludur. Başka alıcıya müşterinin telefonu taşınmaz."05000000000"
postal_codemetin (en çok 10 karakter) · null olabilirHayırİsteğe bağlı posta kodu."34710"
villagetrue/falseHayırAdres köydeyse true.false

Örnek istek

curl --fail-with-body --silent --show-error --request PATCH \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/orders/ord_1234567890abcdef1234567890abcdef" \
  -H "Authorization: Bearer $SIPARIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: ornek-patch-v1-orders-ord-1234567890abcdef1234567890abcdef-001' \
  --data-binary @- <<'JSON'
{
  "delivery_day": "2026-10-17"
}
JSON
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
from urllib.error import HTTPError

# İmzalı indirme hedefine Bearer taşımamak için yönlendirme kendiliğinden izlenmez.
class NoRedirect(HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

base = os.environ.get("SIPARIS_API_URL", "https://api.siparis.app/v1")
headers = {
    "Authorization": "Bearer " + os.environ["SIPARIS_API_KEY"],
    "Content-Type": "application/json",
    "Idempotency-Key": "ornek-patch-v1-orders-ord-1234567890abcdef1234567890abcdef-001",
}
request = Request(base + "/orders/ord_1234567890abcdef1234567890abcdef", headers=headers, method="PATCH",
    data="{\"delivery_day\":\"2026-10-17\"}".encode("utf-8"))
try:
    with build_opener(NoRedirect).open(request, timeout=30) as response:
        print(response.read().decode("utf-8"))
except HTTPError as error:
    print(error.code, error.read().decode("utf-8"))
    raise
// Node.js 22+; anahtar yalnız sunucunun ortam değişkenindedir.
const base = process.env.SIPARIS_API_URL ?? "https://api.siparis.app/v1";
if (!process.env.SIPARIS_API_KEY) throw new Error("SIPARIS_API_KEY gerekli");
const response = await fetch(base + "/orders/ord_1234567890abcdef1234567890abcdef", {
  method: "PATCH",
  headers: {
    "Authorization": `Bearer ${process.env.SIPARIS_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "ornek-patch-v1-orders-ord-1234567890abcdef1234567890abcdef-001",
  },
  redirect: "manual", // 307 hedefini Bearer olmadan ayrı istekte okuyun.
  signal: AbortSignal.timeout(30_000),
  body: JSON.stringify({
  "delivery_day": "2026-10-17"
}),
});
const text = await response.text();
if (!response.ok) throw new Error(`${response.status}: ${text}`);
console.log(text);

Kimlik içeren yollarda örnek kimliği kendi liste yanıtınızdan alın. SIPARIS_API_KEY sunucu ortamında tanımlı olmalı; yerelde SIPARIS_API_URL ile /v1 içeren adresi değiştirin. Üretimde tekrar kurallarını uygulayın.

Yanıt

200 İstek başarıyla tamamlandı.

İçerik türü: application/json

{
  "channel": "whatsapp",
  "created_at": "2026-10-16T09:00:00Z",
  "currency": "TRY",
  "customer": null,
  "delivery_day": "2026-10-17",
  "delivery_method": "shipping",
  "discount_total": "0.00",
  "gift_wrap_fee": "0.00",
  "id": "ord_1234567890abcdef1234567890abcdef",
  "number": "48273910",
  "payment_fee": "0.00",
  "payment_method": "bank_transfer",
  "payment_state": "paid",
  "preorder_from": null,
  "shipping_total": "0.00",
  "source": "api",
  "status": "confirmed",
  "store": "sto_1234567890abcdef1234567890abcdef",
  "subtotal": "120.00",
  "tax_status": "standard",
  "tax_total": "20.00",
  "total": "120.00",
  "updated_at": "2026-10-16T10:00:00Z"
}
Yanıt alanları (69)
AlanTürZorunluAçıklamaÖrnek
channelmetin · null olabilirEvetSiparişin satış kanalı; api_external kaynağında bildirilen channel_name."whatsapp"
created_attarih-saatEvetOluşturulma zamanı; RFC 3339 UTC."2026-10-16T09:00:00Z"
customermetin · null olabilirEvetMüşteri kimliği (cus_ ve 32 küçük onaltılık karakter)."cus_1234567890abcdef1234567890abcdef"
delivery_daytarih · null olabilirEvetTeslim günü; YYYY-MM-DD."2026-10-17"
delivery_methodmetin · null olabilirEvetTeslim yöntemi. Değerler: shipping, hand, pickup, digital. Türkçe karşılıkları: https://developer.siparis.app/referans#teslim-yontemleri."shipping"
discount_totalmetin · null olabilirEvetToplam indirim; TRY cinsinden ondalık metin. Kuruş kaybını önlemek için ondalık sayı kütüphanesiyle işleyin."0.00"
gift_wrap_feemetin · null olabilirEvetHediye paketi ücreti; TRY cinsinden ondalık metin. Kuruş kaybını önlemek için ondalık sayı kütüphanesiyle işleyin."0.00"
idmetinEvetKaynağın dış kimliği; ord_ ve 32 küçük onaltılık karakter. İç sayısal kimlik kullanılmaz."ord_1234567890abcdef1234567890abcdef"
numbermetin · null olabilirEvetSiparişin görünen sekiz haneli numarası; kaynak kimliği değildir."48273910"
payment_feemetin · null olabilirEvetÖdeme yöntemi ücreti; TRY cinsinden ondalık metin. Kuruş kaybını önlemek için ondalık sayı kütüphanesiyle işleyin."0.00"
payment_methodmetin · null olabilirEvetÖdeme yöntemi. Değerler: cod, bank_transfer, credit_card, split, cash, marketplace. Türkçe karşılıkları: https://developer.siparis.app/referans#odeme-yontemleri."bank_transfer"
payment_statemetin · null olabilirEvetÖdeme durumu; alınan ve iade edilen paradan hesaplanır, sipariş durumundan ayrıdır. Değerler: none, awaiting, partial, paid, refund_due, refunded, test. Türkçe karşılıkları: https://developer.siparis.app/referans#odeme-durumlari."paid"
preorder_fromtarih · null olabilirEvetÖn siparişin başlangıç günü; YYYY-MM-DD.null
shipping_totalmetin · null olabilirEvetToplam kargo ücreti; TRY cinsinden ondalık metin. Kuruş kaybını önlemek için ondalık sayı kütüphanesiyle işleyin."0.00"
sourcemetin · null olabilirEvetKaydın kaynağı; api: yeni satış, api_external: başka kanalda kesinleşmiş satış, import: eski siteden bilgi amaçlı aktarım. Panel/AI ve bağlı kanal kaynakları da korunur."panel"
statusmetinEvetSiparişin iş akışındaki durumu; ödeme durumu ayrıca payment_state alanındadır. Değerler: pending, payment_pending, confirmed, processing, shipped, delivered, cancelled, refunded. Türkçe karşılıkları: https://developer.siparis.app/referans#siparis-durumlari."confirmed"
storemetinEvetMarka kimliği (sto_ ve 32 küçük onaltılık karakter)."sto_1234567890abcdef1234567890abcdef"
subtotalmetin · null olabilirEvetÜrünlerin ara toplamı; TRY cinsinden ondalık metin. Kuruş kaybını önlemek için ondalık sayı kütüphanesiyle işleyin."120.00"
tax_statusmetin (seçenekler: exempt, standard)Evetstandard: KDV mükellefi; exempt: vergiden muaf."standard"
tax_totalmetin · null olabilirEvetToplam vergi; TRY cinsinden ondalık metin. Kuruş kaybını önlemek için ondalık sayı kütüphanesiyle işleyin."20.00"
totalmetinEvetToplam tutar; TRY cinsinden ondalık metin. Kuruş kaybını önlemek için ondalık sayı kütüphanesiyle işleyin."120.00"
updated_attarih-saatEvetSon değişiklik zamanı; RFC 3339 UTC."2026-10-16T09:00:00Z"
billing_addressnesne · null olabilirHayırFatura adresi; personal_data:read yoksa alan atlanır.
address_linemetin · null olabilirHayırAdres satırı; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
citymetin · null olabilirHayırİl; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
districtmetin · null olabilirHayırİlçe; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
full_namemetin · null olabilirHayırAd soyad; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
neighborhoodmetin · null olabilirHayırMahalle; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
neighborhood_areametin · null olabilirHayırVarsa bağlı köy, semt veya belde; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
phonemetin · null olabilirHayırTelefon; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
postal_codemetin · null olabilirHayırPosta kodu; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
villagetrue/false · null olabilirHayırKöy adresi işareti; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
currencysabit "TRY"HayırPara birimi; v1 tutarları Türk lirasıdır."TRY"
customer_emailmetin · null olabilirHayırMüşteri e-postası; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
customer_namemetin · null olabilirHayırMüşteri adı; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
customer_notemetin · null olabilirHayırMüşterinin sipariş notu; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
customer_phonemetin · null olabilirHayırMüşteri telefonu; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
invoicenesne · null olabilirHayırFatura alıcı bilgileri; personal_data:read yoksa alan atlanır.
company_namemetin · null olabilirHayırFatura unvanı; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
tax_numbermetin · null olabilirHayırVergi/kimlik numarası; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
tax_officemetin · null olabilirHayırVergi dairesi; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
linesnesne · null olabilirHayırinclude=lines ile ilk 50 sipariş satırı; devamı /orders/{id}/lines ile alınır.
dataliste: nesne (Line)EvetBu sayfanın görünür kayıtları; boş liste de geçerli bir sayfadır.
has_moretrue/falseEvetTaranacak başka sayfa varsa true; olaylarda boş data ile de true olabilir.false
next_cursormetin · null olabilirEvetSonraki sayfa için aynen gönderilecek opak imleç; kaynak listesi bittiyse null.null
notemetin · null olabilirHayırİç not; internal_notes:read gerekir. Kişisel kaynakta personal_data:read da gerekir."Örnek iç not"
paymentsnesne · null olabilirHayırinclude=payments ile ilk 50 tahsilat/iade ve bütün siparişin para özeti; payments:read gerekir.
dataliste: nesne (Payment)EvetBu sayfanın görünür kayıtları; boş liste de geçerli bir sayfadır.
has_moretrue/falseEvetTaranacak başka sayfa varsa true; olaylarda boş data ile de true olabilir.false
next_cursormetin · null olabilirEvetSonraki sayfa için aynen gönderilecek opak imleç; kaynak listesi bittiyse null.null
summarynesne (MoneySummary)EvetSiparişin bütün tahsilat ve iadelerinden hesaplanan para özeti; yalnız bu sayfanın toplamı değildir.
returnsnesne · null olabilirHayırinclude=returns ile ilk 50 iade; returns:read gerekir.
dataliste: nesne (Return)EvetBu sayfanın görünür kayıtları; boş liste de geçerli bir sayfadır.
has_moretrue/falseEvetTaranacak başka sayfa varsa true; olaylarda boş data ile de true olabilir.false
next_cursormetin · null olabilirEvetSonraki sayfa için aynen gönderilecek opak imleç; kaynak listesi bittiyse null.null
shipmentsnesne · null olabilirHayırinclude=shipments ile ilk 50 gönderi; shipments:read gerekir.
dataliste: nesne (Shipment)EvetBu sayfanın görünür kayıtları; boş liste de geçerli bir sayfadır.
has_moretrue/falseEvetTaranacak başka sayfa varsa true; olaylarda boş data ile de true olabilir.false
next_cursormetin · null olabilirEvetSonraki sayfa için aynen gönderilecek opak imleç; kaynak listesi bittiyse null.null
shipping_addressnesne · null olabilirHayırTeslimat adresi; personal_data:read yoksa alan atlanır.
address_linemetin · null olabilirHayırAdres satırı; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
citymetin · null olabilirHayırİl; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
districtmetin · null olabilirHayırİlçe; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
full_namemetin · null olabilirHayırAd soyad; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
neighborhoodmetin · null olabilirHayırMahalle; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
neighborhood_areametin · null olabilirHayırVarsa bağlı köy, semt veya belde; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
phonemetin · null olabilirHayırTelefon; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
postal_codemetin · null olabilirHayırPosta kodu; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
villagetrue/false · null olabilirHayırKöy adresi işareti; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null

Bu uca özgü yanıt başlıkları: ETag (Kaynağın güçlü sürüm etiketi; If-Match için tırnaklarıyla saklayın.).

Hatalar

HTTPcodeAnlamıNasıl düzelir?
403forbiddenMevcut ticari kural bu işlemi yapmanıza izin vermiyor.Gerekli kapsamları ve siparişin durumunu kontrol edin.
409conflictSipariş veya ödeme bilgisi değişmiş ya da işlem mevcut duruma uygun değil.Güncel siparişi okuyun, iş kuralını kontrol edip yeni tekrar anahtarıyla deneyin.
400insufficient_stockSipariş için yeterli stok yok.Miktarı azaltın veya paneldeki bekleyen stok kuralını açıkça allow_waiting=true ile seçin.
400invalid_if_matchIf-Match geçerli bir güçlü ETag değil.GET kaynak yanıtındaki ETag değerini çift tırnaklarıyla aynen kullanın.
412revision_mismatchKayıt siz okuduktan sonra değişmiş.Güncel kaydı okuyun; düzeltmeyi yeniden değerlendirip yeni tekrar anahtarıyla gönderin.
409status_mismatchSipariş durumu expected_status ile uyuşmuyor.Güncel durumu okuyup yeni tekrar anahtarıyla deneyin.
422invalid_patchDüzeltilecek alan veya seçenek uygun değil.Değişmeyecek alanı atlayın; seçeneğin sipariş satırındaki ürüne ait olduğunu ve alan kurallarını kontrol edin.
422duplicate_lineAynı sipariş satırı birden çok kez gönderilmiş.Her lin_ kimliğini yalnız bir kez yazın.
409refund_confirmDüzeltme müşteriye para döndürüyor; tutar teyidi gerekiyor.İade tutarını kontrol edip refund_amount alanıyla ve yeni tekrar anahtarıyla gönderin; money_out:write gerekir.

Ortak hatalar (anahtar, izin, istek biçimi, hız sınırı, tekrar anahtarı) her uçta aynıdır: Hata kodları › Ortak hatalar.