+
+## Compare plans
+
+Pick by scale, not by feature gates.
+
+| Feature | Launch | Data Access | Managed | BYOC Managed |
+|---------|--------|-------------|---------|--------------|
+| Monthly | ~$99 + usage | $1,800 | $5,500 | $3,500 + infra |
+| API calls | Metered | Unlimited | Unlimited | Unlimited |
+| Custom processors | — | Build your own | 2–3 included | Build your own |
+| Direct SQL access | — | DuckLake | DuckLake | DuckLake |
+| MCP server | Shared | Dedicated | Dedicated | Dedicated |
+| Support | Community | Business hours | Priority | Priority |
+| SLA | — | 99.5% | 99.9% | 99.9% |
+
+## What each tier is for
+
+### Launch
+
+For early builders proving out an integration. Launch keeps the base commitment low while you test Lake queries, Gateway access, and Flow pipelines.
+
+### Data Access
+
+For teams that know they need decoded Stellar data and want predictable pricing. Data Access includes unlimited API calls and direct SQL access to Lake through DuckLake.
+
+### Managed
+
+For teams that need custom data products but do not want to maintain processors. Managed includes 2–3 custom processors built and maintained by Obsrvr, priority support, and a 99.9% SLA.
+
+### BYOC Managed
+
+For teams with data residency, security, or cloud-account requirements. You own the cloud account and infrastructure bill. Obsrvr deploys and operates the platform inside your perimeter.
+
+## Nodes
+
+Dedicated Stellar infrastructure for teams that need isolation, higher rate limits, or validator participation.
+
+| Service | Monthly | Notes |
+|---------|---------|-------|
+| Dedicated RPC | $799 | Isolated Stellar RPC endpoint |
+| Dedicated Horizon | $1,499 | Isolated Horizon instance with unlimited throughput |
+| Validator Quorum | $1,499 | Dedicated validator node with quorum set management |
+| Complete Stack | $3,299 | RPC + Horizon + Validator, operated together |
+| Validator maintenance-only | $599 | We operate your existing validator |
+
+## Compliance pricing
+
+Compliance plans are priced by data volume and feature scope.
+
+Compliance plans include dashboards, sanctions screening, counterparty analysis, and audit-ready exports. Plans are scoped to your assets and required integrations.
+
+[Contact sales](mailto:sales@withobsrvr.com) for compliance pricing.
## FAQ
-### Is there a free trial?
-Yes! First 100 pipeline-minutes are free for new users.
+### What's the difference between Data Access and Managed?
-### How accurate is billing?
-Billing is calculated to the nearest minute with millisecond precision tracking.
+Data Access gives you Lake and unlimited APIs. You build custom processors yourself. Managed adds 2–3 custom processors built and maintained by Obsrvr, plus priority support.
-### Can I set spending limits?
-Yes, configure spending alerts and automatic pipeline pausing in Console.
+### Can I switch tiers as we scale?
-### What payment methods are accepted?
-- Credit/debit cards (Visa, Mastercard, Amex)
-- ACH transfers (for Enterprise)
-- Wire transfers (for Enterprise)
+Yes. Launch → Data Access → Managed is the normal upgrade path. Usage migrates with you; the API surface does not change.
-### Are there any additional fees?
-No. The only cost is the per-minute runtime charge.
+### How does BYOC Managed work?
-### What happens if payment fails?
-- 7-day grace period
-- Email notifications
-- Pipelines paused after grace period
-- Data preserved for 30 days
+You own the cloud account and pay infrastructure costs directly to AWS, GCP, or another agreed provider. Obsrvr deploys and operates the platform inside it. Your data stays inside your perimeter.
-### Can I get a refund?
-Pro-rated refunds available for annual plans. Contact support for assistance.
+### Is the open source platform free forever?
-## Comparison with Alternatives
+Yes. nebu and flowctl are MIT-licensed and remain free to self-host. You pay Obsrvr when you want us to run the platform or build processors for you.
-### vs. Self-Hosted Infrastructure
+### Do you offer annual pricing?
-| Aspect | Flow | Self-Hosted |
-|--------|------|-------------|
-| Setup Cost | $0 | $1000s+ |
-| Monthly Cost (small) | ~$30 | ~$500+ (servers) |
-| Maintenance | None | 20+ hrs/month |
-| Scaling | Automatic | Manual |
-| Time to Deploy | Minutes | Weeks |
+Annual commitments get about 15% off on Data Access and Managed tiers. Contact sales for details.
-### vs. Other Data Platforms
+## Ready to move to production?
-Flow's pricing is typically 50-80% less expensive than comparable platforms:
-- No ingress/egress fees
-- No storage charges
-- No per-event pricing
-- Simple per-minute model
+Most teams are live within a week of access. Start pay-as-you-go today or contact sales for committed plans.
-## Getting Started
-
-Ready to start? [Create your first pipeline](./getting-started/quickstart.md) and get 100 free minutes!
\ No newline at end of file
+
diff --git a/docs/flow/processors/index.md b/docs/flow/processors/index.md
index 66da7c8..93f5314 100644
--- a/docs/flow/processors/index.md
+++ b/docs/flow/processors/index.md
@@ -1,761 +1,239 @@
---
sidebar_position: 1
-title: Processors Overview
+title: Processors Reference
---
-# Processors
+# Flow processors
-Processors are the core components that transform raw blockchain data into structured, actionable information. Each processor is designed for specific use cases and data types on the Stellar and Soroban networks.
+This page lists the processor IDs currently exposed by the Flow registry. Use these IDs in `spec.processors[].type` when creating pipelines through the API.
-## Available Processors
+```bash
+export CONSOLE="https://console.withobsrvr.com"
+export API_KEY="your-team-api-key"
-### Core Ledger & Transaction
-
-#### Ledger Reader
-Reads ledger close metadata and emits individual transactions.
-
-**Configuration:**
-```yaml
-type: ledger_reader
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$CONSOLE/api/v1/flow/registry/processors/"
```
-**Use Case:** Entry point for transaction-level processing pipelines
-
----
-
-#### Passthrough Processor
-Passes ledger data through with minimal transformation, maintains XDR structure.
-
-**Configuration:**
-```yaml
-type: passthrough
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
- add_metadata: false
- include_full_xdr: true
- include_xdr_json: false
-```
+## Processor summary
-**Use Case:** Preserve raw ledger data while adding lightweight metadata
+| ID | Name | Description | Compatible consumers |
+|----|------|-------------|----------------------|
+| `payments_memo` | Payments with Memo | Process payment operations with memo fields | None currently exposed by registry compatibility rules |
+| `raw_transactions` | Raw Transactions | Process raw transactions | None currently exposed by registry compatibility rules |
+| `account_balance` | Account Balance | Track account balances | None currently exposed by registry compatibility rules |
+| `latest_ledger` | Latest Ledger Metrics | Process and track metrics for the latest ledger | `save_latest_ledger_redis` |
+| `contract_event` | Contract Event | Process Soroban contract events | `contract_events_postgres` |
+| `soroswap` | SwapService | Process SwapService events | `soroswap_postgres` |
+| `account_data` | Account Data | Process Stellar account data changes | `account_data_postgres` |
+| `contract_invocation` | Contract Invocation | Track Soroban contract invocations and their details | `contract_invocations_postgres`, `extracted_contract_invocations_postgres` |
+| `contract_filter` | Contract Filter | Filter events by specific contract IDs | `contract_events_postgres`, `contract_invocations_postgres`, `extracted_contract_invocations_postgres` |
+| `contract_data` | Contract Data | Process Stellar Soroban contract data changes | `contract_data_postgres` |
+| `extracted_contract_invocation` | Extracted Contract Invocation | Extract structured business data from contract invocations using configurable schemas | `extracted_contract_invocations_postgres` |
+| `event_payment_extractor` | Event Payment Extractor | Extracts structured payment events from contract events (Kwickbit payment processor) | `event_payment_postgres`, `google_pubsub_v2` |
----
+## Processor configuration reference
-#### Ledger to JSON
-Converts LedgerCloseMeta to JSON format.
+### `payments_memo` — Payments with Memo
-**Configuration:**
-```yaml
-type: ledger_to_json
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
+Process payment operations with memo fields
-**Use Case:** Export ledger data as JSON for downstream systems
+| Field | Type | Required | Default | Description |
+|-------|------|----------|---------|-------------|
+| `min_amount` | string | No | | Minimum payment amount to process |
+| `memo_text` | string | No | `internal` | Filter payments by memo text |
+| `asset_code` | string | No | | Filter by specific asset |
+| `addresses` | array | No | | Filter by specific addresses |
----
-#### Ledger Changes
-Extracts and processes ledger entry changes (creates, updates, deletes).
+**Example**
-**Configuration:**
```yaml
-type: ledger_changes
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
+processors:
+ - type: payments_memo
+ config:
+ min_amount: ""
+ memo_text: "internal"
+ asset_code: ""
```
-**Use Case:** Track state changes in the ledger
+### `raw_transactions` — Raw Transactions
----
-
-#### Latest Ledger
-Tracks and emits latest ledger information with transaction metrics.
-
-**Configuration:**
-```yaml
-type: latest_ledger
-```
+Process raw transactions
-**Use Case:** Monitor ledger progression and transaction activity
+| Field | Type | Required | Default | Description |
+|-------|------|----------|---------|-------------|
+| `transaction_types` | array | No | | Types of transactions to process |
----
-#### Latest Ledger RPC
-Transforms raw getLatestLedger RPC data into structured messages.
+**Example**
-**Configuration:**
```yaml
-type: latest_ledger_rpc
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
+processors:
+ - type: raw_transactions
```
-**Use Case:** Process RPC responses for latest ledger queries
+### `account_balance` — Account Balance
----
+Track account balances
-#### Operation Processor
-Extracts all operation types from transactions.
+| Field | Type | Required | Default | Description |
+|-------|------|----------|---------|-------------|
+| `account_ids` | array | Yes | | List of account IDs to monitor |
+| `assets` | array | No | | Filter by specific assets |
-**Configuration:**
-```yaml
-type: operation
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
-**Use Case:** Track all operations regardless of type
+**Example**
----
-
-### Account Monitoring
-
-#### Account Data
-Process Stellar account data changes including creation/updates/deletion.
-
-**Configuration:**
```yaml
-type: account_data
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
+processors:
+ - type: account_balance
+ config:
+ account_ids: []
```
-**Use Case:** Track account state changes, balance updates
-
----
+### `latest_ledger` — Latest Ledger Metrics
-#### Account Data Filter
-Filters account records by various criteria.
+Process and track metrics for the latest ledger
-**Configuration:**
-```yaml
-type: account_data_filter
-config:
- account_ids:
- - "GABC..."
- - "GDEF..."
- min_balance: "100000000"
- change_types:
- - "created"
- - "updated"
- start_date: "2024-01-01T00:00:00Z"
- end_date: "2024-12-31T23:59:59Z"
-```
+| Field | Type | Required | Default | Description |
+|-------|------|----------|---------|-------------|
+| `network_passphrase` | string | Yes | | The network passphrase for the Stellar network |
-**Use Case:** Filter account changes for specific accounts or thresholds
-
----
-#### Account Effects
-Extracts effects (side-effects of operations) for accounts.
+**Example**
-**Configuration:**
```yaml
-type: account_effects
-config:
- account: "GABC123..."
- network_passphrase: "Public Global Stellar Network ; September 2015"
+processors:
+ - type: latest_ledger
+ config:
+ network_passphrase: "Test SDF Network ; September 2015"
```
-**Use Case:** Track all effects on specific accounts (credits, debits, trustlines)
+### `contract_event` — Contract Event
----
+Process Soroban contract events
-#### Account Transactions
-Extracts transactions involving specific accounts (Stellar & Soroban).
+No processor-specific configuration fields.
-**Configuration:**
-```yaml
-type: account_transactions
-config:
- account: "GABC123..."
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
-**Use Case:** Transaction history for accounts
+**Example**
----
-
-#### Account Year Analytics
-Generates yearly analytics for a specific account.
-
-**Configuration:**
```yaml
-type: account_year_analytics
-config:
- account_id: "GABC123..."
- year: 2024
- network_passphrase: "Public Global Stellar Network ; September 2015"
+processors:
+ - type: contract_event
```
-**Use Case:** Annual account activity reports
+### `soroswap` — SwapService
----
+Process SwapService events
-#### Create Account
-Extracts create account operations.
-
-**Configuration:**
-```yaml
-type: create_account
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
-
-**Use Case:** Track new account creation events
-
----
+No processor-specific configuration fields.
-### Soroban Contract Processing
-#### [Contract Events](./contract-events.md)
-Captures and processes events emitted by Soroban smart contracts.
+**Example**
-**Configuration:**
```yaml
-type: contract_events
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
+processors:
+ - type: soroswap
```
-**Use Case:** DeFi protocol monitoring, dApp event tracking
+### `account_data` — Account Data
----
+Process Stellar account data changes
-#### Contract Invocation
-Extracts contract invocations with full execution details (arguments, results, state changes).
+No processor-specific configuration fields.
-**Configuration:**
-```yaml
-type: contract_invocation
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
-**Use Case:** Comprehensive contract execution tracking
-
----
+**Example**
-#### Contract Filter
-Filters events by specific contract IDs.
-
-**Configuration:**
```yaml
-type: contract_filter
-config:
- contract_ids:
- - "CCABC123..."
- - "CCDEF456..."
+processors:
+ - type: account_data
```
-**Use Case:** Targeted monitoring of specific contracts
+### `contract_invocation` — Contract Invocation
----
+Track Soroban contract invocations and their details
-#### Contract Data
-Processes contract data changes on the Soroban network.
+No processor-specific configuration fields.
-**Configuration:**
-```yaml
-type: contract_data
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
-**Use Case:** State change monitoring, contract storage analytics
+**Example**
----
-
-#### Contract Creation
-Tracks contract creation events.
-
-**Configuration:**
```yaml
-type: contract_creation
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
+processors:
+ - type: contract_invocation
```
-**Use Case:** Monitor new contract deployments
+### `contract_filter` — Contract Filter
----
+Filter events by specific contract IDs
-#### Filtered Contract Invocation
-Filters contract invocations by criteria.
+| Field | Type | Required | Default | Description |
+|-------|------|----------|---------|-------------|
+| `contract_ids` | array | Yes | | List of contract IDs to filter events for |
-**Configuration:**
-```yaml
-type: filtered_contract_invocation
-config:
- contract_id: "CCABC123..."
- function_name: "transfer"
-```
-
-**Use Case:** Filter invocations by contract ID or function name
-
----
-#### Stellar Contract Events
-Processes Stellar Asset Contract (SAC) events.
+**Example**
-**Configuration:**
```yaml
-type: stellar_contract_events
+processors:
+ - type: contract_filter
+ config:
+ contract_ids: ["CC..."]
```
-**Use Case:** Track Stellar Asset Contract interactions
+### `contract_data` — Contract Data
----
-
-#### Get Events RPC
-Fetches events via RPC getEvents endpoint.
-
-**Configuration:**
-```yaml
-type: get_events_rpc
-config:
- rpc_url: "https://rpc.nodeswithobsrvr.co/"
-```
+Process Stellar Soroban contract data changes
-**Use Case:** Query historical contract events via RPC
+| Field | Type | Required | Default | Description |
+|-------|------|----------|---------|-------------|
+| `network_passphrase` | string | Yes | | Stellar network identifier |
+| `name` | string | No | `contract_data_processor` | Optional processor identifier |
----
-#### Filter Events
-Filters contract events by various criteria.
+**Example**
-**Configuration:**
```yaml
-type: filter_events
-config:
- event_type: "contract"
- contract_ids:
- - "CCABC123..."
+processors:
+ - type: contract_data
+ config:
+ network_passphrase: "Test SDF Network ; September 2015"
+ name: "contract_data_processor"
```
-**Use Case:** Filter events by type, topic, or contract
+### `extracted_contract_invocation` — Extracted Contract Invocation
----
+Extract structured business data from contract invocations using configurable schemas
-### Bronze Layer (Hubble-Compatible)
+| Field | Type | Required | Default | Description |
+|-------|------|----------|---------|-------------|
+| `extraction_schemas` | object | Yes | `{}` | Schema definitions for extracting business data from contract invocations |
+| `name` | string | No | `contract_invocation_extractor` | Optional processor identifier |
-#### Bronze Extractors
-Extracts ALL 19 Bronze table data types from LedgerCloseMeta (Hubble-compatible schema).
-**Configuration:**
-```yaml
-type: bronze_extractors
-config:
- network_passphrase: "Test SDF Network ; September 2015"
-```
-
-**Output:** ledgers_row_v2, transactions_row_v2, operations_row_v2, effects_row_v1, trades_row_v1, accounts_snapshot_v1, trustlines_snapshot_v1, contract_events_stream_v1, and 11 more
-
-**Use Case:** Export all data for medallion architecture
-
----
-
-#### Bronze to Contract Invocation
-Converts Bronze SQL query results to ContractInvocation format.
-
-**Configuration:**
-```yaml
-type: bronze_to_contract_invocation
-```
-
-**Use Case:** Bridge Bronze data queries with contract invocation extractors
-
----
-
-### Payment & Operation Processing
-
-#### Filter Payments
-Filters payment operations by amount and asset.
-
-**Configuration:**
-```yaml
-type: filter_payments
-config:
- min_amount: "100"
- asset_code: "USDC"
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
-
-**Use Case:** Track large payments or specific asset transfers
-
----
-
-#### Participant Extractor
-Identifies all accounts involved in a transaction.
-
-**Configuration:**
-```yaml
-type: participant_extractor
-```
-
-**Use Case:** Extract transaction participants for network analysis
-
----
-
-#### Event Payment Extractor
-Extracts structured EventPayment data from contract events.
-
-**Configuration:**
-```yaml
-type: event_payment_extractor
-```
-
-**Use Case:** Parse payment events from payment processor contracts
-
----
-
-#### Transaction XDR Extractor
-Extracts transaction XDR data.
+**Example**
-**Configuration:**
```yaml
-type: transaction_xdr_extractor
+processors:
+ - type: extracted_contract_invocation
+ config:
+ extraction_schemas: {}
+ name: "contract_invocation_extractor"
```
-**Use Case:** Export transaction XDR for debugging or archival
+### `event_payment_extractor` — Event Payment Extractor
----
-
-### Asset & Market Data
-
-#### Asset Processor
-Processes asset events from operations.
-
-**Configuration:**
-```yaml
-type: asset
-```
-
-**Use Case:** Track asset usage in payments and trades
-
----
+Extracts structured payment events from contract events (Kwickbit payment processor)
-#### Asset Enrichment
-Enriches asset data with issuer account information.
+No processor-specific configuration fields.
-**Configuration:**
-```yaml
-type: asset_enrichment
-config:
- connection_string: "postgresql://user:pass@host:5432/database"
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
-
-**Use Case:** Add issuer metadata (home domain, auth flags) to asset data
-
----
-
-#### Transform to Asset Stats
-Generates asset statistics.
-
-**Configuration:**
-```yaml
-type: transform_to_asset_stats
-```
-
-**Use Case:** Asset analytics and metrics (holder counts, volume)
-
----
-
-#### Transform to Token Price
-Calculates token prices.
-
-**Configuration:**
-```yaml
-type: transform_to_token_price
-```
-
-**Use Case:** Price tracking for assets
-
----
-
-#### Transform to Market Cap
-Calculates market cap and supply data.
-
-**Configuration:**
-```yaml
-type: transform_to_market_cap
-```
-
-**Use Case:** Market cap tracking for assets
-
----
-#### Transform to Market Analytics
-Generates market analytics.
+**Example**
-**Configuration:**
```yaml
-type: transform_to_market_analytics
+processors:
+ - type: event_payment_extractor
```
-
-**Use Case:** Comprehensive market analysis
-
----
-
-#### Market Metrics
-Generates sliding window market metrics.
-
-**Configuration:**
-```yaml
-type: market_metrics
-```
-
-**Use Case:** Trading pair analytics with time-series data
-
----
-
-#### Transform to Ticker Asset
-Transforms operations into ticker asset data.
-
-**Configuration:**
-```yaml
-type: transform_to_ticker_asset
-```
-
-**Use Case:** Asset ticker data for exchanges
-
----
-
-#### Transform to Ticker Orderbook
-Generates orderbook ticker data.
-
-**Configuration:**
-```yaml
-type: transform_to_ticker_orderbook
-```
-
-**Use Case:** Orderbook snapshots for trading pairs
-
----
-
-### DeFi Protocol Processors
-
-#### Soroswap
-Processes Soroswap DEX events (new pairs, syncs).
-
-**Configuration:**
-```yaml
-type: soroswap
-```
-
-**Use Case:** Track Soroswap liquidity pool creation and state changes
-
----
-
-#### Soroswap Router
-Processes Soroswap router events.
-
-**Configuration:**
-```yaml
-type: soroswap_router
-```
-
-**Use Case:** Track Soroswap swap routing
-
----
-
-#### Phoenix AMM
-Processes Phoenix AMM contract events.
-
-**Configuration:**
-```yaml
-type: phoenix_amm
-```
-
-**Use Case:** Track Phoenix AMM swaps and liquidity events
-
----
-
-#### Kale
-Processes Kale contract events and invocations.
-
-**Configuration:**
-```yaml
-type: kale
-```
-
-**Use Case:** Track Kale protocol metrics
-
----
-
-### Application Transforms
-
-#### Transform to App Account
-Transforms account data for application use.
-
-**Configuration:**
-```yaml
-type: transform_to_app_account
-```
-
-**Use Case:** Application-specific account data formatting
-
----
-
-#### Transform to App Metrics
-Generates application network metrics.
-
-**Configuration:**
-```yaml
-type: transform_to_app_metrics
-```
-
-**Use Case:** Network-wide metrics for applications
-
----
-
-#### Transform to App Payment
-Transforms payments for application use.
-
-**Configuration:**
-```yaml
-type: transform_to_app_payment
-```
-
-**Use Case:** Application-friendly payment formatting
-
----
-
-#### Transform to App Trade
-Transforms trades for application use.
-
-**Configuration:**
-```yaml
-type: transform_to_app_trade
-```
-
-**Use Case:** Application-friendly trade formatting
-
----
-
-#### Transform to App Trustline
-Transforms trustlines for application use.
-
-**Configuration:**
-```yaml
-type: transform_to_app_trustline
-```
-
-**Use Case:** Application-friendly trustline formatting
-
----
-
-### State & Effects
-
-#### Stellar Effects
-Processes Stellar effects.
-
-**Configuration:**
-```yaml
-type: stellar_effects
-```
-
-**Use Case:** Extract Horizon-style effects from ledgers
-
----
-
-#### Claimable Balance
-Processes claimable balance entries.
-
-**Configuration:**
-```yaml
-type: claimable_balance
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
-
-**Use Case:** Track claimable balance creation/updates/claims
-
----
-
-### Wallet Backend
-
-#### Wallet Backend
-Processes state changes for wallet backend.
-
-**Configuration:**
-```yaml
-type: wallet_backend
-```
-
-**Use Case:** Track all state changes relevant to wallet applications
-
----
-
-### Utilities
-
-#### Blank Processor
-Example/template processor for payments.
-
-**Configuration:**
-```yaml
-type: blank
-config:
- network_passphrase: "Public Global Stellar Network ; September 2015"
-```
-
-**Use Case:** Template for building custom processors
-
----
-
-#### Stdout Sink
-Writes payload to stdout (terminal sink).
-
-**Configuration:**
-```yaml
-type: stdout_sink
-```
-
-**Use Case:** Debug output, pipe to other tools
-
----
-
-## Choosing the Right Processor
-
-Consider these factors when selecting a processor:
-
-1. **Data Requirements**: What specific blockchain data do you need?
-2. **Performance**: Some processors are more resource-intensive than others
-3. **Filtering Needs**: Many processors offer built-in filtering options
-4. **Output Format**: Each processor outputs data in a specific structure
-
-## Processor Configuration
-
-All processors support configuration through the Flow pipeline builder. Common configuration patterns include:
-
-```json
-{
- "processor_type": "payments_memo",
- "config": {
- "memo_text": "invoice-2024",
- "min_amount": "100",
- "asset_code": "USDC"
- }
-}
-```
-
-## Combining Processors
-
-You can chain multiple processors in a single pipeline for complex data processing scenarios. For example:
-- Use Contract Filter → Contract Events for targeted event monitoring
-- Combine Account Balance → Latest Ledger for balance snapshots
-
-## Performance Considerations
-
-- **Filtered processors** (like Payments with Memo) are more efficient than processing all data
-- **Account-specific processors** scale better than network-wide processors
-- **Contract processors** require Soroban-enabled networks
-
-## Next Steps
-
-- Explore individual processor documentation for detailed configuration options
-- Learn about [consumers](../consumers/) to deliver your processed data
-- Check our [Getting Started Guide](../getting-started/quickstart.md) for hands-on examples
\ No newline at end of file
diff --git a/docs/gateway/overview.md b/docs/gateway/overview.md
index d0df231..dfa20a9 100644
--- a/docs/gateway/overview.md
+++ b/docs/gateway/overview.md
@@ -3,90 +3,90 @@ sidebar_position: 1
title: Gateway Overview
---
-# Obsrvr Gateway Services
+# Obsrvr Gateway
-Obsrvr Gateway provides enterprise-grade access to Stellar and Soroban networks through managed API endpoints. Whether you need Horizon API access for Stellar or JSON-RPC for Soroban smart contracts, our gateway services offer reliability, scalability, and simplicity.
+Gateway provides authenticated access to Stellar Horizon, Stellar RPC, and Lake APIs through a single Gateway URL. Use it when your application needs SDK-compatible network access or one entrance point for Obsrvr services.
-## What is Obsrvr Gateway?
+Gateway is infrastructure. If you need decoded transfers, contract analytics, or account snapshots, start with [Obsrvr Lake](/docs/lake/overview).
-Obsrvr Gateway is a fully managed service that provides:
+## Base URL
-- **Stellar Horizon API** endpoints for mainnet and testnet
-- **Soroban RPC** endpoints for smart contract interactions
-- **High availability** with global infrastructure
-- **No rate limits** for authenticated users
-- **Full historical data** access
+Use `https://gateway.withobsrvr.com` for Gateway services.
-## Available Endpoints
+| Service | Mainnet | Testnet |
+|---------|---------|---------|
+| Horizon | `https://gateway.withobsrvr.com/horizon/mainnet/` | `https://gateway.withobsrvr.com/horizon/testnet/` |
+| Stellar RPC | `https://gateway.withobsrvr.com/rpc/mainnet/` | `https://gateway.withobsrvr.com/rpc/testnet/` |
+| Lake API | `https://gateway.withobsrvr.com/lake/v1/mainnet` | `https://gateway.withobsrvr.com/lake/v1/testnet` |
-### Stellar Horizon API
+Gateway routes by network in the URL path:
-Access the complete Stellar network through our Horizon endpoints:
+- Horizon: `/horizon/{network}/...`
+- Stellar RPC: `/rpc/{network}/`
+- Lake: `/lake/v1/{network}/...`
-#### Mainnet
-```
-https://stellar.nodeswithobsrvr.co/
-```
+Supported networks depend on your Gateway plan and configuration. Common values are `mainnet` and `testnet`.
-#### Testnet
-```
-https://stellar-testnet.nodeswithobsrvr.co/
+## Authentication
+
+Send your Obsrvr API key in the `Authorization` header.
+
+```bash
+Authorization: Api-Key $API_KEY
```
-### Soroban RPC
+Create and rotate keys in [Console](https://console.withobsrvr.com). Keep API keys server-side and do not embed them in browser code or public repositories.
-Interact with Soroban smart contracts through our RPC endpoints:
+## Horizon through Gateway
-#### Mainnet
-```
-https://rpc.nodeswithobsrvr.co/
-```
+Horizon requests use normal Horizon paths after `/horizon/{network}`.
-#### Testnet
-```
-https://rpc-testnet.nodeswithobsrvr.co/
+```bash
+export API_KEY="your-api-key"
+export HORIZON="https://gateway.withobsrvr.com/horizon/testnet"
+
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$HORIZON/ledgers?limit=1&order=desc"
```
-## Key Features
+Account example:
-### 🚀 Instant Access
-- No infrastructure setup required
-- Start making API calls immediately
-- Full historical data available
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$HORIZON/accounts/GAIH3ULLFQ4DGSECF2AR555KZ4KNDGEKN4AFI4SU2M7B43MGK3QJZNSR"
+```
-### 🔒 Enterprise Security
-- TLS encryption for all connections
-- API key authentication
-- IP allowlisting available
+Gateway is compatible with Stellar SDKs that accept a Horizon URL and custom headers.
-### 📊 Reliability
-- 99.9% uptime SLA
-- Global load balancing
-- Automatic failover
+```javascript
+import { Horizon } from '@stellar/stellar-sdk';
-### 🔧 Developer Friendly
-- Compatible with all Stellar SDKs
-- Comprehensive API documentation
-- WebSocket support for streaming
+const server = new Horizon.Server('https://gateway.withobsrvr.com/horizon/testnet', {
+ headers: {
+ Authorization: `Api-Key ${process.env.OBSRVR_API_KEY}`,
+ },
+});
-## Getting Started
+const ledgers = await server.ledgers().order('desc').limit(1).call();
+console.log(ledgers.records[0]);
+```
-### 1. Sign Up
+For mainnet, use:
-Create an account at [console.withobsrvr.com](https://console.withobsrvr.com) to get your API key.
+```text
+https://gateway.withobsrvr.com/horizon/mainnet
+```
-### 2. Make Your First Request
+## Stellar RPC through Gateway
-#### Horizon API Example
-```bash
-curl -H "Authorization: Bearer YOUR_API_KEY" \
- https://stellar.nodeswithobsrvr.co/accounts/GABC...XYZ
-```
+Stellar RPC requests are JSON-RPC `POST` requests to `/rpc/{network}/`.
-#### Soroban RPC Example
```bash
-curl -X POST https://rpc.nodeswithobsrvr.co/ \
- -H "Authorization: Bearer YOUR_API_KEY" \
+export API_KEY="your-api-key"
+export RPC="https://gateway.withobsrvr.com/rpc/testnet/"
+
+curl -X POST "$RPC" \
+ -H "Authorization: Api-Key $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
@@ -95,116 +95,93 @@ curl -X POST https://rpc.nodeswithobsrvr.co/ \
}'
```
-### 3. Integrate with SDKs
+JavaScript `fetch` example:
-#### JavaScript/TypeScript
```javascript
-const StellarSdk = require('stellar-sdk');
-
-const server = new StellarSdk.Server('https://stellar.nodeswithobsrvr.co/', {
+const response = await fetch('https://gateway.withobsrvr.com/rpc/testnet/', {
+ method: 'POST',
headers: {
- 'Authorization': 'Bearer YOUR_API_KEY'
- }
+ Authorization: `Api-Key ${process.env.OBSRVR_API_KEY}`,
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ jsonrpc: '2.0',
+ id: 1,
+ method: 'getHealth',
+ }),
});
-```
-
-#### Python
-```python
-from stellar_sdk import Server
-server = Server(
- horizon_url="https://stellar.nodeswithobsrvr.co/",
- headers={"Authorization": "Bearer YOUR_API_KEY"}
-)
+console.log(await response.json());
```
-## Use Cases
+Stellar SDK RPC example:
-### DeFi Applications
-- Real-time price feeds
-- Liquidity pool monitoring
-- Transaction history tracking
-
-### Wallets
-- Balance queries
-- Transaction submission
-- Payment streaming
-
-### Analytics Platforms
-- Network statistics
-- Asset distribution analysis
-- Historical data queries
+```javascript
+import { rpc } from '@stellar/stellar-sdk';
-### NFT Marketplaces
-- Asset issuance
-- Ownership tracking
-- Metadata management
+const server = new rpc.Server('https://gateway.withobsrvr.com/rpc/testnet/', {
+ headers: {
+ Authorization: `Api-Key ${process.env.OBSRVR_API_KEY}`,
+ },
+});
-## Advanced Features
+const health = await server.getHealth();
+console.log(health);
+```
-### Streaming
-Real-time updates via Server-Sent Events:
+For mainnet, use:
-```javascript
-server.transactions()
- .cursor('now')
- .stream({
- onmessage: (transaction) => {
- console.log('New transaction:', transaction);
- }
- });
+```text
+https://gateway.withobsrvr.com/rpc/mainnet/
```
-### Pagination
-Efficiently navigate large datasets:
+Use Stellar RPC for contract simulation, transaction submission, ledger metadata, and RPC methods used by Stellar SDKs.
-```javascript
-const payments = await server.payments()
- .forAccount(accountId)
- .limit(50)
- .order('desc')
- .call();
-```
+## Lake through Gateway
-### Filtering
-Query specific data subsets:
+Lake is exposed through Gateway under `/lake/v1/{network}`.
-```javascript
-const trades = await server.trades()
- .forAssetPair(assetA, assetB)
- .limit(100)
- .call();
-```
+```bash
+export API_KEY="your-api-key"
+export BASE="https://gateway.withobsrvr.com/lake/v1/testnet"
-## Comparison with Self-Hosted
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/contracts/top?period=24h&limit=10"
+```
-| Feature | Obsrvr Gateway | Self-Hosted |
-|---------|---------------|-------------|
-| Setup Time | Instant | Days/Weeks |
-| Maintenance | None | Continuous |
-| Cost | Pay-per-use | Infrastructure + Staff |
-| Scalability | Automatic | Manual |
-| Historical Data | Full | Limited by storage |
-| High Availability | Built-in | Complex setup |
+## Migrating from old direct endpoints
-## Pricing
+If your app still uses the older service-specific hostnames, update them to the Gateway URL path format.
-Gateway services are included with your Obsrvr subscription. See our [pricing page](https://withobsrvr.com/pricing) for details.
+| Old style | New Gateway style |
+|-----------|-------------------|
+| `https://stellar.nodeswithobsrvr.co/...` | `https://gateway.withobsrvr.com/horizon/mainnet/...` |
+| `https://stellar-testnet.nodeswithobsrvr.co/...` | `https://gateway.withobsrvr.com/horizon/testnet/...` |
+| `https://rpc.nodeswithobsrvr.co/` | `https://gateway.withobsrvr.com/rpc/mainnet/` |
+| `https://rpc-testnet.nodeswithobsrvr.co/` | `https://gateway.withobsrvr.com/rpc/testnet/` |
-## Guides
+The request shape stays the same for Horizon paths and RPC JSON bodies. Only the base URL changes.
-Learn how to leverage gateway services for specific use cases:
+## When to use Gateway vs Lake
-- [Running Stellar RPC with Full History](./guides/stellar-rpc-full-history.md) - Deploy your own RPC with cloud storage
+| Need | Use |
+|------|-----|
+| Submit a transaction | Gateway RPC or Horizon |
+| Call a Stellar SDK method | Gateway RPC or Horizon |
+| Query account balances as a wallet would | Gateway Horizon |
+| Query normalized token transfers | Lake |
+| Find active Soroban contracts | Lake |
+| Build compliance reports | Lake gold endpoints |
-## Support
+## Operational notes
-- **Documentation**: Full API reference at [developers.stellar.org](https://developers.stellar.org)
-- **Discord**: Join our community for real-time help
-- **Email**: support@withobsrvr.com
+- Use testnet endpoints for examples and development.
+- Keep API keys server-side. Do not embed keys in browser code or public repos.
+- Generate separate keys for production and development.
+- If you need plan-specific limits or uptime terms, check your Console subscription or contact Obsrvr support.
-## Next Steps
+## Next steps
-- [Create an account](https://console.withobsrvr.com) to get started
-- Explore our [Flow pipelines](/docs/flow/overview) for data processing
-- Check our [status page](https://status.withobsrvr.com) for real-time monitoring
\ No newline at end of file
+- [Query decoded Stellar data with Lake](/docs/lake/overview)
+- [Run the Lake quickstart](/docs/lake/getting-started/quickstart)
+- [Create custom pipelines with Flow](/docs/flow/overview)
diff --git a/docs/intro.md b/docs/intro.md
index 0f5968d..2f5a5d8 100644
--- a/docs/intro.md
+++ b/docs/intro.md
@@ -2,98 +2,92 @@
sidebar_position: 1
---
-# Introduction
+# What is Obsrvr?
-## **Obsrvr Gateway Overview**
+Obsrvr is the data backbone for Stellar builders. It gives developers, analysts, and compliance teams decoded ledger data, semantic tables, and production APIs without making them run Horizon, parse XDR, index Soroban events, or maintain their own warehouse.
-Obsrvr Gateway provides a seamless and secure connection to both the **Stellar** and **Soroban RPC** networks. It allows developers and businesses to interact with both **Mainnet** and **Testnet** environments using dedicated APIs. Whether you are building decentralized applications (dApps) or exploring transaction data, the Obsrvr Gateway ensures easy access to the tools you need.
+Obsrvr is not a generic Web3 data platform. It is built around Stellar's data model: ledgers, operations, trustlines, path payments, Soroban contract events, SAC transfers, and account state.
-### **Supported Networks:**
+## Start with Lake
-- **Stellar Mainnet:** `https://stellar.nodeswithobsrvr.co/`
-- **Stellar Testnet:** `https://stellar-testnet.nodeswithobsrvr.co/`
-- **Soroban RPC Mainnet:** `https://rpc.nodeswithobsrvr.co/`
-- **Soroban RPC Testnet:** `https://rpc-testnet.nodeswithobsrvr.co/`
+Obsrvr Lake is the centerpiece. It stores Stellar data in a medallion architecture:
-These endpoints allow access to their respective networks for interacting with accounts, assets, transactions, and other key data on the Stellar and Soroban networks.
+| Layer | What it contains | Use it for |
+|-------|------------------|------------|
+| Bronze | Raw decoded Stellar ledger data | Audit trails, custom derivations, parity with ledger history |
+| Silver | Normalized analytics tables | Token transfers, account snapshots, contract events, Soroban calls |
+| Gold | Business-ready metrics | Stablecoin volume, fee intelligence, network health, compliance exports |
----
+Most teams should start with Lake. If you want USDC transfers for an account, top Soroban contracts, account balances at a point in time, or a transaction summary, Lake is the shortest path.
-## **API Key Authentication**
+```bash
+export API_KEY="your-api-key"
+export BASE="https://gateway.withobsrvr.com/lake/v1/testnet"
-To access any of the provided APIs, you must authenticate using an API key. These keys can be generated from the **Obsrvr Console**.
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/transfers?asset_code=USDC&limit=10"
+```
-### **How to Generate an API Key:**
+## Product map
-1. Visit the Obsrvr Console: [console.withobsrvr.com](https://console.withobsrvr.com).
-2. Create a subscription to access Obsrvr services.
-3. After creating your subscription, navigate to the "Teams" section.
-4. Generate a **Team API Key**.
-5. Your API key will be displayed at the top of the screen in a message bar. Make sure to copy it for future use.
-6. You can revoke the API key at any time by selecting the **Revoke** button next to the key in the Console.
+```text
+Console
+ └─ Manage API keys, subscriptions, and resources
-### **Using the API Key in Requests:**
+Gateway
+ ├─ Horizon access
+ ├─ Stellar RPC access
+ └─ Lake API entrance point
-When making requests to the Obsrvr Gateway, include the API key in the HTTP headers for authentication. The format for the header is as follows:
+Lake
+ ├─ Bronze: raw decoded ledger data
+ ├─ Silver: analytics-ready Stellar tables
+ └─ Gold: business-ready metrics and compliance outputs
-```bash
-Authorization: Api-Key YOUR_API_KEY
+Flow
+ └─ Managed custom pipelines for teams that need their own processors and sinks
```
-**Example Request:**
+## When to use each product
-```bash
-curl -H "Authorization: Api-Key 1bBhBBbB.AAaa6MlgbAa5CCCIQaaaaCRClP4567yy" -L https://stellar-testnet.nodeswithobsrvr.co/
-```
+### Lake
-This header ensures that your requests are authorized to access the network resources.
+Use Lake when you need decoded, queryable Stellar data. Lake is the default choice for wallets, explorers, analysts, compliance workflows, and dashboards.
----
+Start here if your question sounds like:
-## **Endpoints**
+- What token transfers involved this account?
+- Which Soroban contracts were most active in the last 24 hours?
+- What was this account's balance at a ledger or timestamp?
+- What events did this contract emit?
+- What stablecoin volume moved yesterday?
-### **Stellar Mainnet:**
+[Open Lake docs](/docs/lake/overview).
-- **Base URL:** `https://stellar.nodeswithobsrvr.co/`
-- **Usage:** Access Stellar’s main network for real-time transactions, accounts, and asset data.
+### Flow
-### **Stellar Testnet:**
+Use Flow when you need a custom managed pipeline. Flow runs pipelines made from processors and consumers: read from Stellar, transform records, and write to PostgreSQL, webhooks, Kafka, S3, or another sink.
-- **Base URL:** `https://stellar-testnet.nodeswithobsrvr.co/`
-- **Usage:** Interact with Stellar’s test network to develop and test applications.
+Use Flow when Lake's standard tables are not the shape you need, or when you need to deliver events into your own system continuously.
-### **Soroban RPC Mainnet:**
+[Open Flow docs](/docs/flow/overview).
-- **Base URL:** `https://rpc.nodeswithobsrvr.co/`
-- **Usage:** Execute Soroban smart contracts, and query real-time blockchain data on the main network.
+### Gateway
-### **Soroban RPC Testnet:**
+Use Gateway for direct Horizon and Stellar RPC access. It is SDK-compatible infrastructure for network calls, transaction submission, and RPC methods.
-- **Base URL:** `https://rpc-testnet.nodeswithobsrvr.co/`
-- **Usage:** Develop, test, and simulate Soroban smart contracts in a test environment.
+Gateway is useful, but it is not the main reason to choose Obsrvr. Lake is where decoded Stellar data becomes queryable.
----
-
-## **Managing API Keys**
-
-API keys are critical for accessing and managing Obsrvr Gateway resources. You can create, view, and revoke keys directly through the Obsrvr Console.
+[Open Gateway docs](/docs/gateway/overview).
-- **Creating API Keys:**
- - Go to the Obsrvr Console and navigate to the "Teams" section.
- - Click on "New Team API Key" to generate a key.
-- **Revoking API Keys:**
- - To revoke an API key, select the **Revoke** button next to the specific key in the Console. Once revoked, the key will no longer be valid for authorization.
+### Console
----
-
-## **Best Practices**
+Use Console to manage Obsrvr resources: API keys, subscriptions, Gateway access, Flow pipelines, and account settings.
-- **Keep your API key private**: Ensure that your API keys are not shared publicly or in your source code.
-- **Use a separate key for each environment**: You can generate separate API keys for different teams or environments (production, testing) to maintain better security and manageability.
-- **Rotate your keys regularly**: Regularly rotating API keys ensures enhanced security and minimizes risk in case of accidental exposure.
+[Open Console](https://console.withobsrvr.com).
----
+## What makes Obsrvr different
-### **Next Steps:**
+Stellar's RPC and Horizon give you network access. Hubble-style datasets give you raw tables. `getEvents` gives you contract events, but not a complete semantic model for transfers, balances, contracts, and account activity.
-For more information on how to use the API or integrate with Stellar/Soroban, explore our comprehensive [API documentation](https://docs.withobsrvr.com) or visit the Obsrvr Console at [console.withobsrvr.com](https://console.withobsrvr.com).
+Obsrvr Lake sits above those layers. It keeps the raw record, then adds Stellar-native silver tables and gold metrics so teams can ask questions without rebuilding the indexer first.
diff --git a/docs/lake/api/overview.md b/docs/lake/api/overview.md
new file mode 100644
index 0000000..97e82a8
--- /dev/null
+++ b/docs/lake/api/overview.md
@@ -0,0 +1,156 @@
+---
+sidebar_position: 1
+title: API Overview
+displayed_sidebar: lake
+---
+
+# Lake API overview
+
+Lake exposes Stellar bronze, silver, semantic, and gold data through REST endpoints. Use silver endpoints for most application and analyst workflows.
+
+## Base URL
+
+```bash
+export API_KEY="your-api-key"
+export BASE="https://gateway.withobsrvr.com/lake/v1/testnet"
+```
+
+Use `/mainnet` instead of `/testnet` for mainnet access.
+
+## Authentication
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/accounts/current?account_id=GAIH3ULLFQ4DGSECF2AR555KZ4KNDGEKN4AFI4SU2M7B43MGK3QJZNSR"
+```
+
+## Response shape
+
+List endpoints return data plus pagination or metadata fields when applicable.
+
+```json
+{
+ "data": [],
+ "count": 10,
+ "cursor": "ODI5MDQ1OjE6ZGVzYw==",
+ "has_more": true,
+ "_meta": {
+ "scanned_ledger": 829045,
+ "available_ledgers": {
+ "oldest": 277,
+ "latest": 829045
+ }
+ }
+}
+```
+
+## Silver endpoints
+
+### Accounts
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| GET | `/api/v1/silver/accounts` | List and search accounts |
+| GET | `/api/v1/silver/accounts/current` | Current account state |
+| GET | `/api/v1/silver/accounts/history` | Historical account snapshots |
+| GET | `/api/v1/silver/accounts/top` | Top accounts by XLM balance |
+| GET | `/api/v1/silver/accounts/{id}/balances` | XLM and trustline balances |
+| GET | `/api/v1/silver/accounts/{id}/activity` | Account activity feed |
+
+### Transfers and operations
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| GET | `/api/v1/silver/transfers` | Unified token transfers across classic and SAC activity |
+| GET | `/api/v1/silver/payments` | Payment operations |
+| GET | `/api/v1/silver/operations/enriched` | Operations with transaction context |
+| GET | `/api/v1/silver/operations/soroban` | Soroban operations only |
+
+### Assets and tokens
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| GET | `/api/v1/silver/assets` | List tracked assets |
+| GET | `/api/v1/silver/assets/{code}:{issuer}/holders` | Asset holders |
+| GET | `/api/v1/silver/assets/{code}:{issuer}/stats` | Asset statistics |
+| GET | `/api/v1/silver/tokens/{contract_id}` | SEP-41 token metadata |
+| GET | `/api/v1/silver/tokens/{contract_id}/balances` | Token holder balances |
+| GET | `/api/v1/silver/tokens/{contract_id}/transfers` | Token transfer history |
+
+### Soroban contracts and events
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| GET | `/api/v1/silver/contracts/top` | Most active contracts |
+| GET | `/api/v1/silver/contracts/{id}/analytics` | Contract-level analytics |
+| GET | `/api/v1/silver/contracts/{id}/interface` | Detected contract interface |
+| GET | `/api/v1/silver/events` | CAP-67 unified event stream |
+| GET | `/api/v1/silver/events/generic` | Raw contract events with topic filters |
+| GET | `/api/v1/silver/events/by-contract` | Events for one contract |
+
+### Transactions and search
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| GET | `/api/v1/silver/tx/{hash}/decoded` | Human-readable transaction summary |
+| GET | `/api/v1/silver/tx/{hash}/diffs` | Balance and state diffs |
+| GET | `/api/v1/silver/tx/{hash}/full` | Full transaction analysis |
+| GET | `/api/v1/silver/search` | Search accounts, contracts, transactions, ledgers, and assets |
+
+## Semantic endpoints
+
+Semantic endpoints answer higher-level questions without requiring the caller to know every Stellar table.
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| GET | `/api/v1/semantic/activities` | Unified on-chain activity feed |
+| GET | `/api/v1/semantic/contracts` | Contract registry with type classification |
+| GET | `/api/v1/semantic/contracts/functions` | Function-level contract stats |
+| GET | `/api/v1/semantic/accounts/summary` | Account activity summary |
+| GET | `/api/v1/semantic/flows` | Normalized value flows |
+
+## Gold endpoints
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| GET | `/api/v1/gold/compliance/balances` | Point-in-time balances |
+| GET | `/api/v1/gold/compliance/supply` | Supply timeline with audit trail |
+| GET | `/api/v1/gold/compliance/archives` | Compliance archive index |
+| GET | `/api/v1/gold/compliance/lineage` | Audit lineage and checksums |
+
+## Pagination
+
+List endpoints use cursor pagination.
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/transfers?asset_code=USDC&limit=100"
+
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/transfers?asset_code=USDC&limit=100&cursor=ODI5MDQ1OjE6ZGVzYw=="
+```
+
+Treat cursors as opaque strings. Do not parse or construct them.
+
+## Errors
+
+```json
+{
+ "error": "invalid account_id"
+}
+```
+
+| Status code | Meaning |
+|-------------|---------|
+| 200 | Success |
+| 400 | Invalid parameter |
+| 401 | Missing or invalid API key |
+| 404 | Resource not found |
+| 429 | Rate limit exceeded |
+| 500 | Server error |
+
+## Next steps
+
+- [Run the Lake quickstart](/docs/lake/getting-started/quickstart)
+- [Copy query examples](/docs/lake/guides/query-examples)
+- [Understand Lake architecture](/docs/lake/architecture/overview)
diff --git a/docs/lake/architecture/overview.md b/docs/lake/architecture/overview.md
new file mode 100644
index 0000000..226f89e
--- /dev/null
+++ b/docs/lake/architecture/overview.md
@@ -0,0 +1,101 @@
+---
+sidebar_position: 1
+title: Architecture Overview
+displayed_sidebar: lake
+---
+
+# Architecture Overview
+
+OBSRVR Lake implements a lambda architecture optimized for blockchain data, combining real-time streaming with batch processing to provide both low-latency queries and complete historical access.
+
+## System Components
+
+Lake consists of 8 interconnected microservices:
+
+### Ingestion Layer
+
+**stellar-postgres-ingester**
+- Receives real-time ledger data via gRPC
+- Writes to PostgreSQL hot buffer using UNLOGGED tables
+- Optimized for high-throughput writes
+
+### Transformation Layer
+
+**silver-realtime-transformer**
+- Polls PostgreSQL hot buffer
+- Enriches and transforms raw data
+- Writes to PostgreSQL silver_hot tables
+
+**contract-event-index-transformer**
+- Indexes contract events by ledger
+- Enables O(1) lookups for contract queries
+
+**index-plane-transformer**
+- Creates transaction hash index
+- Enables fast (~500ms) hash lookups at scale
+
+### Cold Storage Archival
+
+**postgres-ducklake-flusher**
+- Moves data from hot buffer to cold storage
+- Uses high-watermark pattern for safe, idempotent transfers
+- Writes Parquet files to S3/B2
+
+**silver-cold-flusher**
+- Archives silver layer data to cold storage
+- Maintains analytics-ready historical data
+
+### Query Layer
+
+**stellar-query-api**
+- REST API for all queries
+- Transparently routes to hot or cold storage
+- Merges results when queries span both layers
+
+## Data Flow
+
+```
+Stellar Network
+ ↓
+stellar-live-source-datalake (gRPC stream)
+ ↓
+stellar-postgres-ingester
+ ↓
+PostgreSQL Hot Buffer (UNLOGGED tables)
+ ↓
+ ├──→ silver-realtime-transformer → PostgreSQL Silver Hot
+ │
+ ├──→ postgres-ducklake-flusher → DuckLake Bronze (S3/B2)
+ │
+ └──→ silver-cold-flusher → DuckLake Silver (S3/B2)
+
+stellar-query-api ←── queries both hot and cold storage
+```
+
+## High-Watermark Flush Pattern
+
+Data moves from hot to cold storage using a safe, idempotent pattern:
+
+1. **MARK**: Record the maximum ledger_sequence in hot storage
+2. **FLUSH**: Copy all data ≤ watermark to cold storage
+3. **DELETE**: Remove flushed data from hot storage
+4. **VACUUM**: Periodically reclaim space
+
+This ensures no data loss even if the process is interrupted.
+
+## Storage Characteristics
+
+### Hot Storage (PostgreSQL)
+
+- **Tables**: UNLOGGED for maximum write performance
+- **Retention**: ~10-20 minutes of recent data
+- **Query Latency**: ~100ms
+- **Purpose**: Real-time queries on recent data
+
+### Cold Storage (DuckLake)
+
+- **Format**: Parquet files on S3/B2
+- **Partitioning**: By ledger_range for efficient pruning
+- **Compression**: Snappy
+- **Query Latency**: ~2 seconds
+- **Purpose**: Historical queries and analytics
diff --git a/docs/lake/getting-started/quickstart.md b/docs/lake/getting-started/quickstart.md
new file mode 100644
index 0000000..40784ba
--- /dev/null
+++ b/docs/lake/getting-started/quickstart.md
@@ -0,0 +1,91 @@
+---
+sidebar_position: 1
+title: Quick Start
+displayed_sidebar: lake
+---
+
+# Lake quickstart
+
+Run three Lake queries in five minutes: account balances, token transfers, and Soroban contract activity.
+
+## Prerequisites
+
+- An Obsrvr API key from [Console](https://console.withobsrvr.com)
+- `curl`
+
+Set your environment:
+
+```bash
+export API_KEY="your-api-key"
+export BASE="https://gateway.withobsrvr.com/lake/v1/testnet"
+```
+
+All examples use testnet. Switch to mainnet by replacing `/testnet` with `/mainnet` when your key has mainnet access.
+
+## 1. Get an account's balances
+
+This returns native XLM plus trustline and token balances for a Stellar account.
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/accounts/GAIH3ULLFQ4DGSECF2AR555KZ4KNDGEKN4AFI4SU2M7B43MGK3QJZNSR/balances"
+```
+
+Use this for wallet portfolio views, account screens, and analyst lookups.
+
+## 2. Query USDC transfers
+
+Lake's silver transfer endpoint normalizes value movement so you do not have to join operations, effects, and SAC events yourself.
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/transfers?asset_code=USDC&limit=10"
+```
+
+Add an account filter when you need activity for one user:
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/transfers?asset_code=USDC&from_account=GAIH3ULLFQ4DGSECF2AR555KZ4KNDGEKN4AFI4SU2M7B43MGK3QJZNSR&limit=10"
+```
+
+## 3. Find active Soroban contracts
+
+This returns contracts ranked by recent activity.
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/contracts/top?period=24h&limit=10"
+```
+
+Use it for explorers, protocol monitoring, and contract discovery.
+
+## 4. Read contract events by topic
+
+If you know the event topic, query it directly. This example finds transfer events.
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/events/generic?topic0=transfer&limit=10"
+```
+
+This is the Lake version of starting from `getEvents`, but with access to the rest of the silver model when you need balances, transfers, accounts, and decoded transactions.
+
+## 5. Get a decoded transaction
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/tx/YOUR_TX_HASH/decoded"
+```
+
+Use the decoded transaction endpoint when you need a human-readable summary, balance diffs, or transaction context without parsing XDR.
+
+## What to use next
+
+| If you need | Read next |
+|-------------|-----------|
+| More examples | [Query Examples](/docs/lake/guides/query-examples) |
+| API parameters | [Lake API Reference](/docs/lake/api/overview) |
+| Medallion architecture | [Lake Overview](/docs/lake/overview) |
+| Custom pipelines | [Flow Overview](/docs/flow/overview) |
+| Horizon or Stellar RPC | [Gateway Overview](/docs/gateway/overview) |
diff --git a/docs/lake/guides/query-examples.md b/docs/lake/guides/query-examples.md
new file mode 100644
index 0000000..c309ad7
--- /dev/null
+++ b/docs/lake/guides/query-examples.md
@@ -0,0 +1,119 @@
+---
+sidebar_position: 1
+title: Query Examples
+displayed_sidebar: lake
+---
+
+# Lake query examples
+
+Copy-paste queries for common Stellar analysis tasks.
+
+```bash
+export API_KEY="your-api-key"
+export BASE="https://gateway.withobsrvr.com/lake/v1/testnet"
+```
+
+## Account balances
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/accounts/GAIH3ULLFQ4DGSECF2AR555KZ4KNDGEKN4AFI4SU2M7B43MGK3QJZNSR/balances"
+```
+
+Use this for wallet portfolio views and account investigations.
+
+## Current account state
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/accounts/current?account_id=GAIH3ULLFQ4DGSECF2AR555KZ4KNDGEKN4AFI4SU2M7B43MGK3QJZNSR"
+```
+
+Returns sequence number, XLM balance, subentry count, and last modified ledger.
+
+## Token transfers by asset
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/transfers?asset_code=USDC&limit=20"
+```
+
+Lake normalizes classic payments and Soroban/SAC transfers into one transfer model.
+
+## Token transfers by account
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/transfers?from_account=GAIH3ULLFQ4DGSECF2AR555KZ4KNDGEKN4AFI4SU2M7B43MGK3QJZNSR&asset_code=USDC&limit=20"
+```
+
+Use `to_account` instead of `from_account` for incoming transfers.
+
+## Top holders for an issued asset
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/assets/USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN/holders?limit=10"
+```
+
+Use this for supply concentration, holder reports, and token dashboards.
+
+## Top Soroban contracts
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/contracts/top?period=24h&limit=10"
+```
+
+Returns the most active contracts by recent activity.
+
+## Contract analytics
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/contracts/CAUGJT4GREIY3WHOUUU5RIUDGSPVREF5CDCYJOWMHOVT2GWQT5JEETGJ/analytics"
+```
+
+Use this when you need callers, callees, functions, and activity over time for one contract.
+
+## Contract events by topic
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/events/generic?topic0=transfer&limit=10"
+```
+
+This is useful when you know the CAP-67 or application topic you want.
+
+## Transaction summary
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/tx/YOUR_TX_HASH/decoded"
+```
+
+Use decoded transactions when you need a human-readable summary instead of raw XDR.
+
+## Search
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/search?q=USDC"
+```
+
+Search spans accounts, contracts, transactions, ledgers, and assets.
+
+## Point-in-time compliance balances
+
+```bash
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/gold/compliance/balances?asset_code=XLM×tamp=2026-01-12T23:59:59Z&limit=100"
+```
+
+Use gold compliance endpoints for defensible reporting with lineage.
+
+## Why not just use `getEvents`?
+
+Use `getEvents` when you want raw Soroban events and already know the exact contract, topic filters, and cursor model.
+
+Use Lake when you need the event plus context: accounts, token balances, transfer normalization, decoded transactions, contract analytics, and historical joins across Stellar classic and Soroban activity.
diff --git a/docs/lake/overview.md b/docs/lake/overview.md
new file mode 100644
index 0000000..3c8e353
--- /dev/null
+++ b/docs/lake/overview.md
@@ -0,0 +1,90 @@
+---
+sidebar_position: 1
+title: Overview
+displayed_sidebar: lake
+---
+
+# Obsrvr Lake
+
+Obsrvr Lake is a medallion-architecture data warehouse for Stellar. It stores decoded ledger data and exposes analytics-ready tables for token transfers, accounts, Soroban contracts, contract events, fees, and network metrics.
+
+Use Lake when you want the answer without building the indexer first.
+
+```bash
+export API_KEY="your-api-key"
+export BASE="https://gateway.withobsrvr.com/lake/v1/testnet"
+
+curl -H "Authorization: Api-Key $API_KEY" \
+ "$BASE/api/v1/silver/accounts/GAIH3ULLFQ4DGSECF2AR555KZ4KNDGEKN4AFI4SU2M7B43MGK3QJZNSR/balances"
+```
+
+## The medallion model
+
+```text
+Stellar ledger stream
+ │
+ ▼
+Bronze Raw decoded ledgers, transactions, operations, effects, trades, contract events
+ │
+ ▼
+Silver Normalized analytics tables for transfers, accounts, contracts, prices, events
+ │
+ ▼
+Gold Business-ready metrics for compliance, stablecoin volume, fees, and network health
+```
+
+| Layer | What it contains | Who uses it |
+|-------|------------------|-------------|
+| Bronze | Raw decoded Stellar data with full lineage | Teams that need auditability or custom derivations |
+| Silver | Pre-joined, normalized tables and API endpoints | Wallets, explorers, analysts, dashboards, protocols |
+| Gold | Curated business metrics and compliance outputs | Analysts, compliance teams, reporting workflows |
+
+## Why Lake exists
+
+Stellar data is not hard because ledgers are unavailable. It is hard because the useful answers are spread across transaction envelopes, operation results, effects, trustlines, contract events, SAC events, and Soroban diagnostic data.
+
+Lake turns those pieces into tables that match the questions teams ask:
+
+- token transfers by account, asset, issuer, or contract
+- account balances and historical snapshots
+- Soroban contract calls and call graphs
+- CAP-67 events by contract or topic
+- top contracts, holders, assets, and trading pairs
+- fee distributions and network health metrics
+- compliance archives and point-in-time balances
+
+## Silver tables to start with
+
+| Domain | Useful tables / endpoints | Typical question |
+|--------|---------------------------|------------------|
+| Accounts | `/silver/accounts/current`, `/silver/accounts/{id}/balances`, `/silver/accounts/{id}/activity` | What does this account hold and what has it done? |
+| Transfers | `/silver/transfers`, `/silver/tokens/{contract_id}/transfers` | What value moved between accounts? |
+| Contracts | `/silver/contracts/top`, `/silver/contracts/{id}/analytics` | Which Soroban contracts are active and who calls them? |
+| Events | `/silver/events`, `/silver/events/generic`, `/silver/events/by-contract` | What CAP-67 or raw events did this contract emit? |
+| Transactions | `/silver/tx/{hash}/decoded`, `/silver/tx/{hash}/full` | What happened in this transaction? |
+| Prices | `/silver/prices/pairs`, `/silver/prices/{base}/{counter}/latest` | What pairs trade and at what price? |
+| Gold compliance | `/gold/compliance/balances`, `/gold/compliance/lineage` | What balances existed at a point in time, with audit lineage? |
+
+## Hot and cold storage
+
+Lake uses hot storage for recent data and cold storage for full history. The API chooses the right layer and merges results.
+
+| Storage | Data range | Typical use |
+|---------|------------|-------------|
+| Hot | Recent ledgers | dashboards, fresh account state, new contract activity |
+| Cold | Full history in Parquet/DuckLake | historical scans, compliance reports, backfills |
+
+You do not choose hot or cold in the request. You query Lake once.
+
+## Compared to `getEvents`
+
+`getEvents` is useful when you already know the contract, topics, cursor, and event shape you want. It returns contract events.
+
+Lake is different. Lake keeps events, but also normalizes them into Stellar-native tables: transfers, token balances, account activity, contract analytics, decoded transactions, and compliance outputs. If you want to know who received USDC, which SAC transfer affected an account, or what a transaction did across classic and Soroban operations, Lake saves you the parsing layer.
+
+## Next steps
+
+- [Run your first Lake query](/docs/lake/getting-started/quickstart)
+- [Copy common query examples](/docs/lake/guides/query-examples)
+- [Review the Lake API reference](/docs/lake/api/overview)
+- [See the architecture](/docs/lake/architecture/overview)
diff --git a/docs/nodes/getting-started/quickstart.md b/docs/nodes/getting-started/quickstart.md
new file mode 100644
index 0000000..84ed0c6
--- /dev/null
+++ b/docs/nodes/getting-started/quickstart.md
@@ -0,0 +1,53 @@
+---
+sidebar_position: 1
+title: Quick Start
+displayed_sidebar: nodes
+---
+
+# Quick Start
+
+Get started with OBSRVR Nodes to deploy your dedicated Stellar infrastructure.
+
+## Prerequisites
+
+- An OBSRVR account ([sign up](https://console.withobsrvr.com))
+- A project that requires dedicated Stellar infrastructure
+
+## Provisioning a Node
+
+1. Log in to the [OBSRVR Console](https://console.withobsrvr.com)
+2. Navigate to **Nodes** in the sidebar
+3. Click **Create Node**
+4. Select your node type:
+ - **Horizon** - Full Stellar Horizon API
+ - **RPC** - Stellar RPC for Soroban smart contracts
+5. Configure your node settings
+6. Review pricing and confirm
+
+Your node will be provisioned within minutes.
+
+## Connecting to Your Node
+
+Once provisioned, you'll receive dedicated endpoints for your node:
+
+### Horizon Node
+
+```bash
+# Your dedicated Horizon endpoint
+curl "https://your-node-id.nodes.withobsrvr.com/ledgers?limit=10"
+```
+
+### RPC Node
+
+```bash
+# Your dedicated RPC endpoint
+curl -X POST "https://your-node-id.rpc.withobsrvr.com" \
+ -H "Content-Type: application/json" \
+ -d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
+```
+
+## Next Steps
+
+- Configure [Asset Whitelisting](/docs/nodes/guides/asset-whitelisting) to customize data retention
+- Review [Pricing](/docs/nodes/overview#pricing) details
+- Contact support for enterprise requirements
diff --git a/docs/nodes/guides/asset-whitelisting.md b/docs/nodes/guides/asset-whitelisting.md
new file mode 100644
index 0000000..13f4cdc
--- /dev/null
+++ b/docs/nodes/guides/asset-whitelisting.md
@@ -0,0 +1,48 @@
+---
+sidebar_position: 1
+title: Asset Whitelisting
+displayed_sidebar: nodes
+---
+
+# Asset Whitelisting
+
+Asset whitelisting lets you control which Stellar assets your dedicated OBSRVR Node retains in history. This helps reduce storage usage and keeps your node focused on the data your application needs.
+
+## When to Use Asset Whitelisting
+
+Use asset whitelisting when you want to:
+
+- Retain history only for specific assets
+- Reduce storage and indexing costs
+- Improve query performance for targeted workloads
+- Support compliance or reporting requirements for a known asset set
+
+## Configure a Whitelist
+
+1. Open the [OBSRVR Console](https://console.withobsrvr.com)
+2. Navigate to **Nodes**
+3. Select your node
+4. Open **Data Retention** or **Asset Whitelisting**
+5. Add the assets you want to retain
+6. Save the configuration
+
+## Asset Identifiers
+
+For Stellar assets, provide:
+
+- Asset code, such as `USDC`
+- Asset issuer account ID
+
+Native XLM does not require an issuer.
+
+## Example
+
+```text
+Asset code: USDC
+Issuer: GA5ZSEJYB37EA2QJ...EXAMPLE
+Network: mainnet
+```
+
+## Notes
+
+Changes may take time to apply depending on the current node state and the amount of retained history. Contact support if you need help planning a retention policy for production workloads.
diff --git a/docs/nodes/overview.md b/docs/nodes/overview.md
new file mode 100644
index 0000000..d0df02a
--- /dev/null
+++ b/docs/nodes/overview.md
@@ -0,0 +1,65 @@
+---
+sidebar_position: 1
+title: Overview
+displayed_sidebar: nodes
+---
+
+# OBSRVR Nodes
+
+OBSRVR Nodes provides dedicated Stellar infrastructure for your applications. Each node operates as an isolated instance with resources exclusively available to your workloads, ensuring enhanced security and consistent performance.
+
+## Key Features
+
+### Dedicated Instances
+
+Each OBSRVR Node operates as a dedicated instance, ensuring that resources are exclusively available to your applications. No noisy neighbors, no shared resources.
+
+### Asset Whitelisting
+
+Customize which assets your node will retain in history through an easy-to-use asset whitelisting feature. Keep only the data you need, reducing storage costs and improving query performance.
+
+### 24/7 Technical Support
+
+Round-the-clock assistance is available for node operation and management issues.
+
+## Available Infrastructure
+
+### Stellar Horizon
+
+Full Stellar Horizon API access with dedicated resources:
+- Complete transaction history
+- Account and ledger queries
+- Transaction submission
+- Customizable history retention
+
+### Stellar RPC (Soroban)
+
+Dedicated Stellar RPC endpoints for smart contract interactions:
+- Contract invocation
+- State queries
+- Event streaming
+- Simulation endpoints
+
+## Pricing
+
+OBSRVR Nodes uses **per-hour usage-based pricing**. You pay only for the compute resources consumed while your nodes are active, allowing cost-effective scaling as your application grows.
+
+- No long-term commitments
+- Cancel anytime without penalties
+- Scale up or down based on demand
+
+## Use Cases
+
+- **High-traffic applications** requiring dedicated resources
+- **Enterprise deployments** needing isolated infrastructure
+- **Custom data retention** with asset whitelisting
+- **Compliance requirements** requiring dedicated environments
+
+## Getting Started
+
+Visit the [OBSRVR Console](https://console.withobsrvr.com) to provision your first dedicated node, or contact us for enterprise requirements.
+
+## Next Steps
+
+- [Quick Start](/docs/nodes/getting-started/quickstart) - Provision your first node
+- [Asset Whitelisting](/docs/nodes/guides/asset-whitelisting) - Configure data retention
diff --git a/docs/products/index.md b/docs/products/index.md
deleted file mode 100644
index b89de0f..0000000
--- a/docs/products/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Create a doc page with rich content.
----
-
-# Hello from Docusaurus
-
-Are you ready to create the documentation site for your open source project?
-
-## Headers
-
-will show up on the table of contents on the upper right
-
-So that your users will know what this page is all about without scrolling down or even without reading too much.
-
-## Only h2 and h3 will be in the TOC by default.
-
-You can configure the TOC heading levels either per-document or in the theme configuration.
-
-The headers are well-spaced so that the hierarchy is clear.
-
-- lists will help you
-- present the key points
-- that you want your users to remember
- - and you may nest them
- - multiple times
\ No newline at end of file
diff --git a/docs/tutorial-basics/_category_.json b/docs/tutorial-basics/_category_.json
deleted file mode 100644
index 2e6db55..0000000
--- a/docs/tutorial-basics/_category_.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "label": "Tutorial - Basics",
- "position": 2,
- "link": {
- "type": "generated-index",
- "description": "5 minutes to learn the most important Docusaurus concepts."
- }
-}
diff --git a/docs/tutorial-basics/congratulations.md b/docs/tutorial-basics/congratulations.md
deleted file mode 100644
index 04771a0..0000000
--- a/docs/tutorial-basics/congratulations.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-sidebar_position: 6
----
-
-# Congratulations!
-
-You have just learned the **basics of Docusaurus** and made some changes to the **initial template**.
-
-Docusaurus has **much more to offer**!
-
-Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**.
-
-Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610)
-
-## What's next?
-
-- Read the [official documentation](https://docusaurus.io/)
-- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config)
-- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration)
-- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout)
-- Add a [search bar](https://docusaurus.io/docs/search)
-- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase)
-- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support)
diff --git a/docs/tutorial-basics/create-a-blog-post.md b/docs/tutorial-basics/create-a-blog-post.md
deleted file mode 100644
index 550ae17..0000000
--- a/docs/tutorial-basics/create-a-blog-post.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-sidebar_position: 3
----
-
-# Create a Blog Post
-
-Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed...
-
-## Create your first Post
-
-Create a file at `blog/2021-02-28-greetings.md`:
-
-```md title="blog/2021-02-28-greetings.md"
----
-slug: greetings
-title: Greetings!
-authors:
- - name: Joel Marcey
- title: Co-creator of Docusaurus 1
- url: https://github.com/JoelMarcey
- image_url: https://github.com/JoelMarcey.png
- - name: Sébastien Lorber
- title: Docusaurus maintainer
- url: https://sebastienlorber.com
- image_url: https://github.com/slorber.png
-tags: [greetings]
----
-
-Congratulations, you have made your first post!
-
-Feel free to play around and edit this post as much as you like.
-```
-
-A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings).
diff --git a/docs/tutorial-basics/create-a-document.md b/docs/tutorial-basics/create-a-document.md
deleted file mode 100644
index c22fe29..0000000
--- a/docs/tutorial-basics/create-a-document.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-sidebar_position: 2
----
-
-# Create a Document
-
-Documents are **groups of pages** connected through:
-
-- a **sidebar**
-- **previous/next navigation**
-- **versioning**
-
-## Create your first Doc
-
-Create a Markdown file at `docs/hello.md`:
-
-```md title="docs/hello.md"
-# Hello
-
-This is my **first Docusaurus document**!
-```
-
-A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello).
-
-## Configure the Sidebar
-
-Docusaurus automatically **creates a sidebar** from the `docs` folder.
-
-Add metadata to customize the sidebar label and position:
-
-```md title="docs/hello.md" {1-4}
----
-sidebar_label: 'Hi!'
-sidebar_position: 3
----
-
-# Hello
-
-This is my **first Docusaurus document**!
-```
-
-It is also possible to create your sidebar explicitly in `sidebars.js`:
-
-```js title="sidebars.js"
-export default {
- tutorialSidebar: [
- 'intro',
- // highlight-next-line
- 'hello',
- {
- type: 'category',
- label: 'Tutorial',
- items: ['tutorial-basics/create-a-document'],
- },
- ],
-};
-```
diff --git a/docs/tutorial-basics/create-a-page.md b/docs/tutorial-basics/create-a-page.md
deleted file mode 100644
index 20e2ac3..0000000
--- a/docs/tutorial-basics/create-a-page.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-sidebar_position: 1
----
-
-# Create a Page
-
-Add **Markdown or React** files to `src/pages` to create a **standalone page**:
-
-- `src/pages/index.js` → `localhost:3000/`
-- `src/pages/foo.md` → `localhost:3000/foo`
-- `src/pages/foo/bar.js` → `localhost:3000/foo/bar`
-
-## Create your first React Page
-
-Create a file at `src/pages/my-react-page.js`:
-
-```jsx title="src/pages/my-react-page.js"
-import React from 'react';
-import Layout from '@theme/Layout';
-
-export default function MyReactPage() {
- return (
-
-
My React page
-
This is a React page
-
- );
-}
-```
-
-A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page).
-
-## Create your first Markdown Page
-
-Create a file at `src/pages/my-markdown-page.md`:
-
-```mdx title="src/pages/my-markdown-page.md"
-# My Markdown page
-
-This is a Markdown page
-```
-
-A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page).
diff --git a/docs/tutorial-basics/deploy-your-site.md b/docs/tutorial-basics/deploy-your-site.md
deleted file mode 100644
index 1c50ee0..0000000
--- a/docs/tutorial-basics/deploy-your-site.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-sidebar_position: 5
----
-
-# Deploy your site
-
-Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**).
-
-It builds your site as simple **static HTML, JavaScript and CSS files**.
-
-## Build your site
-
-Build your site **for production**:
-
-```bash
-npm run build
-```
-
-The static files are generated in the `build` folder.
-
-## Deploy your site
-
-Test your production build locally:
-
-```bash
-npm run serve
-```
-
-The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/).
-
-You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**).
diff --git a/docs/tutorial-basics/markdown-features.mdx b/docs/tutorial-basics/markdown-features.mdx
deleted file mode 100644
index 35e0082..0000000
--- a/docs/tutorial-basics/markdown-features.mdx
+++ /dev/null
@@ -1,152 +0,0 @@
----
-sidebar_position: 4
----
-
-# Markdown Features
-
-Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**.
-
-## Front Matter
-
-Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/):
-
-```text title="my-doc.md"
-// highlight-start
----
-id: my-doc-id
-title: My document title
-description: My document description
-slug: /my-custom-url
----
-// highlight-end
-
-## Markdown heading
-
-Markdown text with [links](./hello.md)
-```
-
-## Links
-
-Regular Markdown links are supported, using url paths or relative file paths.
-
-```md
-Let's see how to [Create a page](/create-a-page).
-```
-
-```md
-Let's see how to [Create a page](./create-a-page.md).
-```
-
-**Result:** Let's see how to [Create a page](./create-a-page.md).
-
-## Images
-
-Regular Markdown images are supported.
-
-You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`):
-
-```md
-
-```
-
-
-
-You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them:
-
-```md
-
-```
-
-## Code Blocks
-
-Markdown code blocks are supported with Syntax highlighting.
-
-````md
-```jsx title="src/components/HelloDocusaurus.js"
-function HelloDocusaurus() {
- return
+ {['Get an API key', 'Query Lake', 'Use silver tables', 'Move to gold metrics'].map((title, i) =>
{i + 1}
{title}
{['Create a key in Console and send it as Authorization: Api-Key $API_KEY.', 'Start with a REST call against Lake testnet. No Horizon joins or XDR decoding.', 'Use analytics-ready tables for transfers, accounts, contract events, and Soroban calls.', 'When you need reporting, use gold datasets for stablecoin volumes, fee intelligence, and network health.'][i]}
)}
+
${active.install}
{Object.entries(LANGS).map(([id, l]) => )}
{highlight(active.code)}
+
+ ;
+}
+
+const products = [
+ ['layers', 'Obsrvr Lake', 'Decoded Stellar data, queryable. Bronze, silver, and gold tables for tokens, contracts, accounts, and network metrics.', '/docs/lake/overview', ['GET Silver API', 'SQL Lake tables', 'GET Gold metrics']],
+ ['zap', 'Flow', 'Custom data pipelines composed from processors and sinks. Deploy managed Stellar pipelines when Lake is not enough.', '/docs/flow/overview', ['YAML Pipelines', 'POST Sinks', 'GET Processors']],
+ ['terminal', 'Gateway', 'Drop-in Horizon and Stellar RPC access. Use it for network calls, submission, and SDK-compatible RPC.', '/docs/gateway/overview', ['RPC Stellar', 'GET Horizon', 'API Auth']],
+ ['rocket', 'Get Started', 'Pick your path: query Lake, run Flow, or test Gateway. Start with Lake unless you need raw infrastructure.', '/docs/intro', ['GET Intro', 'GET Quickstart', 'GET Pricing']],
+];
+
+function Products() {
+ return
;
}
-function HomepageFeatures() {
- const features = [
- {
- title: "What is Obsrvr?",
- description: "Learn about our Web3 development platform for Stellar and Soroban networks",
- link: "/docs/intro",
- icon: "🌐",
- gradient: styles.gradientBlue,
- },
- {
- title: "Gateway Services",
- description: "Connect to Stellar Horizon and Soroban RPC with enterprise-grade reliability",
- link: "/docs/gateway/overview",
- icon: "🔌",
- gradient: styles.gradientPurple,
- },
- {
- title: "Flow Pipelines",
- description: "Build data pipelines to process blockchain events with one-click deployment",
- link: "/docs/flow/overview",
- icon: "🔄",
- gradient: styles.gradientGreen,
- },
- {
- title: "Get Started",
- description: "Create your first Flow pipeline and start processing blockchain data",
- link: "/docs/flow/getting-started/quickstart",
- icon: "🚀",
- gradient: styles.gradientOrange,
- },
- ];
-
- return (
-
-
-
- {features.map((feature, idx) => (
-
- ))}
-
-
-
- );
+const guides = [
+ [IL.layers, 'Query token transfers', 'Get classic payments and SAC transfers from one Lake silver endpoint.', 'Lake · 3 min read', '/docs/lake/guides/query-examples'],
+ [IL.book, 'Understand bronze, silver, and gold', 'How raw decoded ledger data becomes analytics tables and business metrics.', 'Lake · 5 min read', '/docs/lake/overview'],
+ [IL.search, 'Start with the Lake quickstart', 'Run your first account, transfer, and contract-event queries.', 'Lake · 5 min read', '/docs/lake/getting-started/quickstart'],
+ [IL.zap, 'Build a custom Flow pipeline', 'Use Flow when you need your own processors and sinks.', 'Flow · 7 min read', '/docs/flow/overview'],
+ [IL.terminal, 'Use Gateway endpoints', 'Horizon and Stellar RPC URLs, auth, and SDK-compatible examples.', 'Gateway · 4 min read', '/docs/gateway/overview'],
+ [IL.key, 'Create an API key in Console', 'Console manages keys, subscriptions, and Obsrvr resources.', 'Console · 3 min read', 'https://console.withobsrvr.com'],
+];
+
+function Guides() {
+ return
+ {
+ // Mobile sidebar should only be closed if the category has a link
+ if (item.type === 'category' && item.href) {
+ mobileSidebar.toggle();
+ }
+ if (item.type === 'link') {
+ mobileSidebar.toggle();
+ }
+ }}
+ level={1}
+ />
+