Fraud & Fraud AI
Karar API'si

Karar API'si

Fraud ürünü tek bir gerçek zamanlı karar ucu sunar. Bir işlemi (ve müşteri, cihaz, işyeri hakkında elinizdeki bağlamı) gönderirsiniz; milisaniyeler içinde, daha ödemeyi çekmeden allow / review / block / force_3d kararını açıklanabilir gerekçe setiyle alırsınız.

Taşıma ve gateway bağımsızdır: ödeme orkestratörümüzü kullanmanız gerekmez. Kendi gateway'i veya tek POS'u olan bir işyeri de, kendi alt-işyerlerini skorlayan bir ödeme kuruluşu (PSP) da aynı şekilde entegre olur.

Tek karar yolu vardır. Kenarda nasıl kimlik doğrularsanız doğrulayın (sunucunuz, panel, SDK), her çağıran aynı motora ulaşır — yani bu sayfadaki alan sözleşmesi sözleşmenin tamamıdır.

Tüm örnekler için temel URL: https://api-gateway.lunixi.com/api/v1.

Kimlik Doğrulama

Fraud kararları Bearer erişim token'ı kullanır. Kayıtlı Ed25519 anahtarınızla POST /api/v1/auth/token'a imzalı istek atıp kısa ömürlü token alırsınız, sonra her karar çağrısında gönderirsiniz:

Authorization: Bearer <access-token>

İmza şeması (X-Key-Id, X-Date, X-Nonce, Digest, X-Signature) Kimlik Doğrulama sayfasında anlatılır. Token'ınız fraud:view_decisions kapsamını taşımalıdır. Kimliği doğrulanan taraf (sizin merchantId değeriniz) token'dan alınır, asla istek gövdesinden değil — gövde başka bir kiracıyı taklit edemez.

Uç (Endpoint)

POST /api/v1/fraud/decisions/evaluate

Aşağıdaki her alan opsiyoneldir — elinizde ne varsa gönderin. Motor yalnızca aktif kurallarının başvurduğu alanları okur; gerisi bağlam olarak saklanır. Tüm tutarlar minör-birim tam sayıdır (ör. 250000 = ₺2.500,00). Asla ondalık göndermeyin.

⚠️

Yalnız burada belgelenen üst seviye alanları gönderin. API, tanımsız bir üst seviye alanı 400 ile reddeder. Her objenin iç alanları serbesttir: payment, customer, metadata ve benzerlerinin içine kendi anahtarlarınızı hatasız ekleyebilirsiniz.

🚫

Eksik veya yanlış tipli alan, kuralı sessizce false yapmaz — kuralı TETİKLEYEBİLİR.

Kural değerlendirici üç durumludur: true · false · indeterminate. Bir koşulun işlenenleri eksikse ya da tipleri uyuşmuyorsa (ör. sayısal bir eşiğe "1500" yerine null göndermek), sonuç indeterminate olur ve fail-closed ilkesiyle eşleşmiş sayılır. Gerekçe metninde bu ayrıca not düşülür.

Pratik sonucu: alanı göndermemek "o kural çalışmasın" demek değildir — tam tersine kuralın tetiklenmesine yol açabilir. Bir kuralın çalışmasını istemiyorsanız kuralın kapsamını daraltın; alanı boş bırakarak susturmaya çalışmayın.

Yönlendirme alanları (üst seviye)

AlanTipAnlamı
integrationModestringYalnız standalone (varsayılan). Alanı göndermeseniz de bu değer kullanılır; başka bir değer 400 döner
productContextstringÜrün yüzeyiniz: live_session, payment_form, hosted_payment_form ya da direct_api
subjectTypestringcard_payment, bank_transfer, wallet_operation, bill_payment … hangi payload'ı göndereceğinizi seçer
paymentRailstringcard, bank, wallet, crypto …
transferDirectionstringinbound / outbound
paymentIdstringBu işlem için kendi referansınız
merchantGroupIdsstring[]Kural hedeflemesi için grup kapsamı

Kanal taksonomisi (üst seviye)

Bu alanlar isteğin nereden ve hangi anda geldiğini söyler. Akış tetikleyicileri bu boyutlarla eşleşir, karar kaydı bunları kolon olarak tutar ve raporlar bunlara göre kırılır. Hepsi opsiyoneldir, ama göndermek akışlarınızı daraltabilmenizi sağlar.

