Cüzdan
KYC Seviyeleri

KYC Seviyeleri

Bu uçları kim çağırır?Dış API (s2s)
Taban yol
/api/v1/wallet
Kimlik
Ed25519 istek imzası — X-Key-Id, X-Date, X-Nonce, Digest (body varsa), X-Signature. Zaman penceresi ±5 dk, nonce tek kullanımlık, anahtarda IP allow-list olabilir.
Yetki
Anahtarınız cüzdan ürününü ve çağrının gerektirdiği cüzdan iznini taşımalıdır; izni olmayan çağrı 403 WALLET_INSUFFICIENT_SCOPE alır. Uç başına izinler: Anahtar izinleri.
Çapraz yüzey
GET end-users/:id/kyc-level s2s ve panelde ORTAKTIR. PUT end-users/:id/kyc-level yalnız s2s'tedir (KYC kararına dayanır). Panelde elle seviye değişikliği bir dört-göz talebidir: POST end-users/:id/kyc-level/override-requests (talep wallet:enduser:kyc-override, onay başka bir yetkiliden wallet:enduser:kyc-approve). Seviye yükseltmesi iki yüzeyde de onaylı bir KYC oturumu ister. GET end-users/:id/kyc-level/history yalnız panelde vardır.

Her son kullanıcı bir KYC seviyesi taşır. Seviye iki şeyi belirler: kullanıcının hangi işlemleri yapabileceği ve limitlerinin ne kadar olacağı.

Seviyeyi okuma

GET /api/v1/wallet/end-users/{endUserId}/kyc-level

Son kullanıcı tarafında:

GET /api/portal/v1/wallet/me/kyc-level

Yanıt, mevcut seviyeyi ve o seviyede hangi operasyonların açık olduğunu içerir. Uygulamanızda kapalı yetenekleri gizlemeyin, kilitli gösterin — kullanıcı neyi kazanacağını görmeden seviye atlamak istemez.

Seviyeyi güncelleme

Seviye yalnız doğrulanabilir bir KYC kararıyla yükseltilir. Kararın kaynağı, aynı kiracıdaki onaylı bir KYC oturumudur; cüzdan bu oturumu KYC hizmetinden teyit etmeden seviyeyi yükseltmez.

PUT /api/v1/wallet/end-users/{endUserId}/kyc-level

Bu çağrı Idempotency-Key header'ı ve anahtarınızda wallet:enduser:kyc-override izni gerektirir.

AlanTipZorunluAçıklama
kycLevelstring✅Yeni seviye: NONE, LOW, SUBSTANTIAL, HIGH
sourceRefstring✅Yükseltmede: onaylı KYC oturumunun kimliği (sessionId). Düşürmede: kararın dayanağı olan kayıt referansı
externalCustomerIdstring—Kullanıcıyı kendi kimliğinizle hedefleme
programIdstring—Birden fazla programda zorunlu
reasonstring—Denetim gerekçesi
effectiveAtstring—Geçerlilik anı
expectedCurrentLevelstring—İyimser kilit: mevcut seviye bu değilse istek reddedilir

Yükseltme hangi koşulda kabul edilir

Hedef seviye NONE'un üstündeyse ve mevcut seviyeden düşük değilse (yükseltme ya da aynı seviyenin yenilenmesi) aşağıdakilerin tamamı sağlanmalıdır:

  1. sourceRef, sizin kiracınızdaki bir KYC oturumunun kimliğidir.
  2. Oturum onaylanmıştır ve son kararı onaydır.
  3. Oturum bu son kullanıcıya aittir: oturumun externalCustomerId değeri son kullanıcının externalCustomerId değeriyle ya da son kullanıcının kycRef değeri oturumun kişi anahtarıyla eşleşir.
  4. Aynı oturum daha önce başka bir son kullanıcının seviyesini belirlemek için kullanılmamıştır.
  5. Oturumun teyit ettiği seviye, istenen seviyeye eşit ya da ondan yüksektir.

