Skip to main content

Your First Verification

Create a proof request and poll for the result. This takes about 5 minutes to set up.

1. Create a Proof Request

import { Tokenive } from '@tokenive/sdk';

const client = new Tokenive({
baseUrl: process.env.TOKENIVE_BASE_URL,
apiKey: process.env.TOKENIVE_API_KEY,
});

const result = await client.proofRequests.create({
requester_entity: 'my-org',
claim_type_id: 'passport',
customer_email: 'holder@example.com',
});

console.log('Request ID:', result.id);
console.log('QR Data:', result.qr_data);
console.log('Expires at:', result.expires_at);

The qr_data object should be encoded as a QR code and displayed to the holder.

2. Poll for Results

const request = await client.proofRequests.get(result.id);

console.log('Status:', request.status);
// 'pending' | 'claimed' | 'submitted' | 'verified' | 'expired'

if (request.status === 'verified') {
console.log('Verified at:', request.verified_at);
}

3. Complete Example

import { Tokenive, TokeniveError } from '@tokenive/sdk';

const client = new Tokenive({
baseUrl: process.env.TOKENIVE_BASE_URL,
apiKey: process.env.TOKENIVE_API_KEY,
});

async function verifyPassport(email: string) {
// Create the request
const { id, qr_data } = await client.proofRequests.create({
requester_entity: 'my-org',
claim_type_id: 'passport',
customer_email: email,
});

// Display QR code to the holder (your UI logic here)
console.log('Show QR code:', JSON.stringify(qr_data));

// Poll for completion
let delay = 1000;
const maxWait = 60_000;
const start = Date.now();

while (Date.now() - start < maxWait) {
const request = await client.proofRequests.get(id);

if (request.status === 'verified') {
return request;
}
if (request.status === 'expired') {
throw new Error('Verification request expired');
}

await new Promise((r) => setTimeout(r, delay));
delay = Math.min(delay * 1.5, 5000);
}

throw new Error('Verification timed out');
}

Next Steps