AlanDeğerlerAnlamı
channelstandalone_api (varsayılan) · merchant_formSunucudan sunucuya çağrıda standalone_api; kendi ödeme formunuzda Lunixi SDK kullanıyorsanız merchant_form
surfaceform_gate · transaction · withdrawal_gate · settlementKanal içindeki karar yüzeyi
stagepre_authorization · post_authentication · post_hoc · async_event · scheduledİşlemin yaşam döngüsündeki değerlendirme anı
operationKindcard_sale · card_preauth · bill_payment · merchant_payment · qr_payment · outbound_transfer · inbound_transfer · w2w_transfer · w2iban_withdrawal · bulk_payout · agent_cash_out · card_topup · agent_topup · bank_transfer_topupİş işlemi türü. subjectType'ın ayıramadığı çakışmaları çözer (fatura ile işyerine ödemenin ikisi de cüzdan ödemesidir)
authModeRequested2d · 3dİşlem için istediğiniz kimlik doğrulama modu
authModeApplied2d · 3dİşlemde gerçekten uyguladığınız mod
transactionRefstring (≤180)Hesabınız içinde işlemi tanımlayan kimlik (sipariş numarası gibi). Aynı işlem için yapılan değerlendirmeler 30 gün boyunca tek işlem olarak sayılır; göndermezseniz her çağrı ayrı işlem sayılır
subjectIdstring (≤180)Değerlendirilen konunun kimliği (sipariş, müşteri ya da oturum numarası)
subMerchantRefstring (≤180)Hesabınız altındaki alt işyerinin referansı. merchant.merchantRef ile birlikte gönderirseniz iki değer aynı olmalıdır
identityAssertionstringTarayıcıdaki Lunixi SDK'nın ürettiği imzalı kimlik artefaktı
⚠️

channel kapalı bir sözlüktür ve yalnız iki değer beyan edilebilir. lunixi_checkout ve wallet kanalları Lunixi'nin kendi servislerinden gelir; dışarıdan beyan edilirse istek 400 FRAUD_CHANNEL_NOT_DECLARABLE döner. Aynı kural productContext için de geçerlidir: platformun iç şeritlerine ait bağlamlar (simulation, post_hoc_backfill, manual_review) dışarıdan beyan edilemez.

merchant_form kanalında üç alan birlikte gider. identityAssertion yalnız channel: merchant_form ile gönderilebilir ve yanında subjectId zorunludur — artefaktın bağlanacağı bir konu olmadan doğrulama "imza tuttu" demekle yetinirdi. subjectId değeri, SDK oturumunu başlatırken verdiğiniz değerle aynı olmalıdır; ayrışırsa karar düşmez ama kayıt assertion_subject_mismatch sebep koduyla işaretlenir ve artefakt güvenilmez sayılır.

tenantId göndermeniz gerekmez. Kiracı kimliği yalnız kimlik doğrulama token'ından damgalanır; gövdedeki bir değer dikkate alınmaz.

⚠️

stage: post_authentication açık beyan ister. Akış tetikleyicilerinin genel kuralı "boyut beyan etmeyen akış her istekle eşleşir" biçimindedir. Bu aşamada kural tersine çevrilir: bir akış bu aşamayı açıkça beyan etmedikçe o şeritte koşmaz. Böylece bugün yayınlı ve boyutsuz akışlarınız 3DS dönüşünde kendiliğinden ikinci kez koşmaz.

Obje sözlüğü