Teyit edilen seviye, onaylı oturumda ölçülen kimlik kanıtı gücü ile kişi–belge bağının zayıf olanıdır. Örneğin kimlik kanıtı HIGH, kişi–belge bağı SUBSTANTIAL olan bir oturum en fazla SUBSTANTIAL seviyesini açar.

Koşullardan biri sağlanmazsa istek WALLET_KYC_LEVEL_UNVERIFIED (HTTP 403) ile reddedilir ve seviye değişmez. KYC hizmetine o an ulaşılamazsa istek WALLET_KYC_VERIFIER_UNAVAILABLE (HTTP 503) ile reddedilir; doğrulanamayan bir yükseltme hiçbir durumda uygulanmaz.

⚠️

Serbest metin bir referans (ör. REVIEW-2026-07-21-00042) seviye yükseltmek için kabul edilmez. Bu kural hem API hem panel için geçerlidir: paneldeki dört-göz onayı ek bir şarttır, KYC kararının yerini tutmaz.

Seviye düşürme

Seviyeyi düşürmek (ör. HIGH → LOW ya da NONE) KYC kararı gerektirmez. sourceRef yine zorunludur; kararın dayanağı olan kaydı (inceleme numarası, uyum kararı) yazın.

Son kullanıcı açılışında seviye

Son kullanıcılar her zaman NONE seviyesinde açılır. Açılış isteğinde kycLevelCache alanına NONE dışında bir değer gönderirseniz istek WALLET_KYC_LEVEL_UNVERIFIED ile reddedilir. Seviyeyi, açılıştan sonra yukarıdaki uç ile yükseltin.

Eşzamanlı güncellemelerde expectedCurrentLevel kullanın. İki sistem aynı anda seviye değiştirirse, beklenen seviyeyi taşımayan istek reddedilir ve sessiz üzerine yazma olmaz.

Kimliği doğrulanmamış seviye (NONE)

Kimliği doğrulanmamış cüzdan için aşağıdaki kurallar platform düzeyindedir ve her programa uygulanır. Program ayarınız boş olsa da geçerlidir.

İşlemNONE seviyesinde
Para yükleme (kart, temsilci)Açık, bakiye tavanına kadar
Cüzdanla ödeme (işyerine ödeme)Açık
Cüzdandan cüzdana transfer (W2W_TRANSFER)Kapalı
IBAN'a ve banka hesabına çekim (W2IBAN_WITHDRAW, WITHDRAW_BANK)Kapalı
Nakit çekim — ATM ve QR (CASHOUT_ATM, CASHOUT_QR)Kapalı
Kart ihracı ve kart harcaması (CARD_AUTH)Kapalı

Kapalı işlemler en az LOW seviyesi ister ve WALLET_KYC_LEVEL_INSUFFICIENT (HTTP 403) ile reddedilir. Kimliği doğrulanmamış bir kullanıcıya daha önce ihraç edilmiş kartın otorizasyonları da reddedilir.

Bakiye tavanı

NONE seviyesindeki bir TRY hesabının bakiyesi 5.000 TL'yi aşamaz. Bu tavanı aşacak bir kart yüklemesi, temsilci yüklemesi ya da gelen cüzdan transferi, para hareketi başlamadan WALLET_KYC_BALANCE_CAP_EXCEEDED (HTTP 403) ile reddedilir. Kullanıcının seviyesi yükseltildiğinde tavan kalkar.

Bakiye tavanı yalnız açık devre programlarda uygulanır. Kapalı devre programlarda (bakiye yalnız programın kendi ağında harcanır) bakiye tavanı yoktur; işlem yasakları ve limit şemasındaki işlem tavanları yine geçerlidir.

Seviye → yetenek matrisi

