Docs › Hosted KYC › Hosted links
Documentation menu
Hosted links
Send a customer to Blink's hosted verification page with nothing but a link. Your backend still creates the session and reads the result; there is no SDK in your product.
page https://kyc-api.blink-pay.net/h/
default language Arabic
The link
hosted linkurl
https://kyc-api.blink-pay.net/h/?t=<sessionToken>&lang=en| Parameter | Required | Description |
|---|---|---|
t | yes | The sessionToken from the Session API. Exactly one. |
lang | no | en for English. Without it the page is in Arabic. |
Flow
- Your backend creates a session and builds the link from its
sessionToken. - Show the link to the customer — a button in your app or site, an SMS, or a QR code.
- The customer completes the document and liveness steps on Blink's page.
- Your backend reads the decision with the Result API, using the
sessionIdyou stored.
server.jsjavascript
const { sessionId, sessionToken } = await createBlinkSession(user); // Session API
await db.kycSessions.insert({ userId: user.id, sessionId });
const link = `https://kyc-api.blink-pay.net/h/?t=${encodeURIComponent(sessionToken)}&lang=en`;
await sms.send(user.phone, `Verify your identity: ${link}`);Opening a hosted link in your app
Apps built on the Flutter SDK can run a hosted link with native capture instead of the browser. Parsing the link makes no network request:
lib/kyc.dartdart
final outcome = await BlinkKyc.fromHostedLink(scannedLink)
.present(context)
.run();Only accept links whose origin is the Blink API you expect before passing them in.
Treat the link as a secret
- The link contains the session token: anyone holding it can run that verification until it expires or is used.
- Send it only to the customer it was created for, and create a new one for every attempt.
- Don't log full links or send them to analytics.