Skip to content

Optional integration keys

Scani’s integrations are independently unlockable. A missing key causes the corresponding tRPC route to return PRECONDITION_FAILED at call-time; nothing else breaks. You can enable integrations one at a time as you obtain keys.

All of these are read by the data-provider, not by the api or worker. In Tier 1, that’s the data-provider on your compose network; in Tier 2/3, the hosted data-provider has its own copies and the user-side .env doesn’t need them.

VariableProviderWhat it unlocks
COINGECKO_API_KEYCoinGeckoPaid-tier crypto prices (current + historical). Without a key, falls back to the public CoinGecko tier (rate-limited).
FINNHUB_API_KEYFinnhubPublic-equity prices (NYSE, NASDAQ, LSE, …).

Note: fiat / FX pricing uses Frankfurter, which requires no key.

VariableProviderWhat it unlocks
OPENAI_API_KEYOpenAIScreenshot import via Vision. Without a key, screenshot upload is disabled.
OPENAI_VISION_MODELOpenAIWhich model to use. Default gpt-4o.
PERPLEXITY_API_KEYPerplexityToken-identity backfill enrichment. Optional — backfill works without it via other providers.
DEEPSEEK_API_KEYDeepSeekToken-identity backfill enrichment. Optional.
VariableProviderWhat it unlocks
ETHERSCAN_API_KEYEtherscan V2EVM wallet balances + transactions for every EVM chain V2 supports — Ethereum, Polygon, Arbitrum, Optimism, Base, BNB, etc. One key covers all of them.
HELIUS_API_KEYHeliusSolana balances and SPL token transactions.

Bitcoin, Tron, TON, and ENS resolution use public RPCs without key requirements. The provider implementations live in packages/clients/providers/src/providers/.

Most exchanges use API-key + secret credentials the user pastes into the app. Binance is the exception — it uses OAuth, which requires operator-side configuration:

VariableWhat it does
BINANCE_OAUTH_CLIENT_IDIssued when you register your deployment with Binance.
BINANCE_OAUTH_CLIENT_SECRETIssued alongside the client ID.
BINANCE_OAUTH_REDIRECT_URIThe callback URL Binance will redirect to after the user authorises. Must match what you register with Binance, e.g. https://api.scani.example.com/auth/binance/callback.

Without these set, the Binance integration is unavailable; every other exchange continues to work via the standard API-key flow.

VariableWhat it does
SENTRY_DSNServer-side error tracking. No DSN = SDK no-op; nothing is sent.
SENTRY_ENVIRONMENTOptional tag (production, staging).
SENTRY_RELEASEOptional release identifier.
VITE_SENTRY_DSNBrowser-side error tracking.
VITE_SENTRY_ENABLEDSet to true to enable client-side reporting.

Payloads are passed through packages/business/shared/src/utils/sentry-scrubber.ts before send, which strips credentials / tokens / known PII.

Cloud-management (Tier 2/3 hosted data-provider only)

Section titled “Cloud-management (Tier 2/3 hosted data-provider only)”

Ignored in Tier 1 single-tenant mode.

VariableWhat it does
CLOUD_MANAGEMENT_ENABLEDTurns on the cloud-management surface on the data-provider — DB-backed API keys, Better-Auth cookie sessions for a management console, per-request metering.
BETTER_AUTH_URLPublic URL of the data-provider (used for cookie scope on the management console).
CLOUD_FRONTEND_ORIGINOrigin of the cloud-management console (for CORS).

Each tRPC route that depends on a provider returns PRECONDITION_FAILED with a message naming the missing env var:

{ "error": { "code": "PRECONDITION_FAILED",
"message": "OPENAI_API_KEY is not configured" } }

The SPA renders these as a soft empty-state in the UI rather than a crash.