Developer Documentation
Integrate VerifyBlind into your own platform in minutes.
Quickstart
VerifyBlind integration takes three steps: create an account, write a backend nonce endpoint, and embed the widget. The server-side webhook is optional — it works fully with the frontend widget alone.
Partner Account & API Key
Partner Portal — sign up and copy your API Key from the Settings page. The API Key is a UUID. Never embed it in the frontend.
Backend Nonce Endpoint
The widget sends a temporary RSA public key it generated in the browser to an endpoint on your backend. That endpoint forwards the data to the VerifyBlind API and returns a nonce. The API key stays on the server side. Two rules: (1) forward the body AS IS — hand-picking fields drops cf_token and silently disables the captcha; (2) preserve the response status code — if 402/403/429 never reaches the widget the user cannot see the real error.
// POST /generate-nonce (Express)
app.post('/generate-nonce', async (req, res) => {
// Gövdeyi olduğu gibi ilet: cf_token, additional_data, sdk_version dahil.
const upstream = await fetch('https://api.verifyblind.com/api/pop/generate', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': process.env.VERIFYBLIND_API_KEY },
body: JSON.stringify(req.body),
});
// Durum kodunu da geçir — 402/403/429 widget'a ulaşmalı.
res.status(upstream.status).json(await upstream.json()); // { "nonce": "b1362715-..." }
});Widget Embed
Add verifyblind.js to your page.
<script src="https://cdn.verifyblind.com/sdk/v1.0.0/verifyblind.js"
integrity="sha384-TRoHlSq3GSFXepiilMFxyyVsHt23aFYuk03hDTFZGMCYSU6qQckiEFjVk8Nssixe"
crossorigin="anonymous"></script>
<div id="verifyblind-container"></div>
<script>
window.VerifyBlind.init({
generateUrl: '/generate-nonce',
apiUrl: 'https://api.verifyblind.com',
captcha: true,
payload: {
validations: { age: '18+', user_id: true },
additional_data: { session_id: 'abc123' },
},
containerId: 'verifyblind-container',
onSuccess: (data) => {
console.log(data.validations.age); // true / false
// user_id istendiğinde 3 kod birden döner — üçünü de saklayın:
console.log(data.validations.user_id); // "a1b2c3..." (TCKN bazlı, TCKN yoksa boş)
console.log(data.validations.nsbd_id); // biyografik kişi kovası (kart yenilemede sabit)
console.log(data.validations.doc_id); // "I_9f8e..." belge kodu (aynı belge = aynı kişi)
},
onError: (err) => console.error(err),
});
</script>Browser (verifyblind.js) Partner Backend VerifyBlind API
──────────────────────────────────────────────────────────────────
1. Generate a temporary RSA key pair
2. public_key + validations ──► POST /generate-nonce ──► POST /api/pop/generate
◄── { nonce } ◄── { nonce }
3. Show QR (nonce embedded)
4. User scans QR and verifies on their phone
5. GET /api/pop/result/{nonce} (polling) ─────────────────────────►
6. { status: "completed", encrypted_response: {...} } ◄───────────
7. Decrypt in the browser with the temporary private key
8. onSuccess(data) ✓