Getting Started
Introduction
Documentation

Introduction

LKP lets your users prove facts about themselves (their age, nationality or audience size) without sharing the underlying documents with you.

What you get#

When a user completes a verification, your server receives:

  • A yes for every requirement you asked for, for example “18 or older” and “nationality: Netherlands”. LKP verifies the zero-knowledge proofs on its servers before anything reaches you.
  • An anonymous user ID (the nullifier). It is stable for the same wallet in your app and different in every other app, so you can recognise returning users and block duplicate sign-ups from that wallet without being able to track anyone across services. It is not a biometric unique-human ID.
  • Optionally, a signed ID token (an RS256 JWT) you can verify against our public keys.

You never receive a name, birth date, document image, document number or social handle. LKP does not persist them. Document images and KYC telemetry are processed by Didit under Didit's policy, not stored in LKP's database.

Two sides of the platform#

Supported checks#

RequirementCredentialSourceStatus
AGE_OVERGovernment IDDiditLive
COUNTRY_EQUALSGovernment IDDiditLive
AGE_AT_MOSTGovernment IDDiditLive
SEX_EQUALSGovernment IDDiditLive
DOCUMENT_VALID_FORGovernment IDDiditLive
DOCUMENT_TYPE_EQUALSGovernment IDDiditLive
ISSUING_COUNTRY_EQUALSGovernment IDDiditLive
FULL_NAME_EQUALSGovernment IDDiditLive
DOCUMENT_NUMBER_EQUALSGovernment IDDiditLive
RESIDENCE_COUNTRY_EQUALSGovernment IDDiditLive
PHONE_VERIFIEDPhone numberDiditLive
PHONE_COUNTRY_EQUALSPhone numberDiditLive
PHONE_NUMBER_EQUALSPhone numberDiditLive
EMAIL_VERIFIEDWork or school emailDiditLive
EMAIL_DOMAIN_EQUALSWork or school emailDiditLive
EMAIL_ADDRESS_EQUALSWork or school emailDiditLive
FOLLOWERS_AT_LEASTInstagramTLSNotaryLive
INSTAGRAM_USERNAME_EQUALSInstagramTLSNotaryLive
INSTAGRAM_POSTS_AT_LEASTInstagramTLSNotaryLive
INSTAGRAM_VERIFIEDInstagramTLSNotaryLive
X_FOLLOWERS_AT_LEASTXXLive
X_USERNAME_EQUALSXXLive
X_ACCOUNT_AGE_AT_LEASTXXLive
X_VERIFIEDXXLive
X_POSTS_AT_LEASTXXLive
TIKTOK_FOLLOWERS_AT_LEASTTikTokTikTokLive
TIKTOK_USERNAME_EQUALSTikTokTikTokLive
TIKTOK_LIKES_AT_LEASTTikTokTikTokLive
TIKTOK_VERIFIEDTikTokTikTokLive
TIKTOK_VIDEOS_AT_LEASTTikTokTikTokLive
GITHUB_FOLLOWERS_AT_LEASTGitHubGitHubLive
GITHUB_USERNAME_EQUALSGitHubGitHubLive
GITHUB_ACCOUNT_AGE_AT_LEASTGitHubGitHubLive
GITHUB_TWO_FACTORGitHubGitHubLive
GITHUB_REPOS_AT_LEASTGitHubGitHubLive
GITHUB_CONTRIBUTIONS_AT_LEASTGitHubGitHubLive
GITHUB_ORG_MEMBERGitHubGitHubLive
BALANCE_AT_LEASTBank accountEnable BankingLive
BANK_ACCOUNT_EQUALSBank accountEnable BankingLive
BANK_HOLDER_EQUALSBank accountEnable BankingLive

Parameters, limits and examples for each are in Verification types.

Prefer to see it first? The live demo shows a store using LKP next to the exact API traffic.