Skip to content

Didit.me (KYC)

Integrate WPsigner with Didit.me to require identity verification (KYC) before signers can access a document. Signers verify their identity by uploading a government-issued ID, taking a selfie, and passing a liveness check — all before they see the first signature field.


FeatureDescription
ID Document VerificationSupports passports, national IDs, and driver’s licenses
Selfie MatchingCompares a live selfie to the photo on the ID document
Liveness DetectionPrevents spoofing with passive liveness checks
Webhook CallbacksReal-time verification status updates via webhooks
Per-Signer TrackingKYC status stored per signer (Pending, Approved, Declined)
Automatic LanguageVerification UI adapts to the signer’s WordPress locale
Encrypted CredentialsAPI key and webhook secret encrypted with AES-256-GCM

  • WPsigner 2.3.0+
  • A Didit.me Business account
  • A configured verification Workflow in the Didit console
  • An API Key and Webhook Secret from the Didit console

  1. Go to the Didit Business Console
  2. Navigate to Workflows and create a new workflow
  3. Configure the verification steps you want:
    • ID Document — require a government-issued ID
    • Selfie — require a selfie to match against the ID photo
    • Liveness — enable passive liveness detection
  4. Save the workflow and copy the Workflow ID

  1. In the Didit Business Console, go to Settings → API Keys
  2. Create a new API key or copy an existing one
  3. Copy the API Key
  4. Go to Settings → Webhooks and copy your Webhook Secret

  1. Go to WPsigner → Integrations in your WordPress admin
  2. Find Didit.me under Identity Verification and click Configure
  3. Enter your:
    • API Key
    • Workflow ID
    • Webhook Secret
  4. Click Test Connection to verify your credentials
  5. Click Save Settings

Copy the webhook URL shown on the settings page and add it to your Didit console:

https://your-site.com/?wps_didit_webhook=1
  1. In the Didit Business Console, go to Webhooks
  2. Add the URL above as a webhook endpoint
  3. Select the events to listen for (session completed, session declined)
  1. Go to WPsigner → Settings → Security & Compliance
  2. Enable Require Identity Verification (KYC)
  3. Save the settings

The toggle on the Security & Compliance page is separate from the API credentials. You need both: credentials configured on the Integrations page AND the requirement enabled on Security & Compliance.


Signer Opens Signing Page
KYC Check: Has signer been verified?
↓ No
Redirect to Didit Verification
Signer uploads ID + selfie + liveness
Didit processes verification
Webhook callback updates signer status
Signer redirected back → Can now sign
  1. When a signer opens a document that requires KYC, WPsigner checks their verification status.
  2. If not verified, WPsigner creates a Didit session via the API, passing the signer’s name and email.
  3. The signer is redirected to Didit’s verification page where they:
    • Upload a photo of their government ID
    • Take a live selfie
    • Pass the liveness check
  4. Didit processes the verification and sends a webhook to WPsigner.
  5. WPsigner updates the signer’s kyc_status to Approved or Declined.
  6. The signer is redirected back to the signing page and can proceed to sign.
StatusMeaning
PendingSession created, waiting for signer to verify
ApprovedIdentity verified — signer can sign
DeclinedVerification failed — signer cannot sign

The KYC step appears before the signing page. Signers see a clear prompt explaining that identity verification is required:

  1. Signer clicks the signing link in their email
  2. Instead of the signing page, they see a verification prompt
  3. They click “Verify Identity” which redirects to Didit
  4. After completing verification, they’re sent back to the signing page
  5. The signing page loads normally — they can now sign

DataStorage Location
KYC statuswps_signers table: kyc_status column
Session IDwps_signers table: kyc_session_id column
Verification URLwps_signers table: kyc_data (JSON)
Verified timestampwps_signers table: kyc_verified_at (UTC)
API credentialswp_options table (encrypted with AES-256-GCM)

FeatureImplementation
API KeyEncrypted with AES-256-GCM at rest
Webhook SecretEncrypted with AES-256-GCM at rest; used to validate incoming webhooks
Webhook ValidationFail-closed: rejects all webhooks if secret is not configured
Session CreationRate limited, nonce verified, capability checked
Status ChecksOnly authenticated AJAX requests with valid nonce
PII HandlingVerification data stays on Didit’s servers; WPsigner only stores status and session ID

  1. Verify your API Key is correct (copy it again from the Didit console)
  2. Ensure your server can make outbound HTTPS requests to verification.didit.me
  3. Check that your Didit account is active and not suspended
  1. Verify the webhook URL is correctly set in the Didit console: https://your-site.com/?wps_didit_webhook=1
  2. Confirm your Webhook Secret matches between Didit and WPsigner
  3. Check that your site is publicly accessible (Didit cannot reach localhost)
  4. Enable WP_DEBUG and check debug.log for entries starting with WPsigner Didit
  1. The signer may not have completed the verification process — ask them to check for a pending session
  2. Check if the webhook was received (look in debug logs)
  3. Try creating a new session by having the signer revisit the signing link

Go to WPsigner → Integrations → Didit.me and enter your Workflow ID from the Didit Business Console.


  • Audit Trails — KYC verification events are logged in the audit trail
  • Digital ID — Add cryptographic identity with PKI certificates
  • Compliance — How KYC fits into eIDAS, ESIGN, and other regulations