1. Function Signature
Copy
Quepass.LaunchJourney({
journey: string;
biometricType?: "face" | "hand";
uid?: string;
documentType?: string;
image?: string;
eventId?: string;
ticketType?: string;
onboardingFlow?: any;
activeLiveness?: boolean;
passiveLiveness?: boolean;
kioskMode?: boolean;
govVerification?: boolean;
qrPayload?: { data: string; signature: string };
documentIdentifierNationality?: string;
documentIdentifierNumber?: string;
documentIdentifierType?: string;
onBack: () => void;
onSuccess: (result: Record<string, unknown>) => void;
onFail: (error: Record<string, unknown>) => void;
})
2. Required Parameters by Journey
| Journey | Required Parameters |
|---|---|
| Onboarding | onBack, onSuccess, onFail, onboardingFlow, govVerification |
| Authentication | onBack, onSuccess, onFail, biometricType,documentType,uid |
| Transaction | onBack, onSuccess, onFail, biometricType, uid |
| Search | onBack, onSuccess, onFail, biometricType |
| SearchByImage | onBack, onSuccess, onFail, biometricType, image |
| KioskMode | onBack, onSuccess, onFail |
| EventQRRegistration | onBack, onSuccess, onFail, eventId, ticketType |
| EventBiometricCheckIn | onBack, onSuccess, onFail, eventId |
| CheckinByQR | onBack, onSuccess, onFail, eventId, qrPayload |
3. Examples
- Onboarding:
Copy
// Register.tsx
import { Quepass } from '@quepass/sdk';
const configuration = JSON.parse(localStorage.getItem('configuration') || '{}');
const onboardingFlow = configuration?.onboardingFlow;
const app = Quepass.LaunchJourney({
journey: 'Onboarding',
onboardingFlow: onboardingFlow, // from channel config
activeLiveness: localStorage.getItem('activeLiveness') === 'true',
passiveLiveness: localStorage.getItem('passiveLiveness') === 'true',
kioskMode: localStorage.getItem('mode') === 'true',
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => { setIsKYC(false); navigate(-1); },
onSuccess: (res) => {
setIsKYC(false);
setUID(res?.data?.uid ?? null);
setToken(res?.data?.token ?? null);
},
onFail: (res) => navigate('/error', { state: res }),
});
- Authentication:
Copy
const app = Quepass.LaunchJourney({
journey: 'Authentication',
documentType: credentials.documentType, // 'uid' | 'passport' | 'idcard'
uid: credentials.documentNumber,
biometricType: credentials.authMethod, // 'face' | 'hand'
activeLiveness: localStorage.getItem('activeLiveness') === 'true',
passiveLiveness: localStorage.getItem('passiveLiveness') === 'true',
kioskMode: localStorage.getItem('mode') === 'true',
eventId: selectedEvent ?? '',
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => setIsKYC(false),
onSuccess: (res) => {
if (res?.data?.uid) {
setUID(res.data.uid); setToken(res.data.token);
} else { setNotFound(true); }
setIsKYC(false);
},
onFail: (res) => navigate('/error', { state: res }),
});
- Transaction:
Copy
// Transaction.tsx
const app = Quepass.LaunchJourney({
journey: 'Transaction',
uid: credentials.documentNumber,
biometricType: credentials.authMethod,
activeLiveness: localStorage.getItem('activeLiveness') === 'true',
passiveLiveness: localStorage.getItem('passiveLiveness') === 'true',
kioskMode: localStorage.getItem('mode') === 'true',
eventId: selectedEvent ?? '',
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => setIsKYC(false),
onSuccess: (res) => {
if (res?.data?.uid) { setUID(res.data.uid); setToken(res.data.token); }
else { setNotFound(true); }
setIsKYC(false);
},
onFail: (res) => navigate('/error', { state: res }),
});// Transaction.tsx
const app = Quepass.LaunchJourney({
journey: 'Transaction',
uid: credentials.documentNumber,
biometricType: credentials.authMethod,
activeLiveness: localStorage.getItem('activeLiveness') === 'true',
passiveLiveness: localStorage.getItem('passiveLiveness') === 'true',
kioskMode: localStorage.getItem('mode') === 'true',
eventId: selectedEvent ?? '',
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => setIsKYC(false),
onSuccess: (res) => {
if (res?.data?.uid) { setUID(res.data.uid); setToken(res.data.token); }
else { setNotFound(true); }
setIsKYC(false);
},
onFail: (res) => navigate('/error', { state: res }),
});
- Search:
Copy
// FaceSearch.tsx
const app = Quepass.LaunchJourney({
journey: 'Search',
biometricType: 'face',
activeLiveness: localStorage.getItem('activeLiveness') === 'true',
passiveLiveness: localStorage.getItem('passiveLiveness') === 'true',
kioskMode: localStorage.getItem('mode') === 'true',
eventId: selectedEvent ?? '',
onBack: () => navigate(-1),
onSuccess: (res) => {
if (res?.data?.uid) {
setUID(res.data.uid); setToken(res.data.token); setIsCompleted(true);
} else { setNotFound(true); }
},
onFail: (res) => navigate('/error', { state: res }),
});
- SearchByImg:
Copy
// FaceCapture.tsx
// 1. Capture frame from <video> element
const canvas = document.createElement('canvas');
canvas.width = videoElement.videoWidth;
canvas.height = videoElement.videoHeight;
canvas.getContext('2d')!.drawImage(videoElement, 0, 0);
const imageData = canvas.toDataURL('image/jpeg');
// 2. Call SDK
const response = await Quepass.LaunchJourney({
journey: 'SearchByImage',
biometricType: 'face',
image: imageData, // Base64 data URI
eventId: selectedEvent ?? '',
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => {}, onSuccess: () => {}, onFail: () => {},
});
- KioskMode — Kiosk Face :
Copy
// KioskFace.tsx
const app = Quepass.LaunchJourney({
journey: 'KioskMode',
eventId: selectedEvent ?? '',
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => {},
onSuccess: (res) => {
// Stage 1 — image captured
if (res?.data?.isCaptured && res?.code === 200) {
setIsCaptured(true); setIsSearching(true); return;
}
// Stage 2 — match found
if (res?.data?.isFound === true && res?.data?.uid) {
setUID(res.data.uid); setToken(res.data.token); return;
}
// Stage 3 — no match
if (res?.data?.isFound === false) {
setNotFound(true); setTimeout(() => resetState(), 2000);
}
},
onFail: (res) => {
setMessage(res?.errors?.[0]?.message ?? 'Error');
setTimeout(() => resetState(), 2000);
},
});
- EventQRRegistration — Register for Event:
Copy
// RegisterEvent.tsx
const app = Quepass.LaunchJourney({
journey: 'EventQRRegistration',
eventId: selectedEvent,
ticketType: selectedTicketType,
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => {},
onSuccess: (res) => {
if (res?.code === 200) {
setIsKYC(false);
navigate('/event-pass', {
state: { uid: res?.data?.uid, token: res?.data?.token, event: selectedEvent },
});
}
},
onFail: (res) => navigate('/error', { state: res }),
});
- EventQRRegistration — Register for Event:
Copy
// FaceCheckin.tsx
const app = Quepass.LaunchJourney({
journey: 'EventBiometricCheckIn',
eventId: selectedEvent,
uid: documentNumber ?? '',
documentType: selectedType ?? '',
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => {},
onSuccess: (res) => {
if (res?.data?.isCaptured && res?.code === 200) {
setIsCaptured(true); setIsSearching(true); return;
}
if (res?.data?.isFound === true && res?.data?.uid) {
setUID(res.data.uid); setToken(res.data.token); setIsCompleted(true); return;
}
if (res?.data?.isFound === false) {
setNotFound(true);
setMessage(res?.errors?.[0]?.message ?? 'Not found.');
}
},
onFail: (res) => navigate('/error', { state: res }),
});
- EventBiometricCheckIn — Kiosk Face Check-in
Copy
// KioskFaceCheckin.tsx
const app = Quepass.LaunchJourney({
journey: 'EventBiometricCheckIn',
eventId: selectedEvent,
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => {},
onSuccess: (res) => {
if (res?.data?.isCaptured && res?.code === 200) {
setIsCaptured(true); setIsSearching(true); return;
}
if (res?.data?.isFound === true && res?.data?.uid) {
setUID(res.data.uid); setToken(res.data.token); setIsFound(true); return;
}
if (res?.data?.isFound === false) {
setNotFound(true);
setMessage(res?.errors?.[0]?.message ?? 'Not found.');
setTimeout(() => resetState(), 2000);
}
},
onFail: (res) => {
setMessage(res?.errors?.[0]?.message ?? 'Check-in failed.');
setTimeout(() => resetState(), 2000);
},
});
- CheckinByQR — QR Check-in
Copy
// KioskQRCheckin.tsx
const parsed = JSON.parse(scanResult.raw); // { data: string; signature: string }
const response = await Quepass.LaunchJourney({
journey: 'CheckinByQR',
qrPayload: {
data: parsed.data,
signature: parsed.signature,
},
eventId: selectedEvent ?? '',
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => {}, onSuccess: () => {}, onFail: () => {},
});
if (response?.code === 200) {
setUID(response?.data?.uid ?? '');
setToken(response?.data?.token ?? '');
} else {
setMessage(response?.errors?.[0]?.message ?? 'Invalid QR.');
setNotFound(true);
setTimeout(() => resetState(), 2000);
}
- ExpressVerification
Copy
const res = await Quepass.LaunchJourney({
journey: "ExpressVerification",
documentIdentifierType: documentIdentifierType ,
documentIdentifierNumber: documentIdentifierNumber,
documentIdentifierNationality: documentIdentifierNationality || undefined , //optional depends on the documentIdentifierType
onBack: () => { },
onSuccess: () => { },
onFail: () => { },
})
- ExpressOnboarding
Copy
const app = Quepass.LaunchJourney({
journey: "ExpressOnboarding",
onSuccess: (res: unknown) => {
console.log("onSuccess SDK Response", res);
},
onFail: (res: Record<string, unknown>) => {
console.log("onFail SDK Response", res);
},
onBack: () => {
},
documentIdentifierType: type,
documentIdentifierNumber: documentNumber,
documentIdentifierNationality: nationality || undefined, //optional depends on the documentIdentifierType
})
- ExchangeOnboarding
Copy
const configuration = JSON.parse(localStorage.getItem('configuration') || '{}');
const onboardingFlow = configuration?.onboardingFlow;
let app = Quepass.LaunchJourney({
journey: "ExchangeOnboarding",
onboardingFlow: onboardingFlow, // from channel config
activeLiveness: localStorage.getItem('activeLiveness') === 'true',
passiveLiveness: localStorage.getItem('passiveLiveness') === 'true',
kioskMode: localStorage.getItem('mode')=== 'true',
govVerification: localStorage.getItem('govIntegration') === 'true',
onBack: () => {},
onSuccess: () => {},
onFail: () => {},
})