Platform kuralları bir tabandır. Programınız bu tabanı yalnız sıkılaştırabilir, gevşetemez: railPolicy.minKycLevelByOperation ile bir işlem için daha yüksek bir seviye isteyebilirsiniz (ör. cüzdandan cüzdana transfer için SUBSTANTIAL); tabandaki bir işlemi NONE'a açmaya çalışan bir ayar etkisizdir. Uygulanan eşik, platform tabanı ile program ayarından yüksek olanıdır.

Tabanda olmayan işlemler (ör. ödeme) için eşik yalnız program ayarından gelir; ayar yoksa o işlem için seviye kontrolü yapılmaz.

Tipik bir kurgu:

SeviyeTipik yetkiler
NONEYükleme ve ödeme; açık devrede 5.000 TL bakiye tavanıyla
LOWTransfer, çekim, nakit ve kart — düşük tavanlarla
SUBSTANTIAL / HIGHAynı işlemler, yüksek tavanlarla

Hangi seviyede hangi tutar tavanlarının geçerli olduğunu programınızın limit şeması belirler. Bkz. Limitler.

Programı canlıya almadan önce şu kontrol listesini geçin:

  • Platform tabanından daha sıkı olmasını istediğiniz işlemler için eşik tanımlı mı?
  • Limit şemasında her seviye için tavanlar dolu mu?
  • Doğrulama akışınız onaylı KYC oturumunun kimliğini saklıyor mu? Seviye yükseltirken bu kimliğe ihtiyacınız olacak.

Seviye atlatma akışı

Tipik ürün akışı:

  1. Kullanıcı bir işlemi denerken limite ya da kapalı bir yeteneğe takılır.
  2. Uygulamanız "bu işlem için seviyenizi yükseltmeniz gerekiyor" der ve bir KYC oturumu başlatır. Oturumu açarken externalCustomerId alanına son kullanıcının cüzdandaki externalCustomerId değerini verin.
  3. Oturum onaylandığında sisteminiz PUT /wallet/end-users/{id}/kyc-level çağırır ve sourceRef alanında oturumun kimliğini gönderir.
  4. Cüzdan kararı KYC hizmetinden teyit eder; kullanıcının limitleri ve yetenekleri anında güncellenir.

Adım 2'de kullanıcıya yeni seviyede ne kazanacağını somut olarak gösterin ("günlük 50.000 ₺'ye kadar çekim"). Soyut "hesabını doğrula" çağrısı en düşük dönüşüm oranına sahip ekrandır.

İlgili ürünler

Kimlik doğrulama sürecinin kendisi (belge, canlılık, adres) ayrı bir üründür ve cüzdandan bağımsız çalışır. Cüzdan yalnızca sonucu (seviye) tüketir. Bkz. Identity.

Yaygın hatalar

DurumSebepÇözüm
WALLET_KYC_LEVEL_UNVERIFIEDsourceRef onaylı bir KYC oturumu değil, başka bir kişiye ait ya da istenen seviyeyi teyit etmiyorDoğru oturumun kimliğini gönderin; oturumun externalCustomerId değerini kontrol edin
WALLET_KYC_LEVEL_UNVERIFIED (açılışta)Açılış isteğinde kycLevelCache NONE dışındaKullanıcıyı NONE ile açın, sonra yükseltin
WALLET_KYC_LEVEL_INSUFFICIENTKimliği doğrulanmamış kullanıcı transfer, çekim, nakit ya da kart denediKullanıcıyı doğrulama akışına yönlendirin
WALLET_KYC_BALANCE_CAP_EXCEEDEDYükleme kimliksiz bakiye tavanını aşıyorTutarı düşürün ya da seviyeyi yükseltin
Seviye yükseldi ama limit değişmediLimit şemasında o seviye için katman yokŞemayı kontrol edin
Yükseltme WALLET_KYC_LEVEL_CONFLICT ile reddedildiexpectedCurrentLevel uyuşmuyorGüncel seviyeyi okuyup tekrar deneyin
Kullanıcı neden reddedildiğini anlamıyorArayüz kilitli yetenekleri gizliyorKilitli gösterin ve şartını yazın