B2B

dealer

67 uç · /api/b2b/v1/dealer

İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 67 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/dealer/account/balance

Get balance

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/account/balance" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/account/open-items

GET /dealer/account/open-items — açık faturalar (oldest-first) + bakiye + yaşlandırma kovaları.

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/account/open-items" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/account/risk

Get risk

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/account/risk" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/account/settle

POST /api/b2b/v1/admin/marketplace/charges/{id}/settle

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/account/settle" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/account/settlements/{id}/allocations

GET /dealer/account/settlements/{id}/allocations — bir settlement'ın fatura-başı dökümü (bayi-RLS).

OturumYol parametresi: id
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/account/settlements/<id>/allocations" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/announcements

GET /dealer/announcements — YALNIZ yayında olanlar.

Oturum

Pencere süzgeci SQL'de (now() sunucunun saati): istemciye bırakılsa süresi geçmiş kampanya bayinin sapmalı cihazında canlı görünürdü.

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/announcements" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/cart

GET /dealer/cart — aktif sepet görünümü (yoksa boş; sepet OLUŞTURMAZ).

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/cart" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/b2b/v1/dealer/cart

DELETE /dealer/cart — sepeti boşalt (tüm kalemleri sil; sepet aktif kalır).

Oturum
İstek
curl -X DELETE "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/cart" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/cart/items

POST /dealer/cart/items — kalem ekle/ayarla (MUTLAK qty; upsert). Fiyat snapshot'ı yenilenir.

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/cart/items" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/b2b/v1/dealer/cart/items/{product}

DELETE /dealer/cart/items/{product} — kalemi sepetten çıkar (yoksa 404).

OturumYol parametresi: product
İstek
curl -X DELETE "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/cart/items/<product>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/catalog

List catalog

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/catalog" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/catalog/{ref}

Get catalog item

OturumYol parametresi: ref
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/catalog/<ref>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/catalog/facets

GET /api/b2b/v1/dealer/catalog/facets — bayinin GÖREBİLDİĞİ ürünler üzerinden facet sayaçları.

Oturum

İzin: list_catalog ile AYNI (CATALOG_VIEW) — facet listenin metadata'sıdır, ayrı bir yetki düzlemi değildir (daha gevşek bir kapı listeyi baypas eden bir yan-kanal olurdu).

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/catalog/facets" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/catalog/resolve

GET /api/b2b/v1/admin/marketplace/resolve/{kind} — the resolved active provider for a kind.

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/catalog/resolve" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/checkout

POST /dealer/checkout — sepetten sipariş oluştur (atomik).

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/checkout" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/checkout/pay

POST /dealer/checkout/pay — sipariş için kart ödemesi (server-otoriter tutar).

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/checkout/pay" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/checkout/validate

GET /dealer/checkout/validate — yazımsız sipariş-hazırlık raporu.

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/checkout/validate" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/documents

GET /api/b2b/v1/dealer/documents — bayinin belgeleri (yeni→eski, **keyset** sayfalı).

Oturum

invoice.view. Sözleşme: ?after=&limit=&doc_type=&from=&to=&open_only= → {documents, party_linked, next_cursor, limit, remaining_available}.

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/documents" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/documents/{id}/pdf

GET /api/b2b/v1/dealer/documents/{id}/pdf — belgenin PDF kopyası (stream). invoice.view.

OturumYol parametresi: id

**404 tek sebep-bağımsız yanıt:** başka bayinin belgesi, başka tenant'ın belgesi, taslak belge, **iptal edilmiş belge**, izinli-tür-dışı belge ve olmayan belge AYNI 404'ü alır → varlık oracle'ı yok. Yanıt no-store: bayiye özel mali belge ara katmanda ASLA önbelleklenmemeli. **Satırlar sessizce düşmez:** motorun tek sayfaya sığdıramadığı satırlar hem PDF içinde bir bildirim satırıyla ([build_pdf_lines]) hem de x-document-line-count / x-document-lines-rendered başlıklarıyla açıkça söylenir.

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/documents/<id>/pdf" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/favorites

GET /dealer/favorites — bayi-kullanıcının favorileri (product_ref listesi).

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/favorites" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/favorites

POST /dealer/favorites — favori ekle (idempotent; unique(tenant,dealer_user,product)).

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/favorites" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/b2b/v1/dealer/favorites/{product}

DELETE /dealer/favorites/{product} — favoriden çıkar.

