CheckID API

Verifici un CNP în registrul de autoexcludere ONJN cu un singur request. Fiecare verificare rămâne în audit trail — dovada ta la un control.

răspuns tipic sub 500ms listă sincronizată automat cu ONJN CNP hash-uit, nestocat în clar

Acces și autentificare

Accesul se face pe bază de cheie API, emisă după activarea contractului — contactează-ne pentru activare. Cheia se trimite în header-ul Authorization la fiecare request:

Authorization: Bearer ck_live_a1b2c3d4e5f6...

Cheia îți este afișată o singură dată, la emitere. Păstreaz-o într-un secret manager; dacă o pierzi, emitem alta și o revocăm pe cea veche.

POST /api/v1/verify

Verifică un CNP în registrul persoanelor autoexcluse. CNP-ul călătorește în body (nu în URL), deci nu apare în loguri de acces sau proxy-uri.

curl -X POST https://checkid.app/api/v1/verify \
  -H "Authorization: Bearer ck_live_..." \
  -H "Content-Type: application/json" \
  -d '{"cnp": "1900101123456"}'

Răspuns (200):

{
  "excluded": false,
  "cnp": "1900******456",
  "checkedAt": "2026-07-16T09:30:12.345Z",
  "requestId": "chk_4f9a2b1c8d3e7f60",
  "listVersion": {
    "updatedAt": "2026-07-16T09:16:03.000Z",
    "totalRecords": 53730
  },
  "processingTimeMs": 38
}

JavaScript / Node.js:

const res = await fetch('https://checkid.app/api/v1/verify', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.CHECKID_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ cnp }),
});
const { excluded, requestId } = await res.json();
if (excluded) {
  // refuză accesul la joc și păstrează requestId în evidențele tale
}

PHP:

$ch = curl_init('https://checkid.app/api/v1/verify');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    'Authorization: Bearer ' . getenv('CHECKID_API_KEY'),
    'Content-Type: application/json',
  ],
  CURLOPT_POSTFIELDS => json_encode(['cnp' => $cnp]),
]);
$result = json_decode(curl_exec($ch), true);
if ($result['excluded']) { /* refuză accesul */ }

GET /api/v1/status

Prospețimea listei + consumul contului tău. Folosește-l pentru monitorizare și alerte (de exemplu: alertă dacă registry.ageMinutes depășește 60).

{
  "status": "operational",
  "registry": { "updatedAt": "...", "ageMinutes": 4, "totalRecords": 53730 },
  "account": { "label": "Operator X", "monthlyQuota": 10000,
               "monthlyUsed": 1842, "monthlyRemaining": 8158 }
}

Coduri de eroare

CodSemnificațieCe faci
401Cheie lipsă, invalidă sau revocatăVerifică header-ul Authorization
422CNP invalid (nu trece validarea de format + cifră de control)Corectează CNP-ul; nu retrimite identic
429Rate limit (120/min) sau quota lunară depășităBackoff; pentru quota contactează-ne
503Registrul temporar indisponibilRetry cu backoff exponențial

Audit trail și GDPR

  • • Fiecare verificare se înregistrează cu CNP hash-uit (SHA-256 + salt), rezultat, timestamp, IP și versiunea listei — CNP-ul în clar nu se stochează.
  • requestId-ul din răspuns leagă verificarea ta de rândul din audit trail — păstrează-l în evidențele tale.
  • • Lista de autoexcludere se sincronizează automat din registrul ONJN; versiunea folosită la fiecare verificare apare în listVersion.

Vrei acces la API?

Emiterea cheii durează o zi lucrătoare. Spune-ne volumul estimat și primești și un mediu de test.