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

# Overview

> A self-contained viewer for Resistant Documents results that runs inside your environment and renders from data you provide via postMessage.

The **Offline iFrame viewer** is a self-contained UI component that renders Resistant Documents results **without calling the Documents API at runtime**. It is intended for customers and partners who want to embed a results viewer into their own internal tools or run in restricted environments.

<Warning>
  The Offline iFrame bundle is provided by Resistant AI during enablement.\
  This documentation uses placeholders for the iFrame source URL.
</Warning>

## When to use the Offline iFrame viewer

Use the Offline iFrame viewer if you need:

* Embedding into an internal portal (claims, underwriting, fraud ops tools)
* Restricted / air-gapped environments
* A portable viewer that renders from pre-fetched API outputs

Use the **Web UI** instead if you want:

* A fully hosted analyst UI with minimal integration effort
* The simplest deep-link workflow into a managed UI

## What the Offline iFrame viewer needs

The Offline iFrame viewer does not fetch data for you. Your application must provide:

### Required inputs

* **Original file bytes** as an `ArrayBuffer`
* **Fraud analysis result** from:
  * `GET /v2/submission/{submission_id}/fraud`
  * Recommended for visualization: `GET /v2/submission/{submission_id}/fraud?with_metadata=true`

### Optional inputs

* **Adaptive Decision result**: `GET /v2/submission/{submission_id}/decision`
* **Classification result**: `GET /v2/submission/{submission_id}/classification`
* **submissionId** (for display/debugging)
* **Locale** and **styling** configuration (for white-labeling)

<Note>
  The Offline iFrame viewer expects result payloads as **stringified JSON** (e.g., `JSON.stringify(fraudResult)`), and the file as an `ArrayBuffer` passed via `postMessage()` (ideally using transferable objects).
</Note>

## How it works (high level)

1. Your app renders an `<iframe>` pointing to the Offline iFrame bundle.
2. Your app fetches:
   * the original file bytes, and
   * API results JSON (fraud / optional decision / optional classification).
3. Your app sends a `postMessage()` to the iframe containing:
   * the file `ArrayBuffer`
   * stringified JSON result payloads
4. The iframe renders the UI based on that payload.

➡️ Next: [Offline iFrame quickstart](/view-results/iframe/quickstart)
