Verify an investor
A complete, production-shaped walkthrough of verifying one investor — from creating the session to confirming the attestation and handling rejections.
Scenario
A new investor connects their wallet to your platform and wants to buy into an accredited-only offering. You need an kyc_accredited_v1 attestation before any token operation is allowed.
Start the session
Create a verification session for the wallet, requesting the accredited schema:
curl -X POST https://passify.biz/api/v1/kyc/start \
-H "Authorization: Bearer passify_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"userPubkey": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"schemaId": "kyc_accredited_v1"
}'{ "session_id": "sess_9x2k", "session_url": "https://verify.blockpass.org/..." }Hand off to the investor
Redirect the investor to session_url, or open it in a new tab. They verify with the KYC provider directly — documents and selfie go to the provider, never to Passify or to you. On approval, the provider posts a signed webhook to Passify and the attestation is written on-chain automatically.
Confirm the attestation
When the investor returns, read status for the wallet:
curl https://passify.biz/api/v1/kyc/status/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU \
-H "Authorization: Bearer passify_live_xxx"{
"status": "verified",
"attestation_id": "att_5m8n",
"schema": "kyc_accredited_v1",
"expires_at": "2026-12-15T00:00:00Z",
"onchain_tx": "3kLm...xyz"
}Handle every state
A robust integration handles all outcomes, not just the happy path:
status | What it means | What to do |
|---|---|---|
pending | Verification not finished. | Ask the investor to complete it; re-check later. |
verified | Attestation issued and valid. | Proceed to mint or transfer. |
rejected | Provider declined the check. | Inform the investor; no attestation is written. |
expired | Attestation lapsed. | Start a new session to renew. |
Last updated