Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.payven.com.tr/llms.txt

Use this file to discover all available pages before exploring further.

Bu endpoint, kart numarasının Luhn algoritması ile geçerli olup olmadığını kontrol eder ve aynı zamanda BIN’den banka/kart bilgilerini çözümler. Tek bir çağrıyla iki işi birden yaparsınız.

Endpoint

POST /api/v1/validation/card

İstek

curl -X POST https://identity.payven.com.tr/api/v1/validation/card \
  -H "Authorization: Bearer ..." \
  -H "Content-Type: application/json" \
  -d '{ "number": "4546711234567894" }'
AlanTipZorunluAçıklama
numberstringTam kart numarası (boşluksuz). Bu değer saklanmaz.

Yanıt

{
  "isSuccess": true,
  "data": {
    "isValid": true,
    "luhnValid": true,
    "bin": "454671",
    "lastFour": "7894",
    "maskedNumber": "454671******7894",
    "scheme": "Visa",
    "type": "Credit",
    "bank": {
      "id": "8e3f5c12-...",
      "code": "GARANTI",
      "name": "Garanti BBVA"
    },
    "program": "Bonus",
    "country": "TR"
  }
}
AlanAçıklama
isValidGenel geçerlilik (Luhn + BIN bulundu)
luhnValidSadece Luhn kontrolü
binİlk 6 hane
lastFourSon 4 hane (loglarda saklanabilir)
maskedNumberGörüntüleme için maskeli format
schemeVisa / Mastercard / Troy / Amex
typeCredit / Debit / Prepaid
bankBanka bilgisi (BIN’den çözümlendi)
programBanka kart programı (Bonus, Maximum, vb.)
Kart numarası bu istekte saklanmaz ve sunucu loglarına yazılmaz. Yine de PCI-DSS kuralları gereği kart numarasını yalnızca güvenli kanal üzerinden iletin.

Hata yanıtları

{
  "isSuccess": false,
  "code": "VALIDATION_INVALID_CARD",
  "message": "Kart numarası geçersiz."
}
HTTPcodeAnlam
400VALIDATION_INVALID_CARDLuhn kontrolü başarısız
404BIN_NOT_FOUNDBIN katalogda bulunamadı (kart geçerli ama Türk bankası değil olabilir)

Tipik kullanım: Inline form validasyonu

async function validateCardOnBlur(cardNumber) {
  const digits = cardNumber.replace(/\D/g, "");
  if (digits.length < 13) return;

  const res = await fetch("/api/validation/card", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ number: digits }),
  });
  const { data, isSuccess, message } = await res.json();

  if (!isSuccess) {
    showFieldError("cardNumber", message);
    return;
  }

  showBankLogo(data.bank.code);
  showSchemeIcon(data.scheme);
  if (data.type === "Debit") {
    hideInstallmentDropdown();
  }
}