İçeriğe geç
SEVKORA API GET /api/partner/v1/legal-documents v1 Değişiklikler

İş ortağı yüzeyi sözleşmesi Bağlanma PA-22

Hukuki metin sürümleri

GET/api/partner/v1/legal-documents

> Künye: TASK-312; REQ-022, DEC-251, DEC-266.

Amaç

İş ortağının son kullanıcıya kendi arayüzünde göstereceği hukuki metinlerin yayımdaki sürümünü, dondurulmuş adresini ve içerik özetini vermek (DEC-251'in birinci kanalı). Salt-okuma, yan etkisiz.

Yetki

İki kademeli kimlik: X-App-Key (hangi iş ortağı) + Authorization: Bearer (hangi hesap adına). Hesap anahtarı partner-api yeteneği taşır ve tek başına /api/v1e giremez; cookie oturumu bu yüzeye giremez.

Başarı 200

data[]; her metin için version + content_sha256 çifti. Hesap açma (PA-23) bu çifti geri gönderir ve güncel yayımla birebir eşleşmezse istek reddedilir.

Hatalar

503 - metinler yayımda değilken uç hiçbir şey açmaz ve makine-okur sebep döner (DEC-266); 404, 422; ayrıca 401 (uygulama ya da hesap anahtarı yok / tanınmıyor / iptal / süresi dolmuş - dört neden tek gövdeye düşer ve ayırt edilemez), 403 (iş ortağı askıda ya da hesap anahtarının kökeni sunulan uygulama anahtarıyla eşleşmiyor), 429 (oran limiti, Retry-After).

Idempotency-Key

sözleşmesi yoktur (salt-okuma).

DEC-251'in birinci kanalı. Gömülü akışta son kullanıcı sevkora.com'a hiç uğramaz; iş ortağı hukuki metni kullanıcıya kendi arayüzünde gösterir. Bu uç, o gösterimi Sevkora'nın yayımladığı sürüme çıpalar: iş ortağı eski ya da uydurma metin gösteremez, çünkü hesap açma isteği (TASK-313) buradan aldığı version + content_sha256 çiftini geri gönderir ve güncel yayımla birebir eşleşmezse 422 ile reddedilir.

Salt-okuma ve yan etkisiz (CQS); Idempotency-Key sözleşmesi yoktur.

json
{
  "data": [
    {
      "key": "kullanici-sozlesmesi",
      "title": "Sevkora Kullanıcı Sözleşmesi",
      "version": "1.1",
      "url": "https://.../sozlesmeler/kullanici-sozlesmesi/v/1.1",
      "content_sha256": "...64 hex...",
      "published_at": "2026-08-20",
      "audience": "tenant",
      "requires_acceptance": true
    }
  ],
  "meta": { "sample": false }
}

Yanıt yalnız güncel sürümleri listeler; eski sürümler kendi kalıcı adreslerinden okunmaya devam eder.

meta.sample her zaman bulunur ve üretimde falsetur (TASK-337, DEC-270). true olduğunda dönen metinler bir ÖRNEK (UAT) manifestinden gelir ve hukuken geçersizdir: şirket kimlik alanları görünür biçimde doldurulmuştur. Alanın koşullu olmaması bilinçlidir - koşullu bir alan, "yok" ile "false" arasındaki farkı çağırana yükler ve bir gün sessizce kaybolabilirdi

`url` DONDURULMUŞ sürüm adresidir, güncel adres değil

Fark taşıyıcıdır: iş ortağı bu adresi kullanıcıya gösterdiği metnin yanına koyar ve o adresin döndürdüğü baytlar, kabul beyanındaki content_sha256 ile aynı kalır. Güncel adres (/sozlesmeler/{key}) yarın başka bir sürüme çözülebilir ve kabulün delil değerini kırardı. Seçim koda bağlıdır

Özet burada yeniden HESAPLANMAZ, manifestten OKUNUR

content_sha256in tek hesaplama noktası manifest üreticisidir; ikinci bir nokta açılsaydı iki nokta zamanla ayrışır ve o özete çıpalanmış geçmiş kabul kayıtları sessizce doğrulanamaz hâle gelirdi

Tekliğin kendisi de sayılır, çünkü "tek hesaplama noktası" cümlesinin yükü tam olarak o sayıdadır: ikinci bir nokta açılırsa çıpa kırılır ve bu bölüm tazelenmek zorunda kalır

Yanıt açık beyaz listedir: manifestin path (iç dosya yolu) ve bytes alanları gövdeye girmez.

Metinler yayımda değilken: 503 (DEC-266)

Hukuki metin sürümleri çizelgesi
Kod Ne zaman Gövde
503 hukuki metinler yayımda değil {"message":"...","code":"legal_documents_unpublished"}

code ortak hata zarfına ek bir alandır (message her hatada olduğu gibi durur) ve bir tel sözleşmesidir - iş ortağı entegrasyonları bu dizgeye bakar

HANGİ YANITI ALDIĞINIZ ORTAMA GÖRE DEĞİŞİR ve bunu yanıtın kendisinden okursunuz

Üretimde hukuki metinler henüz yayımda değildir ve uç orada 503 döner; test ortamında ÖRNEK manifest yayımdadır ve uç 200 döner. Hangi ortamda olduğunuzu tahmin etmeyin: 503 gövdesindeki code ile 200 gövdesindeki meta.sample bu ayrımı zaten taşır ve ikisi de bu sayfada tanımlıdır.

Üretimde yayımın önünde duran şey bir eksiklik değil bir fail-closed kapıdır: şirket kimlik alanları doldurulmadan hiçbir metin yayımlanmaz (DEC-252, RISK-082/083). Bu cümle kendi kendine çürüyecek türdendir, o yüzden sebebi mekanik olarak bağlıdır: alanlar doldurulduğu an aşağıdaki çıpa kırılır ve bu bölüm tazelenmek zorunda kalır

Neden 404 değil: DEC-255 aynı soruyu /sozlesmeler için 404 diye cevapladı, ama o gerekçe anonim ziyaretçiye aitti - yayımlanmamış bir hukuki yüzeyin varlığı dışarıya duyurulmaz. Burada çağıran, Sevkora admin'inin kendi eliyle ürettiği X-App-Key ile gelir ve yüzeyin varlığını zaten bilir; ona 404 dönmek kimseden bir şey gizlemez, yalnızca "uç yok / URL yanlış" ile ayırt edilemez bir yanıt üretir. Boş liste de dönmez: documents() === [] ile "yayımda değil" aynı cümle değildir (manifest sözleşmesi).