subjectType değerinize uyan objeleri gönderin. Besler sütunu, alanın desteklediği risk senaryosunu adlandırır (TCMB referansları Türkiye Cumhuriyet Merkez Bankası Risk Yönetimi Rehberi'ne aittir; aynı alanlar başka regülasyon paketlerinde eşdeğer kuralları çalıştırır).

payment — kart ödemesi

AlanTipBesler
amountnumber (minör birim)tutar eşikleri, velocity değeri, düz-tutar yoğunlaşması (5.4)
currencystringçok-para-birimli eşikler
is3Dbooleandoğrulama duruşu
countrystringişlem coğrafyası (4.5)
cardCountrystringkart ülkesi uyumsuzluğu
installmentCountnumbertaksit anomalileri
methodstringödeme yöntemi
idstringkart referansı (PCI uyumlu token ya da parmak izi kullanın)

customer

AlanTipBesler
idstringmüşteri-çapalı velocity & farklı-karşı-taraf sayımları (4.1)
emailstringe-posta sinyalleri — güvenilmez sağlayıcı, ardışık adresler (4.4)
countrystringmüşteri coğrafyası
isNewbooleangenç/yeni-hesap eşikleri (4.2)
groupsstring[]segment kapsamı
assignedRuleIdsstring[]açık kural hedefleme

device

AlanTipBesler
ipAddressstringaynı-IP çok-müşteri / çok-IP kuralları (4.3), ilişkili-hesap genişletme (8.2)
fingerprintIdstringcihaz velocity, kart→cihaz oynaması (5.14)
vpnDetected / proxyDetected / torDetectedbooleananonimleştirilmiş-köken riski
trustedDevicebooleanyanlış-pozitifi azaltır
countrystringcihaz coğrafyası

session — ödemenin verildiği oturum bağlamı

Yönlendirilmiş ödeme (müşteriye telefonda anlatılan ödeme) sinyalleri buradan okunur. Göndermezseniz bu sinyaller "bilinmiyor" sayılır.

AlanTipBesler
channelstringoturumun geldiği yüzey (ör. app, web)
activeCallDetectedbooleanödeme anında süren telefon görüşmesi
callStartedSecondsBeforenumbergörüşmenin ödemeden kaç saniye önce başladığı
remoteAccessToolDetectedbooleanuzaktan erişim aracı varlığı
screenShareActivebooleanekran paylaşımının açık olması
sessionAgeSecondsnumberoturumun yaşı
scamQuestionnaireobjectmüşteriye sorulan doğrulama sorularının yanıtları
priorWarningobjectmüşteriye daha önce gösterilmiş uyarı

merchant — alt-işyeri bağlamı (PSP / kendi gateway'i)

Bunu, işyeri ilişkisinin sahibi siz olduğunuzda gönderin (ör. alt işyerlerini skorlayan bir ödeme kuruluşu). SaaS platformumuzu kullanıyorsanız ve göndermezseniz, MCC işyerinin kimlik bilgisinden çözülür.

AlanTipBesler
merchantRefstringsizin alt işyeri kimliğiniz (merchantId değerinizden ayrı)
mccstringsektör-ortalaması ciro & segment (5.1)
category / businessModelstringsegment yorumu (sektöre göre gece/hafta-sonu kuralları, 5.3)
countrystringişyeri / POS-sunucu ülkesi (5.6)
onboardingDateISO tarihyeni-işyeri kümülatif hacim (5.8)
firstTransactionDateISO tarihilk-faaliyet penceresi (5.8)
hasFinancialHistorybooleanyeni-işletme hacim eşikleri (5.8)
domainAgeDaysnumbergenç-domain riski (5.6)
registrationCountrystringkayıt vs. faaliyet uyumsuzluğu

bankTransfer — hesap / cüzdan transferleri

AlanTipBesler
amount, currencynumber / stringtransfer eşikleri
senderIban / receiverIbanstringfarklı-karşı-taraf sayımları, toplayıcı/dağıtıcı hesaplar (4.1)
senderAccountNumber / receiverAccountNumberstringhesap ilişkilendirme
senderName / receiverNamestringisim-örüntü analizi
senderBankCode / receiverBankCodestringbankalar-arası akış
reference / descriptionstringişlem-açıklaması kelime taraması (4.6)
countrystringkoridor coğrafyası

billPayment — fatura ödeme & para havalesi

AlanTipBesler
billerId / billerCategorystringkurum yoğunlaşması, aylık fatura sayıları (Bölüm 6)
invoiceId / subscriberNumberstringtekrar / sorgu-sayısı kontrolleri
amount, currency, dueDatenumber / string / tarihtutar & zamanlama anomalileri

Diğer işlem tipi payload'ları

walletOperation (walletId, operationType, amount, destinationWalletId), cryptoTransfer (asset, walletAddress, chain, travelRuleReference), loanApplication (requestedAmount, declaredIncome, employerName) ve payout (beneficiaryId, destinationType, destinationReference) aynı şekli izler — subjectType değerinize uyan objeyi gönderin; hangi alanların önemli olduğuna akışınızın kuralları karar verir.

telemetry, mobileApp, metadata

  • telemetry — davranışsal sinyaller (mouseMovementCount, copyPasteCount, typingCadenceScore, behavioralRiskScore).
  • mobileApp — mobil kimlik & attestation (installId, deviceId, platformScopedIdHash, playIntegrityToken, appAttestAssertion …).
  • metadata — serbest bağlam. Sunucuda türetilen sinyaller (işlem-açıklaması kelime bayrakları, back-URL uyumsuzluğu, IP ülkesi, telefon hash'i) event ingest sırasında hesaplanır ve kurallara metadata.fraudTransactionEvent.* altında sunulur.

Yanıt

{
  "status": "success",
  "code": "SUCCESS",
  "message": "…",
  "data": {
    "decision": "allow | review | block | force_3d",
    "score": 0.42,
    "reasonCodes": ["TCMB_3.1.2_6"],
    "matchedRuleGroups": [],
    "matchedRules": [],
    "flowPath": [],
    "actions": [],
    "tags": [],
    "explainability": { "summary": "", "groupResults": [] },
    "liveSignals": {},
    "multiFlow": {
      "enabled": true,
      "executedFlows": [],
      "skippedFlows": [],
      "asyncFlows": []
    },
    "traceId": "…",
    "latencyMs": 12
  },
  "statusCode": 200,
  "requestId": "req_01J8ZV..."
}
⚠️

Yanıt zarfında success alanı yoktur. Başarı üst seviyedeki status alanında taşınır; yük data altındadır. İstemcide response.success okuyan bir kontrol her zaman undefined görür.

decision değerini yetkili kabul edin. reasonCodes ve explainability her kararı denetim için belgeler. multiFlow bloğu hangi akışların koştuğunu, hangilerinin atlandığını ve hangilerinin arka planda kuyruğa alındığını gösterir — ayrıntı: Akışlar ve Çözümleme.

traceId kararın tekil kimliğidir. Kararı sonradan okumak ya da bir destek talebinde göstermek için saklamanız gereken tek değer budur — bkz. Karar Kayıtları.

Hata kodları, kota yanıtı ve yeniden deneme kuralları: Hatalar, tekrarlı istekler ve yeniden deneme.

Örnek

curl https://api-gateway.lunixi.com/api/v1/fraud/decisions/evaluate \
  -H "Authorization: Bearer <access-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "subjectType": "card_payment",
    "paymentRail": "card",
    "paymentId": "pi_123",
    "payment":  { "amount": 250000, "currency": "TRY", "id": "hmac:card-fingerprint" },
    "customer": { "id": "cus_88", "email": "[email protected]", "isNew": true },
    "device":   { "fingerprintId": "dev_9f2c", "ipAddress": "203.0.113.7" },
    "merchant": { "merchantRef": "sub_88", "mcc": "7995", "country": "TR", "onboardingDate": "2026-06-01" }
  }'

Sayan kurallar için geçmiş besleyin

Tek bir evaluate çağrısı yalnız önündeki işlemi bilir. Zamanla sayan kurallar — "bugün 10'dan fazla transfer", "5'ten fazla farklı alıcı", sektör ortalamasına göre ciro sapması — geçmişe ihtiyaç duyar. Geçmişi olay omurgasına beslersiniz:

POST /api/v1/fraud/events/transactions         (tekil)
POST /api/v1/fraud/events/transactions/batch   (parti)

Bu uçlar Bearer token yerine istek başına Ed25519 imzası kullanır ve senkron yazar: sonraki evaluate çağrısı olayı anında görür. Kendi tarafınızda bir mesaj kuyruğuna ihtiyacınız yoktur.

Zorunlu alanlar, olay türü sözlüğü, parti sınırları ve imza ayrıntıları: Olay Alımı API'si.

İki çağrı, tek entegrasyon. Geçmiş için her işlemi olay alımına akıtırsınız, karar için ödeme anında decisions/evaluate çağırırsınız. Hız, farklı-sayım ve temel çizgi senaryoları ancak defterde veri olunca tetiklenir.