> ## 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.

# Windows Events For Hosted Flows

## Listening to Window Events with Hosted OneSDK

Hosted OneSDK will emit window events during specific stage of your onboarding experience. You can leverage this mechanism to handle error and success handling

<Tabs>
  <Tab title="Table of Events">
    <table>
      <thead>
        <tr>
          <td>flowId</td>
          <td>On which stage?</td>
          <td>Event Emitted</td>
          <td>Payload</td>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>ocr\_only</td>

          <td>
            failed uploading OCR
          </td>

          <td>`ocr_only:failed`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>ocr\_only</td>

          <td>
            success uploading OCR
          </td>

          <td>`ocr_only:success`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>manual\_kyc</td>

          <td>
            manual kyc is mounted
          </td>

          <td>`manual_kyc:mounted`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>manual\_kyc</td>

          <td>
            success with manual kyc
          </td>

          <td>`manual_kyc:success`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>manual\_kyc</td>

          <td>
            partial success with manual kyc
          </td>

          <td>`manual_kyc:partial`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>manual\_kyc</td>

          <td>
            failed manual kyc
          </td>

          <td>`manual_kyc:failed`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>idv</td>

          <td>
            idv is getting mounted
          </td>

          <td>`idv:mount`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>idv</td>

          <td>
            idv process success
          </td>

          <td>`idv:success`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>idv</td>

          <td>
            idv process failed
          </td>

          <td>`idv:failed`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>idv</td>

          <td>
            idv getting rendered
          </td>

          <td>`idv:render`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>idv\_review</td>

          <td>
            idv\_review is getting mounted
          </td>

          <td>`idv_review:mount`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>idv\_review</td>

          <td>
            idv\_review getting rendered
          </td>

          <td>`idv_review:render`</td>
          <td>-</td>
        </tr>

        <tr>
          <td>idv\_review</td>

          <td>
            idv was failed on idv\_review flow
          </td>

          <td>`idv_review:idv_failed`</td>
          <td>(error message depends on error type)</td>
        </tr>

        <tr>
          <td>idv\_review</td>

          <td>
            after submitting review screen
          </td>

          <td>`idv_review:submit`</td>

          <td>
            *
          </td>
        </tr>

        <tr>
          <td>idv\_review</td>

          <td>
            idv\_review process is success
          </td>

          <td>`idv_review:success`</td>

          <td>
            result from calling `individual.submit()`

            sample:

            ```json theme={null}
                {
                  "payload": {
                    "checkDate": "0001-01-01T00:00:00.000Z",
                    "checkTypes": [
                      "id",
                      "namev",
                      "two_plus",
                      "pep",
                      "idvalidate"
                    ],
                    "personalChecks": {
                      "name": null,
                      "dateOfBirth": null,
                      "phoneNumber": null,
                      "email": null,
                      "chineseName": null,
                      "addresses": {
                        "4021e881-e51a-48ab-b8db-82cdc882d1a2": null
                      }
                    },
                    "status": {
                      "type": "unchecked",
                      "label": "Unchecked",
                      "key": "UNCHECKED"
                    },
                    "risk": {
                      "level": null,
                      "class": "HIGH"
                    },
                    "alertList": [],
                    "blocklistPotentialMatches": [],
                    "duplicatePotentialMatches": [],
                    "duplicateBlocklistMatches": [],
                    "checkCounts": {
                      "name": null,
                      "address": {
                        "4021e881-e51a-48ab-b8db-82cdc882d1a2": []
                      },
                      "document": {},
                      "dob": null
                    },
                    "kycMethod": "electronic",
                    "issues": {
                      "creditHeader": false,
                    },
                    "checkResults": [],
                    "rulesetsMatches": []
                  }
                }
            ```
          </td>
        </tr>

        <tr>
          <td>idv\_review</td>

          <td>
            during idv\_review, there are some issues occurred
          </td>

          <td>`idv_review:error`</td>

          <td>
            ```json theme={null}
            {
                error: {} // object of dumped errors
            }
            ```
          </td>
        </tr>
      </tbody>
    </table>
  </Tab>

  <Tab title="Implementation method">
    You can listen to Hosted OneSDK window events if you embed Hosted OneSDK inside an iframe

    ```html theme={null}
    <html lang="en">
        <head>
        	<meta name="viewport" content="width=device-width, initial-scale=1.0" charset="UTF-8"/>
        	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </head>

    	<script>
            // here, you add an event listener to listen to Hosted OneSDK window events
    		window.addEventListener('message', (e) => {
    			if (e.data['X-Frankie-Source'] === 'hosted-onesdk') {
    				console.log('---HOSTED OneSDK events', e.data)
    			}
    		});
    	</script>

    	<body>
    		<iframe
    		style="position: absolute; top: 0; left: 0; left: 0;right: 0;bottom: 0;border: 0;margin: 0; padding: 0;width: 100%; height: 100%; fontSize: 100%;font: inherit; vertical-align: baseline;"
    		src="https://verify.frankie.one?t=wy2BSoBrMYba7dB4cHS5dLjK" allow="camera;fullscreen;accelerometer;gyroscope;magnetometer;geolocation;microphone;" />
    	</body>
    </html>
    ```
  </Tab>
</Tabs>
