## API Results

### setupOnboardingSession
Success callback receives an object containing the created session identifiers:

```javascript
{
  interviewId: "string", // the session id
  token: "string"        // the session token
}
```

### startOnboarding
Success callback receives the aggregated result of the executed flow — a top-level object with a `status` plus the per-module result keys.

### startOnboardingSection
Success callback receives a top-level object:

```javascript
{
  status: "success",            // "success" | "userCancelled"
  sectionTag: "your-tag",       // the value of the sectionTag parameter you passed
  // ...plus one key per module that ran
}
```

### getUserScore
Success callback receives the full score JSON object with identity verification scores. This is passed through directly from the Incode API. Pass "fast" or "accurate" as the mode.

```javascript
cordova.exec(
  function (winParam) {
    console.log("Score:", JSON.stringify(winParam));
  },
  function (err) { console.log("Error:", err); },
  "Cplugin",
  "getUserScore",
  ["fast"]
);
```

### finishOnboarding
Success callback indicates the session was finalized successfully. No structured payload is required for normal flow control.

### startFaceLogin
- **Success:** a face login result object containing selfie data.
- **Error:** a typed string from the face authentication error set.

### faceMatch (non-UI)
Success callback receives the face match result.

### isInitialized
Success callback receives a boolean: `true` if the native SDK is fully initialized, `false` otherwise.

```javascript
cordova.exec(
  function (isInitialized) { console.log("Initialized:", isInitialized); },
  function (err) { console.log("Error:", err); },
  "Cplugin",
  "isInitialized",
  []
);
```

## Module Results
Each module contributes a key to the `startOnboardingSection` / `startOnboarding` result object.

### phoneData
From `addPhone`.

```javascript
{ phone: "+1234567890" }
```

### emailData
From `addEmail`.

```javascript
{
  email: "user@example.com",
  status: "success" // "success" | "fail"
}
```

### geoLocationData
From `addGeolocation`.

```javascript
{
  addressFields: {
    city: "string",
    colony: "string",
    postalCode: "string",
    street: "string",
    state: "string"
  }
}
```

### userConsentData
From `addUserConsent`.

```javascript
{ status: true } // boolean
```

### frontIdData / backIdData
From `addId`.

```javascript
{
  status: "ok",              // see status values below
  image: "<base64String>",   // base64-encoded image
  classifiedIdType: "ID",    // classified document type, e.g. "ID"
  idCategory: "primary",     // "primary" | "secondary"
  chosenIdType: "id",        // "id" | "passport"
  allAttemptsExhausted: false // true when no more retries available
}
```

`status` values:

| Value | Meaning |
| --- | --- |
| `ok` | Capture succeeded |
| `unknown` | Unknown error |
| `errorClassification` | Document classification failed |
| `errorGlare` | Glare detected |
| `errorSharpness` | Image not sharp enough |
| `errorReadability` | Document not readable |
| `errorInCapture` | Capture error (iOS) |
| `errorUnacceptableID` | ID not acceptable (iOS) |
| `wrongSide` | Wrong document side shown (iOS) |

### processIdData
From `addId`. (added automatically via `processId`).

```javascript
{
  extendedOcrData: "<jsonString>", // raw JSON string with full OCR data
  data: {
    address: {
      city: "string",
      colony: "string",
      postalCode: "string",
      street: "string",
      state: "string"
    },
    fullAddress: "string",
    birthDate: 0,        // Unix timestamp in milliseconds
    expirationDate: 0,   // Unix timestamp
    gender: "string",
    name: "string",
    issueDate: 0,        // Unix timestamp
    numeroEmisionCredencial: "string"
  }
}
```

### selfieData
From `addSelfieScan`.

```javascript
{
  status: "success",          // "success" | error strings
  image: "<base64String>",    // base64-encoded selfie
  spoofAttempt: false,
  allAttemptsExhausted: false // added 4.4.0
}
```

### faceMatchData
From `addFaceMatch` and the non-UI `faceMatch`.

```javascript
{
  status: "match",              // "match" | "mismatch"
  confidence: 0.99,             // 0–1 match confidence
  existingUser: true,           // whether this is a returning user
  existingInterviewId: "",      // interview ID of the existing user if found
  isFaceMatched: true,
  isNameMatched: true,
  idCategory: "primary",        // "primary" | "secondary"
  nfcVsIdConfidence: 0,         // NFC vs ID face confidence (NFC flows only)
  nfcVsSelfieConfidence: 0      // NFC vs selfie confidence (NFC flows only)
}
```

### signatureData
From `addSignature` (formerly `signaturePath`).

```javascript
{ status: "string" }
```

### documentData
From `addDocumentScan`.

```javascript
{
  type: "addressStatement", // "addressStatement" | "medicalDoc" | "paymentProof" | "otherDocument1" | "otherDocument2" | "otherDocument3"
  image: "<base64String>",
  address: {
    city: "string",
    colony: "string",
    postalCode: "string",
    street: "string",
    state: "string"
  },
  data: "<rawData>"
}
```

### govresult
From `addGovernmentValidation`.

```javascript
{ status: true } // boolean
```

### approveData
From the non-UI `approve` module.

```javascript
{
  status: "approved",       // "approved" | "declined" | "error"
  id: "<uuid>",             // session UUID
  customerToken: "<token>"  // customer token
}
```

### nfcData
From `addNFC`. All MRZ/chip fields are extracted from the document chip.

```javascript
{
  birthDate: "",
  compositeCheckDigit: "",
  dateOfBirthCheckDigit: "",
  documentCode: "",
  documentNumber: "",
  documentNumberCheckDigit: "",
  expirationDateCheckDigit: "",
  expireAt: "",
  gender: "",
  issuingStateOrOrganization: "",
  nationality: "",
  optionalData1: "",
  optionalData2: "",
  personalNumber: "",
  personalNumberCheckDigit: "",
  primaryIdentifier: "",
  secondaryIdentifier: "",
  status: true // boolean
}
```

### videoSelfieData
From `addVideoSelfie`.

```javascript
{ status: true } // boolean: true = success, false = failed
```

### machineLearningConsentData
From `addMachineLearningConsent`.

```javascript
{ status: true } // boolean: true = consent given successfully
```

### antifraudData
From `addAntifraud`.

```javascript
{ status: true } // boolean: true = antifraud check passed
```

### eKYC
From `addEKYC`. Note: the result key is `eKYC`, not `eKYCData`.

```javascript
{ status: true } // boolean: true = eKYC checks passed
```

### curpData
From `CURPValidation`.

```javascript
{
  status: "success",  // "success" | error message string
  curp: "string",     // validated CURP code
  data: any           // raw CURP data from the validation service
}
```

### faceAuthenticationData
From `addFaceAuthentication`.

```javascript
{
  status: "success",              // "success" | "fail"
  customerUUID: "string",         // UUID of the authenticated customer
  selfieBase64: "string",         // base64-encoded selfie image
  selfieEncryptedBase64: "string", // E2EE-encrypted selfie (when E2EE is enabled)
  error: null                     // null on success; typed string on failure
}
```

### selfieAttemptData
Intermediate result emitted after each selfie capture attempt (before the module completes). Same shape as `selfieData`. Only populated when a capture attempt is made but the module hasn't finished yet.
