# Raydium LP Dashboard Public API > Read-only Solana pool data and resumable WebSocket signals for monitored Raydium CLMM and Orca Whirlpool positions. No API key or ADMIN_PASSWORD is required. ## Documentation - [Human-readable API reference](/docs): Server-rendered reference, endpoint index, request/response examples and error codes. - [Complete API reference (Markdown)](/docs/api.md): Canonical field semantics for all five public endpoints, including position.opened, position.increased, position.decreased and position.closed. - [OpenAPI 3.1 schema (YAML)](/docs/openapi.yaml): HTTP contracts and x-websocket message schemas. Ordinary HTTP clients do not implement the WebSocket protocol. - [Complete context in one request](/llms-full.txt): Full Markdown reference, OpenAPI schema and runnable Node.js subscriber. - [Node.js subscriber example](/docs/examples/subscribe-position-openings.mjs): Ordered message handling, durable cursor and reconnect logic; prints signals only. ## Integration facts - Resolve relative links against this document's origin. Use the same origin for HTTPS API calls and WSS subscriptions. Replace https://your-dashboard.example.com in examples with that deployed origin. - GET /api/public/pools: directory; dex=raydium|orca|meteora (default raydium). - GET /api/public/pools/volume and GET /api/public/pools/{poolId}/volume: captured USD volume/fees; dex=raydium|orca, interval=1m|5m|1h|24h. Meteora volume is not supported. - WS /api/public/pool-creations/ws: Raydium CLMM pool creation events. Separate feed and cursor from position events. - WS /api/public/position-openings/ws?creator=ADDRESS&dex=all: original-owner position.opened, position.increased, position.decreased and position.closed signals in existing monitored pools only, not every pool or all wallet activity. dex=all|raydium|orca. Repeat creator=ADDRESS_A&creator=ADDRESS_B to subscribe to 1–100 addresses on one socket; no comma-separated query values. Duplicate addresses are deduplicated; the 100-parameter limit is checked before deduplication. ready.creators is the sorted unique array; legacy ready.creator is the sole address or null for multiple addresses. Each data.creator remains one event owner. - WebSockets are RFC 6455, not SSE, Socket.IO or Solana logsSubscribe. Query parameters subscribe at handshake; do not send JSON subscribe messages. - after is an exclusive publication cursor string, not a slot. Omit for live-only; after=0 replays retained history. Save ready.cursor, not ready.latestCursor. Commit events in order and deduplicate by eventId before advancing checkpoint.cursor. - Position feed retains ten days of signals. Close matching requires a retained position with a known original owner. 409 means cursor ahead; 410 means expired position cursor. All selected addresses share one publication-ordered cursor. Bind cursors to feed, origin, sorted unique address set and DEX. To change the set, reconnect with new subscription state (live-only or explicit after=0 replay with deduplication); do not merge old per-address cursors by taking their maximum. No dynamic subscribe/unsubscribe messages. - Copy raw tickLower/tickUpper in chain token A/B order. tokenA.amountRaw and tokenB.amountRaw are decimal integer strings; use BigInt/BN, not floating point. Display prices may be reversed or ScaledUiAmount-adjusted. amountUsd is an estimate, not an execution quote. - Initial funding is position.opened only. Subsequent liquidity adds/removes emit position.increased/position.decreased, sharing the same cursor. liquidityDelta is an unsigned u128 string, not remaining liquidity or a ratio; direction comes from type. token amounts are raw u64 strings; feeAmountRaw is separate collected Raydium fees, transferFeeRaw can be null on legacy logs. Fee-only collections are not decreases. A same-transaction decrease followed by closing that exact position emits only position.closed; decreases on other positions remain. Handle both new types before checkpointing. Changes require a retained opening with a known original owner. - Map position.closed.openingEventId to the copied position. creator stays the original owner; it is not necessarily the close signer. Partial liquidity withdrawal and local retention expiry are not close signals. - Signals use confirmed commitment. Construct transactions with current DEX state, quotes, token transfer fees and caller-selected slippage. The service does not sign or place orders.