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

# Streamkap

> Land CDC tables in your oleander Iceberg catalog with a Streamkap destination.

[**Streamkap**](https://streamkap.com/) is a managed data streaming platform that uses change data capture (CDC) to continuously replicate database inserts, updates, and deletes to destinations like Apache Iceberg. Connect its Iceberg destination to your oleander catalog to keep tables in your lake up to date and ready to query across compatible engines.

For a live example, [Bluehouse](https://oleander.dev/bluehouse) warehouses the public Bluesky firehose through exactly this connection - a Streamkap Iceberg destination writing into an oleander catalog namespace.

<img className="rounded-md" src="https://mintcdn.com/oleander/TQP_1PRd6Bm55gIO/images/streamkap-pipeline.png?fit=max&auto=format&n=TQP_1PRd6Bm55gIO&q=85&s=7e35267675426a9a1e5a1541cbeb28a5" alt="Streamkap pipeline from the bluesky-jetstream webhook source to the oleander Iceberg destination" width="1920" height="1080" data-path="images/streamkap-pipeline.png" />

## What you need

| Value               | Where to find it                                                  |
| ------------------- | ----------------------------------------------------------------- |
| **Organization ID** | [Settings → Organization](https://oleander.dev/app/settings)      |
| **API key**         | [Settings → API keys](https://oleander.dev/app/settings/api-keys) |

The organization ID is both the OAuth client ID and the catalog warehouse name. The API key is the OAuth client secret.

## Setup

1. In Streamkap, open **Destinations**, click **Add**, and choose **Iceberg**.
2. On the **Auth** tab, fill in the catalog connection:

| Field                      | Value                                                  |
| -------------------------- | ------------------------------------------------------ |
| **Catalog Type**           | `REST`                                                 |
| **Catalog Name**           | `oleander`                                             |
| **Catalog URI**            | `https://iceberg.oleander.dev/catalog`                 |
| **Authentication Mode**    | `OAuth 2.0`                                            |
| **OAuth2 Credential**      | `<organization-id>:<api-key>`                          |
| **OAuth2 Scope**           | `catalog`                                              |
| **OAuth2 Token Endpoint**  | `https://oleander.dev/api/v1/oidc/token`               |
| **Provide S3 Credentials** | Off - oleander vends storage credentials automatically |

3. On the **Settings** tab:

| Field           | Value                                                               |
| --------------- | ------------------------------------------------------------------- |
| **Warehouse**   | Your organization ID                                                |
| **Schema**      | The Iceberg namespace to write into, e.g. `bluesky`                 |
| **Region**      | `us-east-2`                                                         |
| **Insert Mode** | `Insert only` for append streams, or upsert if your source has keys |

4. Click **Save**, then attach the destination to a pipeline.

<Note>
  The **OAuth2 Credential** is the organization ID and API key joined with a colon. Streamkap exchanges it for a short-lived catalog token on your behalf, so you never paste a token by hand.
</Note>

## Querying the data

Streamkap creates one table per topic under the schema you chose. Query it like any other table in your catalog:

```sql theme={null}
SELECT count(*) FROM oleander.bluesky.bluesky_posts;
```

Tables land compacted, so the catalog stays healthy without extra maintenance. For long-running streams, schedule [Iceberg maintenance](/platform/storage/tables#table-health-and-maintenance) to expire old snapshots and keep query times flat.
