Skip to main content

1. Function Signature

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

JourneyRequired Parameters
OnboardingonBack, onSuccess, onFail, onboardingFlow, govVerification
AuthenticationonBack, onSuccess, onFail, biometricType,documentType,uid
TransactiononBack, onSuccess, onFail, biometricType, uid
SearchonBack, onSuccess, onFail, biometricType
SearchByImageonBack, onSuccess, onFail, biometricType, image
KioskModeonBack, onSuccess, onFail
EventQRRegistrationonBack, onSuccess, onFail, eventId, ticketType
EventBiometricCheckInonBack, onSuccess, onFail, eventId
CheckinByQRonBack, onSuccess, onFail, eventId, qrPayload

3. Examples

  • Onboarding:
// 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:
  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:
// 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:
// 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:
// 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 :
// 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:
// 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:
// 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 
// 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
// 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
const res = await Quepass.LaunchJourney({
      journey: "ExpressVerification",
      documentIdentifierType: documentIdentifierType ,
      documentIdentifierNumber: documentIdentifierNumber,
      documentIdentifierNationality: documentIdentifierNationality || undefined , //optional depends on the documentIdentifierType 
      onBack: () => { },
      onSuccess: () => { },
      onFail: () => { },
    })
  • ExpressOnboarding
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
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: () => {},
    })