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:

bash
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"
  }'
200 OK
{ "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:

bash
curl https://passify.biz/api/v1/kyc/status/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU \
  -H "Authorization: Bearer passify_live_xxx"
200 OK
{
  "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:

statusWhat it meansWhat to do
pendingVerification not finished.Ask the investor to complete it; re-check later.
verifiedAttestation issued and valid.Proceed to mint or transfer.
rejectedProvider declined the check.Inform the investor; no attestation is written.
expiredAttestation lapsed.Start a new session to renew.

Last updated