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

# Introduction

> Connect your app to your users' LLM conversation data — across ChatGPT, Claude, Gemini, and more.

## What is Verso Fetch?

Verso Fetch is a data connectivity platform that lets partner applications import, sync, and manage their users' LLM conversation history — with consent, encryption, and GDPR-compliant deletion built in.

Think of it as **Plaid for LLM conversations**: your user grants access once, and you receive structured conversation data via API and real-time webhooks. Conversations from any supported provider are normalized into a consistent schema.

## Core capabilities

<CardGroup cols={2}>
  <Card title="Data import" icon="download">
    Hosted connect page or server-side export ingestion. Your user logs into
    their LLM provider once — we handle session capture, token rotation, and
    data normalization into a unified message format.
  </Card>

  <Card title="Incremental sync" icon="rotate">
    Daily background pulls via headless browser. Cursor-based pagination
    ensures you only receive new or updated conversations.
  </Card>

  <Card title="GDPR deletion" icon="trash">
    One-click user data purge or server-to-server API. Vault encryption keys
    are destroyed — credentials become mathematically irrecoverable.
  </Card>

  <Card title="Webhooks" icon="bell">
    Six event types with Stripe-style HMAC-SHA256 signatures, exponential
    backoff, and up to 6 delivery retries.
  </Card>
</CardGroup>

## How it works

```
Your App                    Verso Fetch                    LLM Provider
   |                            |                             |
   |-- signLink(connect) ------>|                             |
   |   (JWT, 15min TTL)         |                             |
   |                            |                             |
   |   User opens link -------->|-- Browserbase session ----->|
   |                            |   (user logs in)            |
   |                            |                             |
   |                            |<-- session cookie detected --|
   |                            |-- import conversations       |
   |                            |-- seal token in vault        |
   |                            |                             |
   |<-- webhook: connected -----|                             |
   |                            |                             |
   |-- GET /api/conversations ->|                             |
   |<-- { conversations } ------|                             |
```

1. Your backend signs a short-lived JWT and redirects the user.
2. The user logs into their LLM provider on a secure hosted page (Browserbase-powered).
3. Verso captures the session via CDP, imports conversations, and fires a webhook.
4. You read normalized conversations via API whenever you need them.

## Packages

| Package | Description |
| - | - |
| `@verso/core` | Types, JWT link signing, HMAC crypto, webhook verification, vault encryption, connection lifecycle |
| `@verso/connectors` | Platform adapters (ChatGPT export, ChatGPT live, hosted) with a `capture` / `pull` / `normalize` interface |

### `@verso/core` exports

| Export | Kind | Description |
| - | - | - |
| `signLink` | function | Creates a signed JWT link for connect or manage flows |
| `verifyLink` | function | Verifies and decodes a signed link JWT |
| `signHmac` | function | Signs a payload with HMAC-SHA256 |
| `verifyHmacSignature` | function | Timing-safe HMAC-SHA256 verification |
| `buildSignature` | function | Builds a Stripe-style webhook signature header |
| `verifyWebhook` | function | Verifies a webhook signature header (timestamp + HMAC) |
| `enqueueWebhook` | function | Inserts a webhook delivery record into the queue |
| `PgcryptoVaultProvider` | class | AES-256-CBC vault backed by pgcrypto + `connection_keys` table |
| `markActive` / `markNeedsReauth` / `markRevoked` | functions | Connection status helpers |
| `touchOk` / `getDecryptedBlob` | functions | Connection sync helpers |
| `renderShell` / `parseTheme` / `escapeHtml` | functions | Themed HTML page rendering |
| `createSupabaseClient` | function | Creates a typed Supabase client |
| `ConnectionStatus` | type | `"active" \| "needs_reauth" \| "revoked"` |
| `ConnectorScope` | type | `"conversations:read" \| "conversations:write" \| "conversations:delete" \| "profile:read"` |

## Next steps

<Card title="Quickstart" icon="rocket" href="/quickstart">
  Ship your first integration in 5 minutes.
</Card>
