orders
18 uç · /api/b2b/v1/orders
İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 18 ucun elle doğrulanmış gövde örneği henüz yok; o uçlarda iskelet gövdesizdir — uydurma bir alan yazmıyoruz.
GET /api/b2b/v1/admin/orders/{id} — personel sipariş detayı (b2b.orders.view).
idTek okuma tx'inde altı parça: başlık · satırlar (+iade edilmiş miktar) · statü geçmişi · sevkiyatlar · risk özeti · ERP gönderim durumu + bayi-düzlemi onay kararları. Hepsi aynı snapshot'tan gelir; ayrı isteklere bölmek ekranda tutarsız bir an doğururdu.
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /admin/orders/{id}/dispatch — siparişi ERP'ye gönder / retry. dead ise pending'e RESET
idedilir (DLQ'dan yeniden deneme), sonra varsayılan writer ile dispatch.
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/dispatch" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/b2b/v1/admin/marketplace/bindings
idcurl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/documents" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/b2b/v1/admin/orders/{id}/documents/{doc} — belgeyi indir (personel).
iddoccurl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/documents/<doc>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PATCH /api/b2b/v1/dealer/profile (require_dealer; dealer_write seam).
iddoc🔴 KAPI **ASIL KULLANICIDIR**, izin DEĞİL (2026-08-22 vakası). Eskiden kapı
b2b_portal.users.manage idi; o izin dealer_admin KADAR dealer_ownda da var
(mig 1467: ikisi bilerek izin-özdeş) ve panelin kullanıcı-ekleme formu yalnız
SİPARİŞ GÖRÜNÜRLÜĞÜ sorduğu için eklenen HER bayi kullanıcısı bu iki rolden birini
alıyor → hepsi firma künyesini yazabiliyordu. Kullanıcı raporu: *"bayinin kendisi
olmamasına rağmen firma bilgilerini güncelleyebiliyor"*.
Firma künyesi bayi ORG'unun beyanıdır; onu değiştirmek bir ekip işi değil, bayinin
kendi kimliğine ait bir karardır (mig 1489 is_primary).
curl -X PATCH "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/documents/<doc>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}DELETE /api/b2b/v1/admin/marketplace/bindings/{id}
iddoccurl -X DELETE "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/documents/<doc>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/b2b/v1/admin/orders/{id}/documents/assets — belge yükle (ham PDF baytları).
idcurl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/documents/assets" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /admin/orders/{id}/fulfillments — kısmi/tam sevkiyat kaydı. Satır miktarları sipariş
idkalanını AŞAMAZ (kümülatif). Tüm satırlar tam sevk edilince confirmed→fulfilled.
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/fulfillments" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PATCH /api/b2b/v1/admin/orders/{id}/lines — sipariş kalemlerini DEĞİŞTİR (b2b.orders.manage).
id# Neden ve sınırı
Sipariş satırları "DONDURULMUŞ snapshot" diye tasarlanmıştı ve hiçbir uç onları
değiştiremiyordu. Kullanıcı (2026-08-19) siparişin içeriğini de düzeltebilmek istedi.
Sözleşme **daraltıldı, kaldırılmadı**: satırlar sipariş TAAHHÜDE dönene kadar
düzenlenebilir, sonra donar.
Kilit iki koşulludur ve ikisi de sunucuda:
* durum draft/submitted/approved olmalı — confirmed sonrası sipariş bayiye
söz verilmiş, sevk/fatura sürecine girmiştir;
* ERP'ye GERÇEKTEN yazılmış (connector_dispatches.status = 'sent') bir sipariş
dokunulamaz — ERP'deki belge değişmez, panel onunla çelişemez.
Fiyatlama price_manual_linestan geçer (oluşturmayla aynı motor); toplamlar satır
toplamından YENİDEN türetilir — eski toplamı korumak, kalemi değişen siparişi yanlış
tutarla bırakırdı.
curl -X PATCH "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/lines" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/b2b/v1/admin/orders/{id}/merchant-approve (b2b.orders.manage).
idcurl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/merchant-approve" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/b2b/v1/admin/orders/{id}/merchant-reject (b2b.orders.manage).
idcurl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/merchant-reject" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/b2b/v1/admin/orders/{id}/returnable — bu siparişten iade edilebilecek kalemler.
idEkran bunu bilmeden "tümünü seç" diyemez: sipariş 10 adetti, 4'ü zaten iade edildiyse kalan 6'dır. İstemcide hesaplatmak, iki tur önceki iadeleri saymayı gerektirirdi.
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/returnable" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PATCH /api/b2b/v1/admin/orders/{id}/status — durumu ELLE değiştir (b2b.orders.manage).
id# Neden var
Panelde durumu değiştirmenin tek yolu onay/ret ve dispatch düğmeleriydi. ERP bağlı
olmayan kiracıda auto_dispatch hiç çalışmadığı için sipariş approvedta sonsuza
kadar takılı kalıyordu: personel "sevk edildi" ya da "iptal edildi" diyemiyordu
(kullanıcı 2026-08-19). Bu uç o boşluğu kapatır.
Kural order_flow::manual_transition_allowedtadır ve otomatik boru hattının adımlarını
DIŞLAR — elle "ERP'ye gönderildi" işaretlemek, olmayan bir belgeyi var göstermek olurdu.
Gerekçe ZORUNLU: bu bir insan kararıdır ve b2b.order_status_historyye kim/neden ile
yazılır. Gerekçesiz bir durum değişikliği, altı ay sonra kimsenin açıklayamayacağı bir
satırdır.
curl -X PATCH "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/status" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /admin/orders/{id}/sync-status — ERP belge statüsünü oku → siparişi senkronla
id(Invoiced→invoiced, Cancelled→cancelled; geçerli geçişse uygula). Henüz dispatch edilmemişse 409.
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/<id>/sync-status" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /admin/orders/dispatches?status=dead — dispatch kuyruğu / DLQ izleme (tenant-RLS staff).
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/dispatches" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/b2b/v1/admin/orders/pending-approvals — merchant risk-onay kuyruğu (b2b.orders.view).
Staff TÜM bayilerin submitted siparişini görür (tenant-scope; spec §5 cross-dealer-escalation:
audit'li + tenant-içi tasarım). Her satır için [compute_risk] ile risk-özeti (N+1 kabul: ≤200
satır, staff-panel). Sipariş politikası moduna göre süzülür (Task 4; şimdilik tüm submitted).
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/orders/pending-approvals" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}