OturumYol parametresi: product
İstek
curl -X DELETE "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/favorites/<product>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/home

Bayi-düzlemi kökü (require_dealer → [principal::DealerCtx]). Gerçek portal rotaları

Oturum

(sepet/sipariş/profil — BF1 ileri + BF4+) bu düzleme eklenir; şimdilik kimliğin kanıtı.

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/home" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/invitations

GET /api/b2b/v1/dealer/invitations — bayinin BEKLEYEN (süresi geçmemiş) davetleri.

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/invitations" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/invitations

POST /api/b2b/v1/dealer/invitations — dealer_admin (users.manage) KENDİ bayisine davet.

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/invitations" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/b2b/v1/dealer/invitations/{id}

DELETE /api/b2b/v1/dealer/invitations/{id} — bayi KENDİ pending davetini iptal eder

OturumYol parametresi: id

(staff revoke_dealer_invitationından farkı: dealer_id kapsam filtresi — başka bayinin davet id'si 404).

İstek
curl -X DELETE "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/invitations/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/invitations/{id}/resend

POST /api/b2b/v1/dealer/invitations/{id}/resend — bayi KENDİ bekleyen davetini yeniden gönderir

OturumYol parametresi: id

(dealer_id kapsam filtresi: başka bayinin daveti 404; dealer-plane revoke ile simetrik). Rate-limit'li.

İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/invitations/<id>/resend" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/orders

GET /api/b2b/v1/ext/orders — sipariş başlıkları. Scope: b2b:orders.read.

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/orders

Place order

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/orders/{id}

GET /dealer/orders/{id} — sipariş detayı (satırlar + statü geçmişi/takip + SEVKİYATLAR).

OturumYol parametresi: id

Sahiplik doğrulanır.

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/orders/{id}/approve

POST /api/b2b/v1/admin/applications/{id}/approve (b2b.dealers.approve).

OturumYol parametresi: id
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders/<id>/approve" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/orders/{id}/cancel

POST /dealer/orders/{id}/cancel — siparişi İPTAL ET (submitted→cancelled).

OturumYol parametresi: id

# Neden "reddet"in yanına ayrı bir eylem (2026-08-23 kullanıcı kararı) *"approvals kısmında siparişte reddet tuşu var; reddet olmamalı mantıken çünkü onaylayan kişi o değil. iptal et olabilir en fazla — üstüne basınca iptal nedeni yazılıp iptal edildi durumuna gelebilir sipariş."* Haklı: satıcı onay modu always (platform varsayılanı) ya da over_risk + risk ise kararı SATICI verir ve bayi-düzlemi onayı decide içindeki kredi-risk kapısına takılıp **409** alır. O siparişte bayiye "Reddet" göstermek, verilmeyecek bir kararı veriyormuş gibi göstermektir. Bayinin gerçekten yapabileceği şey KENDİ talebini GERİ ÇEKMEKTİR — ve bunun adı iptaldir. 🔴 GEREKÇE ZORUNLUDUR. İptal terminal bir durumdur (is_terminal) ve sipariş oradan otomatik hiçbir yere gitmez; "neden iptal edildi" sorusunun cevabı yazılmazsa siparişi VEREN kullanıcı bunu bir arıza sanar. Gerekçe order_status_historyye yazılır ve bildirimde alıcıya AYNEN gider. ⚠ order_approvalsa satır YAZILMAZ: iptal bir onay kararı değildir (CHECK zaten approved|rejected ile sınırlı ve öyle kalmalı).

İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders/<id>/cancel" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/orders/{id}/documents/{doc}

GET /api/b2b/v1/dealer/orders/{id}/documents/{doc} — bayi kendi belgesini indirir.

OturumYol parametresi: iddoc

Süzgeç YOK: dealer_visible ve "bu sipariş benim mi" kararlarının ikisi de RLS politikasındadır. Kapalı belge → 0 satır → **404** (403 değil: varlık bilgisi sızmasın).

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders/<id>/documents/<doc>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/orders/{id}/reject

POST /api/b2b/v1/admin/applications/{id}/reject (b2b.dealers.approve).

OturumYol parametresi: id
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders/<id>/reject" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/orders/{id}/reorder

POST /dealer/orders/{id}/reorder — geçmiş siparişi GÜNCEL fiyatla sepete ekle. Görünmeyen/

OturumYol parametresi: id

fiyatlanamaz/MOQ-uymayan ürünler ATLANIR + raporlanır (kısmi reorder). ORDER_CREATE.

İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders/<id>/reorder" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/orders/{order_id}/returns

POST /dealer/orders/{order_id}/returns — bayi iade talebi (RETURN_CREATE).

OturumYol parametresi: order_id
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders/<order_id>/returns" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/orders/{ref}/status

Order status

OturumYol parametresi: ref
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders/<ref>/status" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/orders/pending-approvals

GET /dealer/orders/pending-approvals — bu bayinin onay bekleyen (submitted) siparişleri.

Oturum

dealer-RLS zaten bayiye kısıtlar; ORDER_APPROVE izni gerekir.

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/orders/pending-approvals" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/payment-methods

GET /dealer/payment-methods — kayıtlı kartları listele (token YOK).

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/payment-methods" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/payment-methods

POST /dealer/payment-methods — kart ekle. PAN→PSP→token; token+gösterim sealed saklanır.

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/payment-methods" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/b2b/v1/dealer/payment-methods/{id}

DELETE /dealer/payment-methods/{id} — kartı kaldır (PSP token iptali best-effort + DB sil).

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/payment-methods/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/payment-methods/{id}/default

POST /dealer/payment-methods/{id}/default — varsayılan kartı değiştir.

OturumYol parametresi: id
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/payment-methods/<id>/default" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/payment-terms

GET /dealer/payment-terms — bayi KENDİ koşulunu görür (değiştiremez).

Oturum

Tanımlı değilse null döner: "peşin" varsaymak, vadeli çalışan bayiye yanlış bilgi vermek olurdu (varsayılan bir gerçek değil, bir tahmindir).

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/payment-terms" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/payments/{id}/threeds/complete

POST /dealer/payments/{id}/threeds/complete — 3DS finalize.

OturumYol parametresi: id
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/payments/<id>/threeds/complete" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/permissions

Bayinin etkin bayi-portalı izinleri (frontend UI'ı buna göre gösterir/gizler). Yalnız

Oturum

b2b.dealer_role_permissions'tan; core.user_roles'a dokunmaz.

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/permissions" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/pricing/coupon/validate

GET /pricing/coupon/validate — kupon doğrula (consume YOK).

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/pricing/coupon/validate" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/pricing/explain

GET /pricing/explain — tam 7-katman iz (audit yazılır).

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/pricing/explain" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/pricing/quote

POST /pricing/quote — çok-satır sepet ön-fiyatı + MOQ/MOV.

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/pricing/quote" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/products/{ref}/price

Get price

OturumYol parametresi: ref
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/products/<ref>/price" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/products/{ref}/stock

Eldeki stok + **BİLİNİYOR MU** kararı (STOCK-01).

OturumYol parametresi: ref

🔴 Defteri boş bir ürüne "0 adet" demek yalandır — ölçüm boşluğunu ölçüm sonucu gibi sunar. checkout.rs::stock_map bunu zaten söylüyordu; ekran ise aynı 0'ı "Stokta yok" diye basıyordu ve ERP bağlamayan HER kiracıda katalogdaki her ürün kalıcı olarak stoksuz görünüyordu (2026-08-22 vakası). Üç hâl döner: tracked=false (takip yok, hep satılabilir) · known=false (bilinmiyor) · adet. ⚠ known YALNIZ elle modda daralır: ERP'si olan kiracıda defterin sessizliği gerçekten "stok yok" demektir ve o kiracıya "bilinmiyor" demek, çalışan bir ölçümü belirsiz göstermek olurdu.

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/products/<ref>/stock" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/profile

GET /api/b2b/v1/admin/dealers/{id}

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/profile" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PATCH/api/b2b/v1/dealer/profile

PATCH /api/b2b/v1/dealer/profile (require_dealer; dealer_write seam).

Oturum

🔴 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).

İstek
curl -X PATCH "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/profile" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/quotes

GET /dealer/quotes — bayinin kendi teklifleri (dealer-RLS → başkasınınki görünmez).

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/quotes" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/quotes

POST /dealer/quotes — bayi teklif ister (b2b_portal.order.create).

Oturum

Teklif İSTEMEK sipariş vermeye en yakın eylemdir: aynı izin istenir. Yalnız katalog görebilen (ama sipariş veremeyen) kullanıcı fiyat sorup satıcıyı meşgul edemez.

İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/quotes" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/quotes/{id}

GET /dealer/quotes/{id}.

OturumYol parametresi: id
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/quotes/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/quotes/{id}/accept

POST /dealer/quotes/{id}/accept — teklifi kabul et → SİPARİŞ oluştur.

OturumYol parametresi: id

Sipariş satırları teklifin DONMUŞ fiyatıyla kurulur (yeniden fiyatlama YOK, dosya başı sözleşmesi). Sipariş submitted doğar: satıcının onay politikası (risk/always) normal akıştaki gibi işler — teklif verilmiş olması onay kuralını atlamaz.

İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/quotes/<id>/accept" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/quotes/{id}/accept-to-cart

POST /dealer/quotes/{id}/accept-to-cart — teklifi kabul et → kalemleri SEPETE yaz.

OturumYol parametresi: id

# Neden acceptin yanında ayrı bir yol var 2026-08-23 kullanıcı kararı: *"teklif kabul edilirse sepete gidecektir onaylıyor musunuz? … sepete de teklifte ne fiyatı ne adedi varsa ona göre eklensin."* Bayi teklifi kabul ettikten sonra sepetine başka ürün de ekleyip TEK siparişte gönderebilmek istiyor; accept ise doğrudan sipariş üretir ve bu ara adımı bırakmaz. İki yol da durur — hangisinin kullanılacağına EKRAN karar verir. # Fiyat nasıl korunuyor Sepet kalemi quote_id + quote_vat_rate ile damgalanır (mig 1500). checkout::price_cart o satırda fiyat motorunu ÇALIŞTIRMAZ, teklifin donmuş fiyatını kullanır. Damga olmadan pazarlık fiyatı ödeme adımında sessizce liste fiyatına dönerdi — yani teklif özelliği hiçbir işe yaramazdı. # 🔴 Kapılar accept ile BİREBİR aynıdır Sahiplik (cross-dealer 404) · yalnız quoted · daha önce siparişe dönmemiş · valid_until SUNUCU saatiyle · fiyatsız satır 409. İkinci bir kapı seti yazmak, birinin er geç gevşemesi demekti.

İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/quotes/<id>/accept-to-cart" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/dealer/quotes/{id}/reject

POST /dealer/quotes/{id}/reject — bayi teklifi reddeder.

OturumYol parametresi: id
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/quotes/<id>/reject" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/returns

GET /dealer/returns — bayinin iadeleri (dealer-RLS; keyset sayfalı + sunucu filtreli).

Oturum

Sözleşme: ?after=&limit=&status=&q=&date_from=&date_to= → {items, next_cursor}; parametresiz → eski düz dizi (geriye uyum).

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/returns" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/returns/{id}

GET /dealer/returns/{id} — iade detayı (PD-1; başlık + satırlar). Dealer-RLS → başka

OturumYol parametresi: id

bayinin iadesi 404 (sızıntı-güvenli).

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/returns/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/roles

GET /api/b2b/v1/dealer/roles — davet/rol-değiştir formu için rol seçenekleri (users.manage).

Oturum

dealer_roles tenant-RLS (dealer_id kolonu yok) → dealer tx'inden okunur (rbac çözümüyle aynı yol).

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/roles" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/targets

GET /dealer/targets — bayi KENDİ hedeflerini ve gerçekleşmesini görür.

Oturum

Bayiye hedefini göstermek işin yarısıdır; primi de görmesi satışı yönlendirir. Dealer-RLS yalnız kendi satırlarını verir.

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/targets" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/dealer/team/members

GET /api/b2b/v1/dealer/team/members — bayinin ekibi (users.manage).

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/team/members" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PATCH/api/b2b/v1/dealer/team/members/{user_id}

PATCH /api/b2b/v1/dealer/team/members/{user_id} — rol değiştir ve/veya askıya-al/aktifleştir.

OturumYol parametresi: user_id
İstek
curl -X PATCH "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/team/members/<user_id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/b2b/v1/dealer/team/members/{user_id}

DELETE /api/b2b/v1/dealer/team/members/{user_id} — üyeyi ekipten çıkar (+ paired

OturumYol parametresi: user_id

core.tenant_users temizliği, staff kimliği KORUNUR — BF1 remove semantiği dealer-scoped).

İstek
curl -X DELETE "https://{slug}.b2b.blesyum.app/api/b2b/v1/dealer/team/members/<user_id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
Bu sayfa işine yaradı mı?