> ## Documentation Index
> Fetch the complete documentation index at: https://docs.frankieone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# OneSDK Implementation Guide

> From document verification to fraud prevention, OneSDK handles the complexity of multiple vendor integrations while providing a unified API surface

<Callout icon="star" color="#3DD892" iconType="regular">
  This guide provides a conceptual overview of OneSDK integration with basic code examples. The code snippets shown are illustrative and need to be adapted into your specific framework and application architecture.
  For complete, working examples:

  * See our <a href="/docs/v1/onesdk/oneSDK/onesdk-integration-methods">Framework Integration Guides</a> for Angular, React, Vue.js, Next.js and other frameworks
  * Visit our [GitHub repository <Icon icon="arrow-up-right-from-square" size={12} />](https://github.com/frankieone/frontend-onesdk-public-sample-codes) for extensive sample code and reference implementations
  * Check out our <a href="/docs/v1/onesdk/oneSDK/hosted-common-use-cases">Hosted Implementation Examples</a> for end-to-end solutions hosted by FrankieOne
</Callout>

## Core Modules Overview

<CardGroup cols={2}>
  <Card title="Individual Module" icon="user-check" href="/docs/v1/onesdk/oneSDK/implementation-guide/module/individual">
    Complete KYC workflow for individual verification, including document handling, address verification, and profile management.
  </Card>

  {" "}

  <Card title="Biometrics Module" icon="fingerprint" href="/docs/v1/onesdk/oneSDK/implementation-guide/module/biometrics">
    Advanced biometric verification capabilities including facial recognition,
    liveness detection, and matching.
  </Card>

  {" "}

  <Card title="OCR Module" icon="file-lines" href="/docs/v1/onesdk/oneSDK/implementation-guide/module/ocr">
    Intelligent document scanning and data extraction for IDs, passports, and
    other verification documents.
  </Card>

  {" "}

  <Card title="IDV Module" icon="id-card" href="/docs/v1/onesdk/oneSDK/implementation-guide/module/idv">
    Comprehensive identity document verification with support for multiple
    document types across jurisdictions.
  </Card>

  {" "}

  <Card title="eKYC Form Module" icon="file-signature" href="/docs/v1/onesdk/oneSDK/implementation-guide/module/ekyc">
    Customizable electronic Know Your Customer forms with built-in validation and
    compliance checks.
  </Card>

  <Card title="Fraud Detection Module" icon="shield" href="/docs/v1/onesdk/oneSDK/implementation-guide/module/fraud">
    Real-time fraud prevention and detection across multiple risk vectors.
  </Card>
</CardGroup>

## OneSDK Modules Data Capture Flow

<Frame caption="Data capture flow diagram showing module selection options">
  <img src="https://mintcdn.com/frankieone-f5583b1b/MpEYW70dy4W-choU/images/docs/onesdk-modules-data-capture.png?fit=max&auto=format&n=MpEYW70dy4W-choU&q=85&s=b65165adcb110c5a50e4bef43dcacd13" alt="OneSDK modules data capture flow diagram" width="1804" height="484" data-path="images/docs/onesdk-modules-data-capture.png" />
</Frame>

## Quick Integration Guide

<Steps>
  <Step title="Install OneSDK">
    ```bash theme={null}
    npm install @frankieone/one-sdk
    ```
  </Step>

  <Step title="Initialize the SDK">
    <Callout icon="bell" color="#FFCA16" iconType="regular">
      Note: The sample code below is just an example. **Never generate tokens on the frontend** — doing so can expose your credentials.
      Always generate tokens securely on your backend and pass them to your app as needed.
    </Callout>

    ```typescript theme={null}
    import OneSdk from "@frankieone/one-sdk";
    // fetch your token
    const tokenResultRaw = await fetch(
      "https://backend.kycaml.uat.frankiefinancial.io/auth/v2/machine-session",
      {
        method: "POST",
        headers: {
          authorization: "machine " + btoa(`${CUSTOMER_ID}:${API_KEY}`),
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          permissions: {
            preset: "one-sdk",
            // you can pass either your own unique customer reference
            // or if entity already created/existed, you can pass it's ID here
            reference: "customer-reference",
            entityId: "abc-def-ghi",
          },
        }),
      },
    );

    const oneSdk = await OneSdk({
      session: tokenResultRaw,
      mode: "production",
      recipe: {
        ocr: {
          maxDocumentCount: 3,
        },
      },
    });
    ```
  </Step>

  <Step title="Configure Modules">
    ```typescript theme={null}
    // Example: Initialize Individual and Biometrics modules
    const individual = oneSdk.individual();
    const biometrics = oneSdk.component("biometrics");
    ```
  </Step>

  <Step title="Start Verification">
    ```typescript theme={null}
    // Example: Mounting Biometrics Component
    biometrics.mount("#bio-el");

    biometrics.on("detection_complete", (event) => {
      console.log("Biometric capture completed");
    });

    biometrics.on("results", (results) => {
      console.log("Verification results:", results);
    });
    ```
  </Step>
</Steps>

## Implementation Best Practices

<AccordionGroup>
  <Accordion title="Error Handling">
    ```typescript theme={null}
    try {
      await individual.submit();
    } catch (error) {
      if (error.code === 'CONSENT_REQUIRED') {
        // Handle missing consent
      } else if (error.code === 'VALIDATION_ERROR') {
        // Handle validation errors
      }
    }
    ```
  </Accordion>

  <Accordion title="Module Coordination">
    ```typescript theme={null}
    // Example: Coordinated verification flow
    const verifyUser = async () => {
      // 1. Capture basic information
      await individual.setProfileType('standard_kyc');

      // 2. Perform document verification
      const docResult = await idv.verifyDocument();

      // 3. Run biometric checks
      const bioResult = await biometrics.verifyFace();

      // 4. Submit for final verification
      return individual.submit();
    };
    ```
  </Accordion>

  <Accordion title="Performance Optimization">
    <Callout icon="star" color="#3DD892" iconType="regular">
      Initialize modules only when needed and release resources after use. This is especially important for camera-based operations in the Biometrics and OCR modules.
    </Callout>
  </Accordion>
</AccordionGroup>

## Common Integration Scenarios

<Tabs>
  <Tab title="Basic KYC">
    ```typescript theme={null}
    const basicKyc = async () => {
      const individual = oneSdk.individual();
      const idv = oneSdk.idv();

      await individual.addConsent('general');
      await idv.captureDocument('PASSPORT');
      return individual.submit();
    };
    ```
  </Tab>

  <Tab title="Enhanced Verification">
    ```typescript theme={null}
    const enhancedKyc = async () => {
      const individual = oneSdk.individual();
      const biometrics = oneSdk.biometrics();
      const fraud = oneSdk.fraud();

      await individual.setProfileType('enhanced');
      await biometrics.performLivenessCheck();
      await fraud.assess();
      return individual.submit();
    };
    ```
  </Tab>
</Tabs>

<Callout icon="thumbtack" color="#1A6CFF" iconType="regular">
  Each module can be used independently or as part of a comprehensive
  verification flow. Check individual module documentation for detailed
  implementation guidelines.
</Callout>

## Content Security Policy (CSP) Settings

You may need to adjust your Content Security Policy (CSP) settings to allow vendors' scripts and resources to load correctly. Below are the additional CSP rules required based on the vendor you are integrating with:

<Tabs>
  <Tab title="Onfido">
    Refer to [https://documentation.onfido.com/sdk/sdk-csp-guide/#content-security-policy](https://documentation.onfido.com/sdk/sdk-csp-guide/#content-security-policy) <Icon icon="arrow-up-right-from-square" size={12} />
  </Tab>

  <Tab title="Incode">
    <CodeGroup>
      ```plaintext title="Additional CSP rules for Incode" theme={null}
      default-src 'self';
      script-src 'report-sample' 'self' 'unsafe-inline' 'unsafe-eval' https://d3vv997wtl2myz.cloudfront.net https://*.incodesmile.com/ wasm-eval https://assets.frankiefinancial.io https://*.incode.com https://*.opentok.com;
      style-src 'report-sample' 'self' 'unsafe-inline' https://fonts.googleapis.com;
      object-src 'none';
      base-uri 'self';
      connect-src 'self' https://*.incodesmile.com https://*.i18nexus.com https://d3vv997wtl2myz.cloudfront.net https://featureassets.org https://prodregistryv2.org https://*.frankiefinancial.io https://*.opentok.com https://*.ipify.org data:;
      font-src 'self' https://fonts.gstatic.com https://*.frankiefinancial.io data:;
      frame-src 'self' https://incode.com https://*.incode.com https://*.incodesmile.com https://*.frankiefinancial.io https://*.frankie.one/;
      img-src 'self' data: blob:;
      manifest-src 'self';
      media-src 'self';
      worker-src 'self' blob:;
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Truuth">
    <CodeGroup>
      ```plaintext title="Additional CSP rules for Truuth" theme={null}
      script-src 'unsafe-inline' 'unsafe-eval' https://cdn.truuth.id https://assets.frankiefinancial.io;
      connect-src https://static.au.truuth.id https://portal.api.au.truuth.id https://backend.latest.frankiefinancial.io data:;
      img-src 'self' https://static.au.truuth.id data: blob:;
      ```
    </CodeGroup>
  </Tab>
</Tabs>

## Related Resources

<CardGroup cols={2}>
  <Card title="API Reference" icon="code" href="/docs/v1/api/kyc-api-endpoints/reference/status/status-check">
    Detailed API documentation for all OneSDK modules and methods.
  </Card>

  {" "}

  <Card title="Migration Guide" icon="arrow-up-right" href="/docs/v1/onesdk/Smart-ui-for-deprecation/migrating-to-onesdk">
    Guide for upgrading from previous versions of OneSDK.
  </Card>

  {" "}

  <Card title="Examples Repository" icon="github" href="https://github.com/frankieone/frontend-onesdk-public-sample-codes/">
    Sample implementations and integration patterns.
  </Card>

  <Card title="Support Portal" icon="life-ring" href="https://frankieone.atlassian.net/servicedesk/">
    Technical support and implementation assistance.
  </Card>
</CardGroup>
