{"openapi":"3.0.3","info":{"title":"Bitculator Data API","description":"Programmatic access to Bitculator market data: coins, prices, history, exchanges, trust scores, tickers, pairs, wallets, sentiment, technical indicators, liquidations, editorial content, and calculators.","version":"1.0.0"},"servers":[{"url":"https://bitculator.com"}],"tags":[{"name":"Coins","description":"\nRanked coin and token market data: paginated listings, single-coin detail, movers\n(gainers/losers), recently-added, trending, and per-coin time series. Prices,\nmarketcap and supply are decimal STRINGS (floats can't carry market precision);\npercentage changes, ranks and counts are numbers."},{"name":"Prices","description":"\nThe lightweight price hot path — current price, marketcap, 24h volume and recent\nchanges for a requested set of coins. `/prices` requires a selector (ids, slugs or\nsymbols); `/prices/{slug}` targets one coin. Optionally `convert` into a fiat\ncurrency (crypto prices refresh ~every minute, fiat FX ~twice daily). Prices and\nmarketcap are decimal strings."},{"name":"Markets","description":"\nTickers (per-exchange markets) and pairs (venue-aggregated markets), plus a coin's\nmarkets and raw per-exchange trading symbols. All of it is snapshot data — no\nper-ticker/pair history exists. USD volumes are numbers; prices are decimal strings."},{"name":"Exchanges","description":"\nExchange rankings, detail, trust scores, time series and per-exchange market/coin\nlistings. Volumes are USD. There is no CEX/DEX column — `type` is derived from the\nexchange taxonomy, so it can be \"cex\", \"dex\" or null."},{"name":"Wallets","description":"\nCrypto wallet reviews — review `score`, supported-asset count, pros/cons counts,\nprice model and release date, plus a grouped tag taxonomy on detail/compare\nresponses. `meta.top_score` is the highest score across all wallets (use it to\nnormalize scores into a 0–1 range)."},{"name":"Global Market","description":"\nMarket-wide aggregates — total marketcap and volume, asset/exchange/pair/market\ncounts, BTC/ETH dominance with a rank-based top-3, the market Fear & Greed reading,\nplus a top-100 heatmap and marketcap/volume history."},{"name":"Sentiment","description":"\nMarket and per-coin sentiment indices. Fear & Greed and Bull/Bear are\n15-minute-refresh SNAPSHOTS — only the current reading exists, there is no time\nseries for them. Altseason carries full daily history. `indicators` is the\nmarket-wide technical tally."},{"name":"Indicators","description":"\nPer-coin technical indicators. Each indicator is its own dedicated endpoint —\nmomentum oscillators (RSI, Stoch-RSI, CCI, MFI, Williams %R), trend and price\nbaselines (SMA, MACD, VWAP), volume flow (OBV, CMF), trend strength (ADX) and\nvolatility — plus a single multi-indicator snapshot. Every family is a DAILY\nseries computed from daily candles (full retention; young assets return leading\nwarm-up `null`s until enough history exists). Price-scale families (SMA, VWAP,\nMACD, OBV) emit decimal strings; bounded oscillators emit numbers. A few\nlong-window periods require a paid plan — noted on each endpoint."},{"name":"Liquidations","description":"\nDerivatives liquidations. Source coverage is currently OKX swap markets only\n(stated in every `meta.note`). The RAW feed (the `/liquidations` list and the\nhourly breakdown) is pruned after ~48 hours; daily rollups are kept forever.\nToday's aggregates are partial and update every ~15 minutes."},{"name":"Conversion","description":"\nConvert between any two active assets (crypto AND fiat), and list the currencies\nusable as conversion legs. Values are decimal strings. Fiat FX rates refresh\n~twice daily; crypto rates ~every minute."},{"name":"Calculators","description":"\nServer-side financial calculators mirroring the web tools: DCA, profit/loss and\nloan (which read cached market data), plus stateless compound-interest and staking\nmath."},{"name":"Editorial","description":"\nEditorial articles — published (ACTIVE) only. `locale` picks the content language\nwith per-field English fallback (the payload reports which `locale` actually won).\nArticles can be filtered by tag or by a related coin/exchange/wallet slug. API\nreads deliberately do NOT increment view counts."},{"name":"Alarms","description":"\nPrice-alarm CRUD — the same alarms the web app manages. Alarms consume the key\nowner's alarm inventory balance, are TARGET-type on coins only, and an above/below\nvs current-value guard blocks alarms that would self-trigger instantly. Key-scoped\n(the API key sets the owner) and never response-cached."},{"name":"Webhooks","description":"\nBitculator POSTs each event as JSON with an HMAC signature header:\n\n X-Bitculator-Signature: t=,v1=.\", secret)>\n X-Bitculator-Event: alarm.triggered\n\nVerify it by recomputing the HMAC over \".\" with your\nendpoint secret and comparing in constant time; reject if `t` is older than a\nfew minutes (replay guard). Example (PHP):\n\n [$t, $v1] = sscanf($_SERVER['HTTP_X_BITCULATOR_SIGNATURE'], 't=%d,v1=%s');\n $expected = hash_hmac('sha256', $t.'.'.file_get_contents('php://input'), $secret);\n abort_unless(hash_equals($expected, $v1) && abs(time() - $t) < 300, 403);\n\nSupported events: `alarm.triggered`. Deliveries retry 3× with backoff; an\nendpoint auto-disables after 10 consecutive failed deliveries."},{"name":"Meta","description":"\nAPI meta and introspection: an authenticated ping to verify a key and the\nmiddleware stack, current-key usage/quota, and the machine-readable OpenAPI spec."}],"components":{"securitySchemes":{"default":{"type":"http","scheme":"bearer","description":"Create a Data API key in your developer console — keys are Bearer-only and carry the data-api ability. Keep them server-side; they are never meant for client-side embedding."}}},"security":[{"default":[]}],"paths":{"/api/v1/coins":{"get":{"summary":"List coins","operationId":"listCoins","description":"Ranked coins with prices, filters and selectors, paginated with Laravel's\n`links` + `meta` envelope. Prices, marketcap and circulating_supply are decimal\nstrings; changes and ranks are numbers.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"type","description":"Restrict to a single asset type: coin or token.","example":"coin","required":false,"schema":{"type":"string","description":"Restrict to a single asset type: coin or token.","example":"coin","enum":["coin","token"],"nullable":true}},{"in":"query","name":"status","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","required":false,"schema":{"type":"string","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","enum":["active","delisted","untracked","progressing","awaiting","preparing"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","nullable":true}},{"in":"query","name":"min_price","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"required":false,"schema":{"type":"number","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"nullable":true}},{"in":"query","name":"max_price","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"required":false,"schema":{"type":"number","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"nullable":true}},{"in":"query","name":"min_marketcap","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_marketcap","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"nullable":true}},{"in":"query","name":"min_volume","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"ids","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","required":false,"schema":{"type":"string","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","nullable":true}},{"in":"query","name":"slugs","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","required":false,"schema":{"type":"string","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","nullable":true}},{"in":"query","name":"symbols","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","required":false,"schema":{"type":"string","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","nullable":true}},{"in":"query","name":"sort","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","required":false,"schema":{"type":"string","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","nullable":true}},{"in":"query","name":"interval","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","required":false,"schema":{"type":"string","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","enum":["24h","7d"],"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":38,"slug":"bitcoin","name":"Bitcoin","symbol":"BTC","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"volume_24h":5345161962,"change_24h":1.35,"change_7d":4.98,"change_rank_24h":0,"change_rank_7d":0,"circulating_supply":"19909179","logo":"https://bitculator.com/storage/media/logo/bitcoin.png","listed_at":"2025-03-15T17:00:43+00:00","last_updated":"2026-06-27T10:34:17+00:00"}],"links":{"first":"https://bitculator.com/api/v1/coins?page=1","last":"https://bitculator.com/api/v1/coins?page=3","prev":null,"next":"https://bitculator.com/api/v1/coins?page=2"},"meta":{"current_page":1,"from":1,"last_page":3,"per_page":50,"to":50,"total":134}},"properties":{"data":{"type":"array","example":[{"id":38,"slug":"bitcoin","name":"Bitcoin","symbol":"BTC","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"volume_24h":5345161962,"change_24h":1.35,"change_7d":4.98,"change_rank_24h":0,"change_rank_7d":0,"circulating_supply":"19909179","logo":"https://bitculator.com/storage/media/logo/bitcoin.png","listed_at":"2025-03-15T17:00:43+00:00","last_updated":"2026-06-27T10:34:17+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":38},"slug":{"type":"string","example":"bitcoin"},"name":{"type":"string","example":"Bitcoin"},"symbol":{"type":"string","example":"BTC"},"rank":{"type":"integer","example":1},"price":{"type":"string","example":"63520.780763913"},"marketcap":{"type":"number","example":1264646594448.5},"volume_24h":{"type":"integer","example":5345161962},"change_24h":{"type":"number","example":1.35},"change_7d":{"type":"number","example":4.98},"change_rank_24h":{"type":"integer","example":0},"change_rank_7d":{"type":"integer","example":0},"circulating_supply":{"type":"string","example":"19909179"},"logo":{"type":"string","example":"https://bitculator.com/storage/media/logo/bitcoin.png"},"listed_at":{"type":"string","example":"2025-03-15T17:00:43+00:00"},"last_updated":{"type":"string","example":"2026-06-27T10:34:17+00:00"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"https://bitculator.com/api/v1/coins?page=1"},"last":{"type":"string","example":"https://bitculator.com/api/v1/coins?page=3"},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":"https://bitculator.com/api/v1/coins?page=2"}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":3},"per_page":{"type":"integer","example":50},"to":{"type":"integer","example":50},"total":{"type":"integer","example":134}}}}}}}},"422":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"validation","message":"The request parameters are invalid.","details":{"errors":{"per_page":["The per page must not be greater than 250."]}}}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"validation"},"message":{"type":"string","example":"The request parameters are invalid."},"details":{"type":"object","properties":{"errors":{"type":"object","properties":{"per_page":{"type":"array","example":["The per page must not be greater than 250."],"items":{"type":"string"}}}}}}}}}}}}}},"tags":["Coins"]}},"/api/v1/coins/recently-added":{"get":{"summary":"Recently added coins","operationId":"recentlyAddedCoins","description":"Newest listings — sorted by status_updated_at (the went-active timestamp;\ncreated_at is the crawl date, which predates listing by arbitrary amounts).\nSame row shape and pagination envelope as `List coins`.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"type","description":"Restrict to a single asset type: coin or token.","example":"coin","required":false,"schema":{"type":"string","description":"Restrict to a single asset type: coin or token.","example":"coin","enum":["coin","token"],"nullable":true}},{"in":"query","name":"status","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","required":false,"schema":{"type":"string","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","enum":["active","delisted","untracked","progressing","awaiting","preparing"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","nullable":true}},{"in":"query","name":"min_price","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"required":false,"schema":{"type":"number","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"nullable":true}},{"in":"query","name":"max_price","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"required":false,"schema":{"type":"number","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"nullable":true}},{"in":"query","name":"min_marketcap","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_marketcap","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"nullable":true}},{"in":"query","name":"min_volume","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"ids","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","required":false,"schema":{"type":"string","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","nullable":true}},{"in":"query","name":"slugs","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","required":false,"schema":{"type":"string","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","nullable":true}},{"in":"query","name":"symbols","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","required":false,"schema":{"type":"string","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","nullable":true}},{"in":"query","name":"sort","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","required":false,"schema":{"type":"string","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","nullable":true}},{"in":"query","name":"interval","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","required":false,"schema":{"type":"string","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","enum":["24h","7d"],"nullable":true}}],"responses":[],"tags":["Coins"]}},"/api/v1/coins/gainers":{"get":{"summary":"Top gainers","operationId":"topGainers","description":"Biggest positive movers over the `interval` window (24h default, or 7d). Same row\nshape and pagination envelope as `List coins`.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"type","description":"Restrict to a single asset type: coin or token.","example":"coin","required":false,"schema":{"type":"string","description":"Restrict to a single asset type: coin or token.","example":"coin","enum":["coin","token"],"nullable":true}},{"in":"query","name":"status","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","required":false,"schema":{"type":"string","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","enum":["active","delisted","untracked","progressing","awaiting","preparing"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","nullable":true}},{"in":"query","name":"min_price","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"required":false,"schema":{"type":"number","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"nullable":true}},{"in":"query","name":"max_price","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"required":false,"schema":{"type":"number","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"nullable":true}},{"in":"query","name":"min_marketcap","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_marketcap","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"nullable":true}},{"in":"query","name":"min_volume","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"ids","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","required":false,"schema":{"type":"string","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","nullable":true}},{"in":"query","name":"slugs","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","required":false,"schema":{"type":"string","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","nullable":true}},{"in":"query","name":"symbols","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","required":false,"schema":{"type":"string","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","nullable":true}},{"in":"query","name":"sort","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","required":false,"schema":{"type":"string","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","nullable":true}},{"in":"query","name":"interval","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","required":false,"schema":{"type":"string","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","enum":["24h","7d"],"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":38,"slug":"bitcoin","name":"Bitcoin","symbol":"BTC","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"volume_24h":5345161962,"change_24h":1.35,"change_7d":4.98,"change_rank_24h":0,"change_rank_7d":0,"circulating_supply":"19909179","logo":"https://bitculator.com/storage/media/logo/bitcoin.png","listed_at":"2025-03-15T17:00:43+00:00","last_updated":"2026-06-27T10:34:17+00:00"}],"links":{"first":"https://bitculator.com/api/v1/coins/gainers?page=1","last":"https://bitculator.com/api/v1/coins/gainers?page=2","prev":null,"next":"https://bitculator.com/api/v1/coins/gainers?page=2"},"meta":{"current_page":1,"from":1,"last_page":2,"per_page":50,"to":50,"total":89}},"properties":{"data":{"type":"array","example":[{"id":38,"slug":"bitcoin","name":"Bitcoin","symbol":"BTC","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"volume_24h":5345161962,"change_24h":1.35,"change_7d":4.98,"change_rank_24h":0,"change_rank_7d":0,"circulating_supply":"19909179","logo":"https://bitculator.com/storage/media/logo/bitcoin.png","listed_at":"2025-03-15T17:00:43+00:00","last_updated":"2026-06-27T10:34:17+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":38},"slug":{"type":"string","example":"bitcoin"},"name":{"type":"string","example":"Bitcoin"},"symbol":{"type":"string","example":"BTC"},"rank":{"type":"integer","example":1},"price":{"type":"string","example":"63520.780763913"},"marketcap":{"type":"number","example":1264646594448.5},"volume_24h":{"type":"integer","example":5345161962},"change_24h":{"type":"number","example":1.35},"change_7d":{"type":"number","example":4.98},"change_rank_24h":{"type":"integer","example":0},"change_rank_7d":{"type":"integer","example":0},"circulating_supply":{"type":"string","example":"19909179"},"logo":{"type":"string","example":"https://bitculator.com/storage/media/logo/bitcoin.png"},"listed_at":{"type":"string","example":"2025-03-15T17:00:43+00:00"},"last_updated":{"type":"string","example":"2026-06-27T10:34:17+00:00"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"https://bitculator.com/api/v1/coins/gainers?page=1"},"last":{"type":"string","example":"https://bitculator.com/api/v1/coins/gainers?page=2"},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":"https://bitculator.com/api/v1/coins/gainers?page=2"}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":2},"per_page":{"type":"integer","example":50},"to":{"type":"integer","example":50},"total":{"type":"integer","example":89}}}}}}}}},"tags":["Coins"]}},"/api/v1/coins/losers":{"get":{"summary":"Top losers","operationId":"topLosers","description":"Biggest negative movers over the `interval` window (24h default, or 7d). Same row\nshape and pagination envelope as `List coins`.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"type","description":"Restrict to a single asset type: coin or token.","example":"coin","required":false,"schema":{"type":"string","description":"Restrict to a single asset type: coin or token.","example":"coin","enum":["coin","token"],"nullable":true}},{"in":"query","name":"status","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","required":false,"schema":{"type":"string","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","enum":["active","delisted","untracked","progressing","awaiting","preparing"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","nullable":true}},{"in":"query","name":"min_price","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"required":false,"schema":{"type":"number","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"nullable":true}},{"in":"query","name":"max_price","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"required":false,"schema":{"type":"number","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"nullable":true}},{"in":"query","name":"min_marketcap","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_marketcap","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"nullable":true}},{"in":"query","name":"min_volume","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"ids","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","required":false,"schema":{"type":"string","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","nullable":true}},{"in":"query","name":"slugs","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","required":false,"schema":{"type":"string","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","nullable":true}},{"in":"query","name":"symbols","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","required":false,"schema":{"type":"string","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","nullable":true}},{"in":"query","name":"sort","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","required":false,"schema":{"type":"string","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","nullable":true}},{"in":"query","name":"interval","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","required":false,"schema":{"type":"string","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","enum":["24h","7d"],"nullable":true}}],"responses":[],"tags":["Coins"]}},"/api/v1/coins/trending":{"get":{"summary":"Trending coins","operationId":"trendingCoins","description":"The most-viewed coins right now, ranked by view `score`. A compact projection\n(no pagination): id, slug, name, symbol, rank, price (decimal string), marketcap,\nlogo and score.","parameters":[{"in":"query","name":"limit","description":"How many trending coins to return (1–20, default 10).","example":10,"required":false,"schema":{"type":"integer","description":"How many trending coins to return (1–20, default 10).","example":10,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":38,"slug":"bitcoin","name":"Bitcoin","symbol":"BTC","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"logo":"https://bitculator.com/storage/media/logo/bitcoin.png","score":2}]},"properties":{"data":{"type":"array","example":[{"id":38,"slug":"bitcoin","name":"Bitcoin","symbol":"BTC","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"logo":"https://bitculator.com/storage/media/logo/bitcoin.png","score":2}],"items":{"type":"object","properties":{"id":{"type":"integer","example":38},"slug":{"type":"string","example":"bitcoin"},"name":{"type":"string","example":"Bitcoin"},"symbol":{"type":"string","example":"BTC"},"rank":{"type":"integer","example":1},"price":{"type":"string","example":"63520.780763913"},"marketcap":{"type":"number","example":1264646594448.5},"logo":{"type":"string","example":"https://bitculator.com/storage/media/logo/bitcoin.png"},"score":{"type":"integer","example":2}}}}}}}}}},"tags":["Coins"]}},"/api/v1/coins/{slug}":{"get":{"summary":"Get coin detail","operationId":"getCoinDetail","description":"Full single-coin profile. Beyond the list fields it adds: `supply`\n(circulating/total/max), `today` OHLC, `all_time_high` / `all_time_low` (price,\ndate and percent_from the current price), `fully_diluted_valuation`, market\n`counts` (exchanges/pairs/tickers/wallets), `decimals`, `genesis_date`, official\n`links` (typed url list), token `contracts`, and a localized HTML `description`\n(falls back to English when the requested locale is missing). All price/supply\nfields are decimal strings.","parameters":[{"in":"query","name":"locale","description":"Content language for the description (falls back to English).","example":"en","required":false,"schema":{"type":"string","description":"Content language for the description (falls back to English).","example":"en","nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"id":38,"slug":"bitcoin","name":"Bitcoin","symbol":"BTC","type":"coin","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"fully_diluted_valuation":1333936396042.2,"volume_24h":5345161962,"change_24h":1.35,"change_7d":4.98,"change_rank_24h":0,"change_rank_7d":0,"supply":{"circulating":"19909179","total":"19970852","max":"21000000"},"today":{"open":"63408.100996475","high":"63640.608639825","low":"62798.732107749","close":"63520.780763913"},"all_time_high":{"price":"125881.21309073","date":"2025-10-06","percent_from":-49.54},"all_time_low":{"price":"0.099","date":"2010-10-12","percent_from":64162304.81},"counts":{"exchanges":11,"pairs":92,"tickers":211,"wallets":206},"decimals":8,"genesis_date":"2009-01-03","description":"

Bitcoin is a decentralized digital currency…

","links":[{"type":"website","url":"https://bitcoin.org/en/"},{"type":"whitepaper","url":"https://bitcoin.org/bitcoin.pdf"}],"contracts":[],"logo":"https://bitculator.com/storage/media/logo/bitcoin.png","last_updated":"2026-06-27T10:34:17+00:00"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":38},"slug":{"type":"string","example":"bitcoin"},"name":{"type":"string","example":"Bitcoin"},"symbol":{"type":"string","example":"BTC"},"type":{"type":"string","example":"coin"},"rank":{"type":"integer","example":1},"price":{"type":"string","example":"63520.780763913"},"marketcap":{"type":"number","example":1264646594448.5},"fully_diluted_valuation":{"type":"number","example":1333936396042.2},"volume_24h":{"type":"integer","example":5345161962},"change_24h":{"type":"number","example":1.35},"change_7d":{"type":"number","example":4.98},"change_rank_24h":{"type":"integer","example":0},"change_rank_7d":{"type":"integer","example":0},"supply":{"type":"object","properties":{"circulating":{"type":"string","example":"19909179"},"total":{"type":"string","example":"19970852"},"max":{"type":"string","example":"21000000"}}},"today":{"type":"object","properties":{"open":{"type":"string","example":"63408.100996475"},"high":{"type":"string","example":"63640.608639825"},"low":{"type":"string","example":"62798.732107749"},"close":{"type":"string","example":"63520.780763913"}}},"all_time_high":{"type":"object","properties":{"price":{"type":"string","example":"125881.21309073"},"date":{"type":"string","example":"2025-10-06"},"percent_from":{"type":"number","example":-49.54}}},"all_time_low":{"type":"object","properties":{"price":{"type":"string","example":"0.099"},"date":{"type":"string","example":"2010-10-12"},"percent_from":{"type":"number","example":64162304.81}}},"counts":{"type":"object","properties":{"exchanges":{"type":"integer","example":11},"pairs":{"type":"integer","example":92},"tickers":{"type":"integer","example":211},"wallets":{"type":"integer","example":206}}},"decimals":{"type":"integer","example":8},"genesis_date":{"type":"string","example":"2009-01-03"},"description":{"type":"string","example":"

Bitcoin is a decentralized digital currency…

"},"links":{"type":"array","example":[{"type":"website","url":"https://bitcoin.org/en/"},{"type":"whitepaper","url":"https://bitcoin.org/bitcoin.pdf"}],"items":{"type":"object","properties":{"type":{"type":"string","example":"website"},"url":{"type":"string","example":"https://bitcoin.org/en/"}}}},"contracts":{"type":"array","example":[]},"logo":{"type":"string","example":"https://bitculator.com/storage/media/logo/bitcoin.png"},"last_updated":{"type":"string","example":"2026-06-27T10:34:17+00:00"}}}}}}}},"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"Coin not found."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Coin not found."}}}}}}}}},"tags":["Coins"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/history":{"get":{"summary":"Candle history","operationId":"candleHistory","description":"Per-coin OHLC + volume + marketcap time series. Pick `interval`: minutely,\nhalf-hourly, hourly or daily. Retention is a hard property of the rollup\npipeline — minutely 8 days, half-hourly 3 months, hourly 6 months, daily forever;\nrequests beyond a window return what exists. When a `limit` is set you get the\nMOST RECENT N rows in the window, emitted oldest-first. Prices are decimal\nstrings.","parameters":[{"in":"query","name":"interval","description":"minutely, half-hourly, hourly or daily (default daily).","example":"daily","required":false,"schema":{"type":"string","description":"minutely, half-hourly, hourly or daily (default daily).","example":"daily"}},{"in":"query","name":"start","description":"ISO date/time lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date/time lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date/time upper bound (a date-only value means through that day).","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date/time upper bound (a date-only value means through that day).","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–2000, default 1000).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–2000, default 1000).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"time":"2026-06-14T23:01:01+00:00","price":"65481.259006434","open":"64193.294621057","high":"65513.599862059","low":"63528.138075558","close":"65481.259006434","volume_24h":3795657715,"marketcap":1303678106704.5}],"meta":{"coin":"bitcoin","interval":"daily","count":1,"retention":"full history"}},"properties":{"data":{"type":"array","example":[{"time":"2026-06-14T23:01:01+00:00","price":"65481.259006434","open":"64193.294621057","high":"65513.599862059","low":"63528.138075558","close":"65481.259006434","volume_24h":3795657715,"marketcap":1303678106704.5}],"items":{"type":"object","properties":{"time":{"type":"string","example":"2026-06-14T23:01:01+00:00"},"price":{"type":"string","example":"65481.259006434"},"open":{"type":"string","example":"64193.294621057"},"high":{"type":"string","example":"65513.599862059"},"low":{"type":"string","example":"63528.138075558"},"close":{"type":"string","example":"65481.259006434"},"volume_24h":{"type":"integer","example":3795657715},"marketcap":{"type":"number","example":1303678106704.5}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"interval":{"type":"string","example":"daily"},"count":{"type":"integer","example":1},"retention":{"type":"string","example":"full history"}}}}}}}},"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"Coin not found."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Coin not found."}}}}}}}}},"tags":["Coins"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/marketcap-history":{"get":{"summary":"Marketcap history","operationId":"marketcapHistory","description":"The same per-coin rollups as `Candle history`, projected to `{time, marketcap}`\nonly. Same `interval` choices and retention windows (minutely 8 days,\nhalf-hourly 3 months, hourly 6 months, daily forever), most-recent-N when a\n`limit` is set.","parameters":[{"in":"query","name":"interval","description":"minutely, half-hourly, hourly or daily (default daily).","example":"daily","required":false,"schema":{"type":"string","description":"minutely, half-hourly, hourly or daily (default daily).","example":"daily"}},{"in":"query","name":"start","description":"ISO date/time lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date/time lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date/time upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date/time upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–2000, default 1000).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–2000, default 1000).","example":30}}],"responses":[],"tags":["Coins"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/sparkline":{"get":{"summary":"Coin sparkline","operationId":"coinSparkline","description":"A compact price series for the coin over the chosen `period`, for drawing\nsparklines.\n\n`points` is a sample of at most 480 readings, oldest first, each a decimal-string\n`price` at an ISO-8601 `time`. `low` and `high` are the true extremes of the whole\nperiod — they bound every point, but need not appear among the sampled ones.\n`change` is the move across the period in PERCENT (`1.25` means +1.25%).","parameters":[{"in":"query","name":"period","description":"24h, 7d, 30d, 60d, 90d, 180d or 365d (default 7d).","example":"7d","required":false,"schema":{"type":"string","description":"24h, 7d, 30d, 60d, 90d, 180d or 365d (default 7d).","example":"7d","nullable":true}}],"responses":[],"tags":["Coins"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/prices":{"get":{"summary":"Get prices","operationId":"getPrices","description":"Prices for a requested set of coins. Pass at least one selector — `ids`, `slugs`\nor `symbols` (up to 100 combined). `meta.currency` echoes the conversion target\n(USD unless `convert` is set).","parameters":[{"in":"query","name":"ids","description":"Coin ids to price (CSV). At least one of ids, slugs or symbols is required; the three lists cap at 100 selectors combined. This field is required when none of slugs and symbols are present. Must not be greater than 1000 characters.","example":"38,39","required":false,"schema":{"type":"string","description":"Coin ids to price (CSV). At least one of ids, slugs or symbols is required; the three lists cap at 100 selectors combined. This field is required when none of slugs and symbols are present. Must not be greater than 1000 characters.","example":"38,39","nullable":true}},{"in":"query","name":"slugs","description":"Coin slugs to price (CSV). At least one of ids, slugs or symbols is required. This field is required when none of ids and symbols are present. Must not be greater than 2000 characters.","example":"bitcoin,ethereum","required":false,"schema":{"type":"string","description":"Coin slugs to price (CSV). At least one of ids, slugs or symbols is required. This field is required when none of ids and symbols are present. Must not be greater than 2000 characters.","example":"bitcoin,ethereum","nullable":true}},{"in":"query","name":"symbols","description":"Coin symbols to price (CSV, case-insensitive). At least one of ids, slugs or symbols is required. This field is required when none of ids and slugs are present. Must not be greater than 1000 characters.","example":"BTC,ETH","required":false,"schema":{"type":"string","description":"Coin symbols to price (CSV, case-insensitive). At least one of ids, slugs or symbols is required. This field is required when none of ids and slugs are present. Must not be greater than 1000 characters.","example":"BTC,ETH","nullable":true}},{"in":"query","name":"convert","description":"Convert prices/marketcap into an active fiat currency by symbol (default USD). FX rates refresh ~twice daily.","example":"EUR","required":false,"schema":{"type":"string","description":"Convert prices/marketcap into an active fiat currency by symbol (default USD). FX rates refresh ~twice daily.","example":"EUR","enum":["USD","EUR","JPY","BGN","CZK","DKK","GBP","HUF","PLN","RON","SEK","CHF","ISK","NOK","HRK","RUB","TRY","AUD","BRL","CAD","CNY","HKD","IDR","ILS","INR","KRW","MXN","MYR","NZD","PHP","SGD","THB","ZAR","ARS","DZD","MAD","TWD"],"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":38,"slug":"bitcoin","symbol":"BTC","name":"Bitcoin","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"volume_24h":5345161962,"change_24h":1.35,"change_7d":4.98,"change_rank_24h":0,"change_rank_7d":0,"last_updated":"2026-06-27T10:34:17+00:00"},{"id":39,"slug":"ethereum","symbol":"ETH","name":"Ethereum","rank":2,"price":"1672.4623100248","marketcap":203243220990.49,"volume_24h":69585141532,"change_24h":1.42,"change_7d":7.56,"change_rank_24h":0,"change_rank_7d":0,"last_updated":"2026-06-12T09:32:14+00:00"}],"meta":{"currency":"USD","count":2}},"properties":{"data":{"type":"array","example":[{"id":38,"slug":"bitcoin","symbol":"BTC","name":"Bitcoin","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"volume_24h":5345161962,"change_24h":1.35,"change_7d":4.98,"change_rank_24h":0,"change_rank_7d":0,"last_updated":"2026-06-27T10:34:17+00:00"},{"id":39,"slug":"ethereum","symbol":"ETH","name":"Ethereum","rank":2,"price":"1672.4623100248","marketcap":203243220990.49,"volume_24h":69585141532,"change_24h":1.42,"change_7d":7.56,"change_rank_24h":0,"change_rank_7d":0,"last_updated":"2026-06-12T09:32:14+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":38},"slug":{"type":"string","example":"bitcoin"},"symbol":{"type":"string","example":"BTC"},"name":{"type":"string","example":"Bitcoin"},"rank":{"type":"integer","example":1},"price":{"type":"string","example":"63520.780763913"},"marketcap":{"type":"number","example":1264646594448.5},"volume_24h":{"type":"integer","example":5345161962},"change_24h":{"type":"number","example":1.35},"change_7d":{"type":"number","example":4.98},"change_rank_24h":{"type":"integer","example":0},"change_rank_7d":{"type":"integer","example":0},"last_updated":{"type":"string","example":"2026-06-27T10:34:17+00:00"}}}},"meta":{"type":"object","properties":{"currency":{"type":"string","example":"USD"},"count":{"type":"integer","example":2}}}}}}}},"422":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"validation","message":"The request parameters are invalid.","details":{"errors":{"ids":["Pass at least one selector: ids, slugs or symbols."]}}}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"validation"},"message":{"type":"string","example":"The request parameters are invalid."},"details":{"type":"object","properties":{"errors":{"type":"object","properties":{"ids":{"type":"array","example":["Pass at least one selector: ids, slugs or symbols."],"items":{"type":"string"}}}}}}}}}}}}}},"tags":["Prices"]}},"/api/v1/prices/{slug}":{"get":{"summary":"Get a coin price","operationId":"getACoinPrice","description":"Single-coin price snapshot. Optionally `convert` into an active fiat currency by\nsymbol (default USD).","parameters":[{"in":"query","name":"convert","description":"Active fiat currency symbol to price in (default USD).","example":"EUR","required":false,"schema":{"type":"string","description":"Active fiat currency symbol to price in (default USD).","example":"EUR","nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"id":38,"slug":"bitcoin","symbol":"BTC","name":"Bitcoin","rank":1,"price":"63520.780763913","marketcap":1264646594448.5,"volume_24h":5345161962,"change_24h":1.35,"change_7d":4.98,"change_rank_24h":0,"change_rank_7d":0,"last_updated":"2026-06-27T10:34:17+00:00"},"meta":{"currency":"USD","count":1}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":38},"slug":{"type":"string","example":"bitcoin"},"symbol":{"type":"string","example":"BTC"},"name":{"type":"string","example":"Bitcoin"},"rank":{"type":"integer","example":1},"price":{"type":"string","example":"63520.780763913"},"marketcap":{"type":"number","example":1264646594448.5},"volume_24h":{"type":"integer","example":5345161962},"change_24h":{"type":"number","example":1.35},"change_7d":{"type":"number","example":4.98},"change_rank_24h":{"type":"integer","example":0},"change_rank_7d":{"type":"integer","example":0},"last_updated":{"type":"string","example":"2026-06-27T10:34:17+00:00"}}},"meta":{"type":"object","properties":{"currency":{"type":"string","example":"USD"},"count":{"type":"integer","example":1}}}}}}}},"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"Coin not found."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Coin not found."}}}}}}}}},"tags":["Prices"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/historical-price":{"get":{"summary":"Historical price","operationId":"historicalPrice","description":"The coin's USD price on a given date, read from the daily history (exact day,\n±3-day fallback — the same resolver the portfolio uses). Crypto only: fiat rows\nhave no daily history.","parameters":[{"in":"query","name":"slug","description":"The coin's slug identifier.","example":"bitcoin","required":true,"schema":{"type":"string","description":"The coin's slug identifier.","example":"bitcoin"}},{"in":"query","name":"date","description":"date The lookup date (after 2008-12-31, not in the future).","example":"2021-04-14","required":true,"schema":{"type":"string","description":"date The lookup date (after 2008-12-31, not in the future).","example":"2021-04-14"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"slug":"bitcoin","symbol":"BTC","date":"2021-04-14","price":"63109.7","currency":"USD"}},"properties":{"data":{"type":"object","properties":{"slug":{"type":"string","example":"bitcoin"},"symbol":{"type":"string","example":"BTC"},"date":{"type":"string","example":"2021-04-14"},"price":{"type":"string","example":"63109.7"},"currency":{"type":"string","example":"USD"}}}}}}}}},"tags":["Prices"]}},"/api/v1/coins/{slug}/markets":{"get":{"summary":"Coin markets","operationId":"coinMarkets","description":"All markets for a coin — the tickers whose pair has the coin as base OR quote.\nSame row shape and filters as `List tickers`.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"exchange","description":"Restrict to a single exchange by slug (omit on the per-exchange listing, which is already scoped). Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"binance-exchange","required":false,"schema":{"type":"string","description":"Restrict to a single exchange by slug (omit on the per-exchange listing, which is already scoped). Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"binance-exchange","nullable":true}},{"in":"query","name":"pair","description":"Restrict to a single pair by id. Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Restrict to a single pair by id. Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"instrument","description":"Instrument type: future, option, swap, spot or margin (plurals accepted).","example":"spot","required":false,"schema":{"type":"string","description":"Instrument type: future, option, swap, spot or margin (plurals accepted).","example":"spot","enum":["future","option","swap","spot","margin"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on the ticker symbol. Must not be greater than 50 characters.","example":"BTC","required":false,"schema":{"type":"string","description":"Free-text match on the ticker symbol. Must not be greater than 50 characters.","example":"BTC","nullable":true}},{"in":"query","name":"min_volume","description":"Only tickers with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only tickers with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only tickers with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only tickers with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"min_change","description":"Only tickers with a 24h percentage change at or above this value.","example":-50,"required":false,"schema":{"type":"number","description":"Only tickers with a 24h percentage change at or above this value.","example":-50,"nullable":true}},{"in":"query","name":"max_change","description":"Only tickers with a 24h percentage change at or below this value.","example":50,"required":false,"schema":{"type":"number","description":"Only tickers with a 24h percentage change at or below this value.","example":50,"nullable":true}},{"in":"query","name":"sort","description":"A single sort field (prefix with - for descending). Sortable: volume_usd, change_24h, price_usd, updated. Defaults to -volume_usd. Must not be greater than 100 characters.","example":"-volume_usd","required":false,"schema":{"type":"string","description":"A single sort field (prefix with - for descending). Sortable: volume_usd, change_24h, price_usd, updated. Defaults to -volume_usd. Must not be greater than 100 characters.","example":"-volume_usd","nullable":true}}],"responses":[],"tags":["Markets"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/symbols":{"get":{"summary":"Coin trading symbols","operationId":"coinTradingSymbols","description":"The coin's raw per-exchange trading symbols — sparsely populated reference data\n(coverage is best-effort).","parameters":[],"responses":[],"tags":["Markets"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/tickers":{"get":{"summary":"List tickers","operationId":"listTickers","description":"Individual per-exchange markets (tickers), paginated. Filter by exchange, pair,\ninstrument and volume/change ranges. USD volumes are numbers; prices are decimal\nstrings.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"exchange","description":"Restrict to a single exchange by slug (omit on the per-exchange listing, which is already scoped). Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"binance-exchange","required":false,"schema":{"type":"string","description":"Restrict to a single exchange by slug (omit on the per-exchange listing, which is already scoped). Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"binance-exchange","nullable":true}},{"in":"query","name":"pair","description":"Restrict to a single pair by id. Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Restrict to a single pair by id. Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"instrument","description":"Instrument type: future, option, swap, spot or margin (plurals accepted).","example":"spot","required":false,"schema":{"type":"string","description":"Instrument type: future, option, swap, spot or margin (plurals accepted).","example":"spot","enum":["future","option","swap","spot","margin"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on the ticker symbol. Must not be greater than 50 characters.","example":"BTC","required":false,"schema":{"type":"string","description":"Free-text match on the ticker symbol. Must not be greater than 50 characters.","example":"BTC","nullable":true}},{"in":"query","name":"min_volume","description":"Only tickers with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only tickers with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only tickers with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only tickers with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"min_change","description":"Only tickers with a 24h percentage change at or above this value.","example":-50,"required":false,"schema":{"type":"number","description":"Only tickers with a 24h percentage change at or above this value.","example":-50,"nullable":true}},{"in":"query","name":"max_change","description":"Only tickers with a 24h percentage change at or below this value.","example":50,"required":false,"schema":{"type":"number","description":"Only tickers with a 24h percentage change at or below this value.","example":50,"nullable":true}},{"in":"query","name":"sort","description":"A single sort field (prefix with - for descending). Sortable: volume_usd, change_24h, price_usd, updated. Defaults to -volume_usd. Must not be greater than 100 characters.","example":"-volume_usd","required":false,"schema":{"type":"string","description":"A single sort field (prefix with - for descending). Sortable: volume_usd, change_24h, price_usd, updated. Defaults to -volume_usd. Must not be greater than 100 characters.","example":"-volume_usd","nullable":true}}],"responses":[],"tags":["Markets"]}},"/api/v1/pairs":{"get":{"summary":"List pairs","operationId":"listPairs","description":"Venue-aggregated trading pairs, ranked by 24h USD volume. Filter by a coin slug\n(base or quote) and volume range.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"search","description":"Free-text match on the pair symbol. Must not be greater than 50 characters.","example":"BTC","required":false,"schema":{"type":"string","description":"Free-text match on the pair symbol. Must not be greater than 50 characters.","example":"BTC","nullable":true}},{"in":"query","name":"coin","description":"Restrict to pairs where this coin slug is the base or quote asset. Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Restrict to pairs where this coin slug is the base or quote asset. Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"bitcoin","nullable":true}},{"in":"query","name":"min_volume","description":"Only pairs with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only pairs with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only pairs with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only pairs with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"sort","description":"Sort field: volume_usd or updated (prefix with - for descending). Defaults to -volume_usd.","example":"-volume_usd","required":false,"schema":{"type":"string","description":"Sort field: volume_usd or updated (prefix with - for descending). Defaults to -volume_usd.","example":"-volume_usd","enum":["volume_usd","-volume_usd","updated","-updated"],"nullable":true}}],"responses":[],"tags":["Markets"]}},"/api/v1/pairs/{id}":{"get":{"summary":"Get pair detail","operationId":"getPairDetail","description":"One pair plus every exchange ticker listing it, ordered by volume.","parameters":[],"responses":{"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"Pair not found."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Pair not found."}}}}}}}}},"tags":["Markets"]},"parameters":[{"in":"path","name":"id","description":"The pair id.","example":1,"required":true,"schema":{"type":"integer"}}]},"/api/v1/exchanges":{"get":{"summary":"List exchanges","operationId":"listExchanges","description":"Ranked exchanges with 24h volume, dominance, pair/asset counts and recent\nchanges. Paginated with Laravel's `links` + `meta` envelope.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"type","description":"Restrict to a venue type: cex or dex (resolved via the exchange taxonomy).","example":"cex","required":false,"schema":{"type":"string","description":"Restrict to a venue type: cex or dex (resolved via the exchange taxonomy).","example":"cex","enum":["cex","dex"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on exchange name. Must not be greater than 100 characters.","example":"binance","required":false,"schema":{"type":"string","description":"Free-text match on exchange name. Must not be greater than 100 characters.","example":"binance","nullable":true}},{"in":"query","name":"min_pairs","description":"Only exchanges listing at least this many pairs. Must be at least 0.","example":100,"required":false,"schema":{"type":"integer","description":"Only exchanges listing at least this many pairs. Must be at least 0.","example":100,"nullable":true}},{"in":"query","name":"max_pairs","description":"Only exchanges listing at most this many pairs. Must be at least 0.","example":2000,"required":false,"schema":{"type":"integer","description":"Only exchanges listing at most this many pairs. Must be at least 0.","example":2000,"nullable":true}},{"in":"query","name":"min_assets","description":"Only exchanges listing at least this many assets. Must be at least 0.","example":50,"required":false,"schema":{"type":"integer","description":"Only exchanges listing at least this many assets. Must be at least 0.","example":50,"nullable":true}},{"in":"query","name":"max_assets","description":"Only exchanges listing at most this many assets. Must be at least 0.","example":1000,"required":false,"schema":{"type":"integer","description":"Only exchanges listing at most this many assets. Must be at least 0.","example":1000,"nullable":true}},{"in":"query","name":"min_volume","description":"Only exchanges with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only exchanges with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only exchanges with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only exchanges with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"ids","description":"Filter to specific exchange ids (CSV, up to 100). Must not be greater than 1000 characters.","example":"1,12","required":false,"schema":{"type":"string","description":"Filter to specific exchange ids (CSV, up to 100). Must not be greater than 1000 characters.","example":"1,12","nullable":true}},{"in":"query","name":"slugs","description":"Filter to specific exchange slugs (CSV, up to 100). Must not be greater than 2000 characters.","example":"binance-exchange,gateio","required":false,"schema":{"type":"string","description":"Filter to specific exchange slugs (CSV, up to 100). Must not be greater than 2000 characters.","example":"binance-exchange,gateio","nullable":true}},{"in":"query","name":"sort","description":"Comma-separated sort fields; prefix with - for descending. Sortable: volume, rank, volume_dominance, change_24h, change_7d, pairs, assets. Must not be greater than 100 characters.","example":"-volume","required":false,"schema":{"type":"string","description":"Comma-separated sort fields; prefix with - for descending. Sortable: volume, rank, volume_dominance, change_24h, change_7d, pairs, assets. Must not be greater than 100 characters.","example":"-volume","nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":1,"slug":"binance-exchange","name":"Binance","rank":1,"volume_24h":6152385798,"volume_dominance":36.98,"change_24h":200.09,"change_7d":22.87,"change_rank_24h":0,"change_rank_7d":0,"pairs":1115,"assets":100,"logo":"https://bitculator.com/storage/media/logo/binance.png","last_updated":"2026-06-15T16:59:21+00:00"}],"links":{"first":"https://bitculator.com/api/v1/exchanges?page=1","last":"https://bitculator.com/api/v1/exchanges?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"per_page":50,"to":10,"total":10}},"properties":{"data":{"type":"array","example":[{"id":1,"slug":"binance-exchange","name":"Binance","rank":1,"volume_24h":6152385798,"volume_dominance":36.98,"change_24h":200.09,"change_7d":22.87,"change_rank_24h":0,"change_rank_7d":0,"pairs":1115,"assets":100,"logo":"https://bitculator.com/storage/media/logo/binance.png","last_updated":"2026-06-15T16:59:21+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":1},"slug":{"type":"string","example":"binance-exchange"},"name":{"type":"string","example":"Binance"},"rank":{"type":"integer","example":1},"volume_24h":{"type":"integer","example":6152385798},"volume_dominance":{"type":"number","example":36.98},"change_24h":{"type":"number","example":200.09},"change_7d":{"type":"number","example":22.87},"change_rank_24h":{"type":"integer","example":0},"change_rank_7d":{"type":"integer","example":0},"pairs":{"type":"integer","example":1115},"assets":{"type":"integer","example":100},"logo":{"type":"string","example":"https://bitculator.com/storage/media/logo/binance.png"},"last_updated":{"type":"string","example":"2026-06-15T16:59:21+00:00"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"https://bitculator.com/api/v1/exchanges?page=1"},"last":{"type":"string","example":"https://bitculator.com/api/v1/exchanges?page=1"},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":1},"per_page":{"type":"integer","example":50},"to":{"type":"integer","example":10},"total":{"type":"integer","example":10}}}}}}}}},"tags":["Exchanges"]}},"/api/v1/exchanges/{slug}":{"get":{"summary":"Get exchange detail","operationId":"getExchangeDetail","description":"Full single-exchange profile: ranking, volume/dominance, pair and asset counts,\n`established` date, `location`, referral `website`, and the derived `type`\n(cex/dex/null).","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"id":1,"slug":"binance-exchange","name":"Binance","type":"cex","rank":1,"volume_24h":6152385798,"volume_dominance":36.98,"change_24h":200.09,"change_7d":22.87,"change_rank_24h":0,"change_rank_7d":0,"pairs":1115,"assets":100,"established":"2017-07-14","location":"Cayman Islands","website":"https://accounts.binance.com/register","logo":"https://bitculator.com/storage/media/logo/binance.png","last_updated":"2026-06-15T16:59:21+00:00"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":1},"slug":{"type":"string","example":"binance-exchange"},"name":{"type":"string","example":"Binance"},"type":{"type":"string","example":"cex"},"rank":{"type":"integer","example":1},"volume_24h":{"type":"integer","example":6152385798},"volume_dominance":{"type":"number","example":36.98},"change_24h":{"type":"number","example":200.09},"change_7d":{"type":"number","example":22.87},"change_rank_24h":{"type":"integer","example":0},"change_rank_7d":{"type":"integer","example":0},"pairs":{"type":"integer","example":1115},"assets":{"type":"integer","example":100},"established":{"type":"string","example":"2017-07-14"},"location":{"type":"string","example":"Cayman Islands"},"website":{"type":"string","example":"https://accounts.binance.com/register"},"logo":{"type":"string","example":"https://bitculator.com/storage/media/logo/binance.png"},"last_updated":{"type":"string","example":"2026-06-15T16:59:21+00:00"}}}}}}}},"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"Exchange not found."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Exchange not found."}}}}}}}}},"tags":["Exchanges"]},"parameters":[{"in":"path","name":"slug","description":"The exchange slug.","example":"binance-exchange","required":true,"schema":{"type":"string"}}]},"/api/v1/exchanges/{slug}/trust-score":{"get":{"summary":"Get exchange trust score","operationId":"getExchangeTrustScore","description":"An aggregate 0–10 trust `score` plus its 13-factor `breakdown` (rank, volume,\nage, volume_trend, stability, rank_stability, ticker_health, pairs, community,\nassets, dominance, market_breadth, transparency). Computed per exchange and\ncached 24h.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"exchange":"binance-exchange","score":8.3,"breakdown":{"rank":10,"volume":10,"age":10,"volume_trend":7,"stability":3,"rank_stability":10,"ticker_health":8.6,"pairs":9.6,"community":6,"assets":6.6,"dominance":9.4,"market_breadth":8,"transparency":8.5}}},"properties":{"data":{"type":"object","properties":{"exchange":{"type":"string","example":"binance-exchange"},"score":{"type":"number","example":8.3},"breakdown":{"type":"object","properties":{"rank":{"type":"integer","example":10},"volume":{"type":"integer","example":10},"age":{"type":"integer","example":10},"volume_trend":{"type":"integer","example":7},"stability":{"type":"integer","example":3},"rank_stability":{"type":"integer","example":10},"ticker_health":{"type":"number","example":8.6},"pairs":{"type":"number","example":9.6},"community":{"type":"integer","example":6},"assets":{"type":"number","example":6.6},"dominance":{"type":"number","example":9.4},"market_breadth":{"type":"integer","example":8},"transparency":{"type":"number","example":8.5}}}}}}}}}},"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"Exchange not found."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Exchange not found."}}}}}}}}},"tags":["Exchanges"]},"parameters":[{"in":"path","name":"slug","description":"The exchange slug.","example":"binance-exchange","required":true,"schema":{"type":"string"}}]},"/api/v1/exchanges/{slug}/history":{"get":{"summary":"Exchange history","operationId":"exchangeHistory","description":"Volume / dominance / pairs / assets time series (the exchange rollups carry no\nOHLC). Pick `interval`: minutely, hourly or daily. Retention is a hard property\nof the rollup pipeline — minutely 8 days, hourly 6 months, daily forever; when a\n`limit` is set you get the most-recent N rows in the window, oldest-first.","parameters":[{"in":"query","name":"interval","description":"minutely, hourly or daily (default daily).","example":"daily","required":false,"schema":{"type":"string","description":"minutely, hourly or daily (default daily).","example":"daily","nullable":true}},{"in":"query","name":"start","description":"ISO date/time lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date/time lower bound.","example":"2026-06-01","nullable":true}},{"in":"query","name":"end","description":"ISO date/time upper bound (a date-only value means through that day).","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date/time upper bound (a date-only value means through that day).","example":"2026-06-30","nullable":true}},{"in":"query","name":"limit","description":"Max rows (1–2000, default 1000).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–2000, default 1000).","example":30,"nullable":true}}],"responses":[],"tags":["Exchanges"]},"parameters":[{"in":"path","name":"slug","description":"The exchange slug.","example":"binance-exchange","required":true,"schema":{"type":"string"}}]},"/api/v1/exchanges/{slug}/sparkline":{"get":{"summary":"Exchange sparkline","operationId":"exchangeSparkline","description":"The exchange's volume sparkline series for a period (defaults to 7d) — the same\nseries the web's exchange rows render.\n\n`points` is a sample of at most 480 readings, oldest first, each a `volume` at an\nISO-8601 `time`. `low` and `high` are the true extremes of the whole period — they\nbound every point, but need not appear among the sampled ones. `change` is the move\nacross the period in PERCENT (`1.25` means +1.25%).","parameters":[{"in":"query","name":"period","description":"One of `24h`, `7d` (default), `30d`, `60d`, `90d`, `180d`, `365d`.","example":"7d","required":false,"schema":{"type":"string","description":"One of `24h`, `7d` (default), `30d`, `60d`, `90d`, `180d`, `365d`.","example":"7d","nullable":true}}],"responses":[],"tags":["Exchanges"]},"parameters":[{"in":"path","name":"slug","description":"The exchange slug.","example":"binance-exchange","required":true,"schema":{"type":"string"}}]},"/api/v1/exchanges/{slug}/tickers":{"get":{"summary":"Exchange markets","operationId":"exchangeMarkets","description":"The exchange's ticker listings (its markets), paginated. Already scoped to the\nexchange — do not pass an `exchange` parameter here.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"exchange","description":"Restrict to a single exchange by slug (omit on the per-exchange listing, which is already scoped). Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"binance-exchange","required":false,"schema":{"type":"string","description":"Restrict to a single exchange by slug (omit on the per-exchange listing, which is already scoped). Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"binance-exchange","nullable":true}},{"in":"query","name":"pair","description":"Restrict to a single pair by id. Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Restrict to a single pair by id. Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"instrument","description":"Instrument type: future, option, swap, spot or margin (plurals accepted).","example":"spot","required":false,"schema":{"type":"string","description":"Instrument type: future, option, swap, spot or margin (plurals accepted).","example":"spot","enum":["future","option","swap","spot","margin"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on the ticker symbol. Must not be greater than 50 characters.","example":"BTC","required":false,"schema":{"type":"string","description":"Free-text match on the ticker symbol. Must not be greater than 50 characters.","example":"BTC","nullable":true}},{"in":"query","name":"min_volume","description":"Only tickers with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only tickers with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only tickers with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only tickers with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"min_change","description":"Only tickers with a 24h percentage change at or above this value.","example":-50,"required":false,"schema":{"type":"number","description":"Only tickers with a 24h percentage change at or above this value.","example":-50,"nullable":true}},{"in":"query","name":"max_change","description":"Only tickers with a 24h percentage change at or below this value.","example":50,"required":false,"schema":{"type":"number","description":"Only tickers with a 24h percentage change at or below this value.","example":50,"nullable":true}},{"in":"query","name":"sort","description":"A single sort field (prefix with - for descending). Sortable: volume_usd, change_24h, price_usd, updated. Defaults to -volume_usd. Must not be greater than 100 characters.","example":"-volume_usd","required":false,"schema":{"type":"string","description":"A single sort field (prefix with - for descending). Sortable: volume_usd, change_24h, price_usd, updated. Defaults to -volume_usd. Must not be greater than 100 characters.","example":"-volume_usd","nullable":true}}],"responses":[],"tags":["Exchanges"]},"parameters":[{"in":"path","name":"slug","description":"The exchange slug.","example":"binance-exchange","required":true,"schema":{"type":"string"}}]},"/api/v1/exchanges/{slug}/assets":{"get":{"summary":"Exchange coins","operationId":"exchangeCoins","description":"Coins listed on the exchange, returned in the same shape as `List coins` and\naccepting the same filters/sort.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"type","description":"Restrict to a single asset type: coin or token.","example":"coin","required":false,"schema":{"type":"string","description":"Restrict to a single asset type: coin or token.","example":"coin","enum":["coin","token"],"nullable":true}},{"in":"query","name":"status","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","required":false,"schema":{"type":"string","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","enum":["active","delisted","untracked","progressing","awaiting","preparing"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","nullable":true}},{"in":"query","name":"min_price","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"required":false,"schema":{"type":"number","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"nullable":true}},{"in":"query","name":"max_price","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"required":false,"schema":{"type":"number","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"nullable":true}},{"in":"query","name":"min_marketcap","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_marketcap","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"nullable":true}},{"in":"query","name":"min_volume","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"ids","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","required":false,"schema":{"type":"string","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","nullable":true}},{"in":"query","name":"slugs","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","required":false,"schema":{"type":"string","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","nullable":true}},{"in":"query","name":"symbols","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","required":false,"schema":{"type":"string","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","nullable":true}},{"in":"query","name":"sort","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","required":false,"schema":{"type":"string","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","nullable":true}},{"in":"query","name":"interval","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","required":false,"schema":{"type":"string","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","enum":["24h","7d"],"nullable":true}}],"responses":[],"tags":["Exchanges"]},"parameters":[{"in":"path","name":"slug","description":"The exchange slug.","example":"binance-exchange","required":true,"schema":{"type":"string"}}]},"/api/v1/wallets":{"get":{"summary":"List wallets","operationId":"listWallets","description":"Reviewed wallets with score, asset count, pros/cons counts, price model, status\nand release date. Paginated with Laravel's `links` + `meta` envelope, plus\n`meta.top_score`.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"search","description":"Free-text match on wallet name. Must not be greater than 100 characters.","example":"ledger","required":false,"schema":{"type":"string","description":"Free-text match on wallet name. Must not be greater than 100 characters.","example":"ledger","nullable":true}},{"in":"query","name":"min_score","description":"Only wallets with a review score at or above this value. Must be at least 0.","example":50,"required":false,"schema":{"type":"integer","description":"Only wallets with a review score at or above this value. Must be at least 0.","example":50,"nullable":true}},{"in":"query","name":"max_score","description":"Only wallets with a review score at or below this value. Must be at least 0.","example":214,"required":false,"schema":{"type":"integer","description":"Only wallets with a review score at or below this value. Must be at least 0.","example":214,"nullable":true}},{"in":"query","name":"tags","description":"Filter by tag taxonomy: comma-separated category-group ids (the same ids the web facet filters submit). Must not be greater than 1000 characters.","example":"12,34","required":false,"schema":{"type":"string","description":"Filter by tag taxonomy: comma-separated category-group ids (the same ids the web facet filters submit). Must not be greater than 1000 characters.","example":"12,34","nullable":true}},{"in":"query","name":"ids","description":"Filter to specific wallet ids (CSV, up to 100). Must not be greater than 1000 characters.","example":"175,317","required":false,"schema":{"type":"string","description":"Filter to specific wallet ids (CSV, up to 100). Must not be greater than 1000 characters.","example":"175,317","nullable":true}},{"in":"query","name":"slugs","description":"Filter to specific wallet slugs (CSV, up to 100). Must not be greater than 2000 characters.","example":"frostsnap,coin98-fusion-card","required":false,"schema":{"type":"string","description":"Filter to specific wallet slugs (CSV, up to 100). Must not be greater than 2000 characters.","example":"frostsnap,coin98-fusion-card","nullable":true}},{"in":"query","name":"sort","description":"Comma-separated sort fields; prefix with - for descending. Sortable: score, released_at, assets, pros, cons. Must not be greater than 100 characters.","example":"-score","required":false,"schema":{"type":"string","description":"Comma-separated sort fields; prefix with - for descending. Sortable: score, released_at, assets, pros, cons. Must not be greater than 100 characters.","example":"-score","nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":317,"slug":"frostsnap","name":"Frostsnap","score":125,"assets":1,"pros":18,"cons":0,"price_model":"paid","status":"Active","released_at":null,"logo":"https://bitculator.com/storage/media/logo/frostsnap.png"}],"links":{"first":"https://bitculator.com/api/v1/wallets?page=1","last":"https://bitculator.com/api/v1/wallets?page=7","prev":null,"next":"https://bitculator.com/api/v1/wallets?page=2"},"meta":{"current_page":1,"from":1,"last_page":7,"per_page":50,"to":50,"total":321,"top_score":214}},"properties":{"data":{"type":"array","example":[{"id":317,"slug":"frostsnap","name":"Frostsnap","score":125,"assets":1,"pros":18,"cons":0,"price_model":"paid","status":"Active","released_at":null,"logo":"https://bitculator.com/storage/media/logo/frostsnap.png"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":317},"slug":{"type":"string","example":"frostsnap"},"name":{"type":"string","example":"Frostsnap"},"score":{"type":"integer","example":125},"assets":{"type":"integer","example":1},"pros":{"type":"integer","example":18},"cons":{"type":"integer","example":0},"price_model":{"type":"string","example":"paid"},"status":{"type":"string","example":"Active"},"released_at":{"type":"string","example":null,"nullable":true},"logo":{"type":"string","example":"https://bitculator.com/storage/media/logo/frostsnap.png"}}}},"links":{"type":"object","properties":{"first":{"type":"string","example":"https://bitculator.com/api/v1/wallets?page=1"},"last":{"type":"string","example":"https://bitculator.com/api/v1/wallets?page=7"},"prev":{"type":"string","example":null,"nullable":true},"next":{"type":"string","example":"https://bitculator.com/api/v1/wallets?page=2"}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"from":{"type":"integer","example":1},"last_page":{"type":"integer","example":7},"per_page":{"type":"integer","example":50},"to":{"type":"integer","example":50},"total":{"type":"integer","example":321},"top_score":{"type":"integer","example":214}}}}}}}}},"tags":["Wallets"]}},"/api/v1/wallets/timeline":{"get":{"summary":"Wallet release timeline","operationId":"walletReleaseTimeline","description":"The wallet list pinned to `released_at` descending (undated wallets last). Same\nrow shape and pagination envelope as `List wallets`.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"search","description":"Free-text match on wallet name. Must not be greater than 100 characters.","example":"ledger","required":false,"schema":{"type":"string","description":"Free-text match on wallet name. Must not be greater than 100 characters.","example":"ledger","nullable":true}},{"in":"query","name":"min_score","description":"Only wallets with a review score at or above this value. Must be at least 0.","example":50,"required":false,"schema":{"type":"integer","description":"Only wallets with a review score at or above this value. Must be at least 0.","example":50,"nullable":true}},{"in":"query","name":"max_score","description":"Only wallets with a review score at or below this value. Must be at least 0.","example":214,"required":false,"schema":{"type":"integer","description":"Only wallets with a review score at or below this value. Must be at least 0.","example":214,"nullable":true}},{"in":"query","name":"tags","description":"Filter by tag taxonomy: comma-separated category-group ids (the same ids the web facet filters submit). Must not be greater than 1000 characters.","example":"12,34","required":false,"schema":{"type":"string","description":"Filter by tag taxonomy: comma-separated category-group ids (the same ids the web facet filters submit). Must not be greater than 1000 characters.","example":"12,34","nullable":true}},{"in":"query","name":"ids","description":"Filter to specific wallet ids (CSV, up to 100). Must not be greater than 1000 characters.","example":"175,317","required":false,"schema":{"type":"string","description":"Filter to specific wallet ids (CSV, up to 100). Must not be greater than 1000 characters.","example":"175,317","nullable":true}},{"in":"query","name":"slugs","description":"Filter to specific wallet slugs (CSV, up to 100). Must not be greater than 2000 characters.","example":"frostsnap,coin98-fusion-card","required":false,"schema":{"type":"string","description":"Filter to specific wallet slugs (CSV, up to 100). Must not be greater than 2000 characters.","example":"frostsnap,coin98-fusion-card","nullable":true}},{"in":"query","name":"sort","description":"Comma-separated sort fields; prefix with - for descending. Sortable: score, released_at, assets, pros, cons. Must not be greater than 100 characters.","example":"-score","required":false,"schema":{"type":"string","description":"Comma-separated sort fields; prefix with - for descending. Sortable: score, released_at, assets, pros, cons. Must not be greater than 100 characters.","example":"-score","nullable":true}}],"responses":[],"tags":["Wallets"]}},"/api/v1/wallets/compare":{"get":{"summary":"Compare wallets","operationId":"compareWallets","description":"Side-by-side comparison of 2–4 wallets with their full grouped tag taxonomy.\n`data[]` preserves the requested slug order so consumers can render columns\npositionally.","parameters":[{"in":"query","name":"slugs","description":"2–4 distinct wallet slugs, comma-separated.","example":"frostsnap,coin98-fusion-card","required":true,"schema":{"type":"string","description":"2–4 distinct wallet slugs, comma-separated.","example":"frostsnap,coin98-fusion-card"}}],"responses":[],"tags":["Wallets"]}},"/api/v1/wallets/{slug}":{"get":{"summary":"Get wallet detail","operationId":"getWalletDetail","description":"Full single-wallet profile including the grouped tag taxonomy: `categories` is a\nlist of `{group, tags[]}` where each tag has a slug, name and optional value.\n`meta.top_score` is the highest score across all wallets.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"id":317,"slug":"frostsnap","name":"Frostsnap","score":125,"assets":1,"pros":18,"cons":0,"price_model":"paid","status":"Active","released_at":null,"logo":"https://bitculator.com/storage/media/logo/frostsnap.png","website":"https://frostsnap.com","categories":[{"group":"type","tags":[{"slug":"hardware","name":"Hardware","value":null}]},{"group":"storage","tags":[{"slug":"cold","name":"Cold","value":null}]}]},"meta":{"top_score":214}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":317},"slug":{"type":"string","example":"frostsnap"},"name":{"type":"string","example":"Frostsnap"},"score":{"type":"integer","example":125},"assets":{"type":"integer","example":1},"pros":{"type":"integer","example":18},"cons":{"type":"integer","example":0},"price_model":{"type":"string","example":"paid"},"status":{"type":"string","example":"Active"},"released_at":{"type":"string","example":null,"nullable":true},"logo":{"type":"string","example":"https://bitculator.com/storage/media/logo/frostsnap.png"},"website":{"type":"string","example":"https://frostsnap.com"},"categories":{"type":"array","example":[{"group":"type","tags":[{"slug":"hardware","name":"Hardware","value":null}]},{"group":"storage","tags":[{"slug":"cold","name":"Cold","value":null}]}],"items":{"type":"object","properties":{"group":{"type":"string","example":"type"},"tags":{"type":"array","example":[{"slug":"hardware","name":"Hardware","value":null}],"items":{"type":"object","properties":{"slug":{"type":"string","example":"hardware"},"name":{"type":"string","example":"Hardware"},"value":{"type":"string","example":null,"nullable":true}}}}}}}}},"meta":{"type":"object","properties":{"top_score":{"type":"integer","example":214}}}}}}}},"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"Wallet not found."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Wallet not found."}}}}}}}}},"tags":["Wallets"]},"parameters":[{"in":"path","name":"slug","description":"The wallet slug.","example":"frostsnap","required":true,"schema":{"type":"string"}}]},"/api/v1/wallets/{slug}/assets":{"get":{"summary":"Wallet supported coins","operationId":"walletSupportedCoins","description":"Coins the wallet supports, returned in the same shape as `List coins` and\naccepting the same filters/sort.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"type","description":"Restrict to a single asset type: coin or token.","example":"coin","required":false,"schema":{"type":"string","description":"Restrict to a single asset type: coin or token.","example":"coin","enum":["coin","token"],"nullable":true}},{"in":"query","name":"status","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","required":false,"schema":{"type":"string","description":"Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.","example":"active","enum":["active","delisted","untracked","progressing","awaiting","preparing"],"nullable":true}},{"in":"query","name":"search","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Free-text match on name or symbol. Must not be greater than 100 characters.","example":"bitcoin","nullable":true}},{"in":"query","name":"min_price","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"required":false,"schema":{"type":"number","description":"Only coins priced at or above this USD value. Must be at least 0.","example":0.5,"nullable":true}},{"in":"query","name":"max_price","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"required":false,"schema":{"type":"number","description":"Only coins priced at or below this USD value. Must be at least 0.","example":100000,"nullable":true}},{"in":"query","name":"min_marketcap","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_marketcap","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"required":false,"schema":{"type":"number","description":"Only coins with a USD marketcap at or below this value. Must be at least 0.","example":5000000000000,"nullable":true}},{"in":"query","name":"min_volume","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or above this value. Must be at least 0.","example":1000000,"nullable":true}},{"in":"query","name":"max_volume","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"required":false,"schema":{"type":"number","description":"Only coins with 24h USD volume at or below this value. Must be at least 0.","example":100000000000,"nullable":true}},{"in":"query","name":"ids","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","required":false,"schema":{"type":"string","description":"Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.","example":"38,39","nullable":true}},{"in":"query","name":"slugs","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","required":false,"schema":{"type":"string","description":"Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.","example":"bitcoin,ethereum","nullable":true}},{"in":"query","name":"symbols","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","required":false,"schema":{"type":"string","description":"Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.","example":"BTC,ETH","nullable":true}},{"in":"query","name":"sort","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","required":false,"schema":{"type":"string","description":"Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.","example":"-marketcap","nullable":true}},{"in":"query","name":"interval","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","required":false,"schema":{"type":"string","description":"Movers window for /coins/gainers and /coins/losers only: 24h or 7d.","example":"24h","enum":["24h","7d"],"nullable":true}}],"responses":[],"tags":["Wallets"]},"parameters":[{"in":"path","name":"slug","description":"The wallet slug.","example":"frostsnap","required":true,"schema":{"type":"string"}}]},"/api/v1/global":{"get":{"summary":"Global market snapshot","operationId":"globalMarketSnapshot","description":"One-shot market overview: total marketcap and 24h volume, counts of\ncryptocurrencies / tokens / exchanges / pairs / markets, `dominance`\n(BTC & ETH share plus the rank-based `top3`), and the market `fear_greed`\nreading.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"total_marketcap":2037527560616,"total_volume_24h":83977305058,"total_cryptocurrencies":134,"total_tokens":50,"total_exchanges":10,"total_pairs":823,"total_markets":4172,"dominance":{"btc":62.07,"eth":9.97,"top3":[{"symbol":"BTC","domination":62.07},{"symbol":"ETH","domination":9.97},{"symbol":"USDT","domination":8.17}]},"fear_greed":{"score":15,"regime":"neutral"},"last_updated":"2026-07-03T10:16:06+00:00"}},"properties":{"data":{"type":"object","properties":{"total_marketcap":{"type":"integer","example":2037527560616},"total_volume_24h":{"type":"integer","example":83977305058},"total_cryptocurrencies":{"type":"integer","example":134},"total_tokens":{"type":"integer","example":50},"total_exchanges":{"type":"integer","example":10},"total_pairs":{"type":"integer","example":823},"total_markets":{"type":"integer","example":4172},"dominance":{"type":"object","properties":{"btc":{"type":"number","example":62.07},"eth":{"type":"number","example":9.97},"top3":{"type":"array","example":[{"symbol":"BTC","domination":62.07},{"symbol":"ETH","domination":9.97},{"symbol":"USDT","domination":8.17}],"items":{"type":"object","properties":{"symbol":{"type":"string","example":"BTC"},"domination":{"type":"number","example":62.07}}}}}},"fear_greed":{"type":"object","properties":{"score":{"type":"integer","example":15},"regime":{"type":"string","example":"neutral"}}},"last_updated":{"type":"string","example":"2026-07-03T10:16:06+00:00"}}}}}}}}},"tags":["Global Market"]}},"/api/v1/global/heatmap":{"get":{"summary":"Market heatmap","operationId":"marketHeatmap","description":"Top-100 treemap rows plus framing stats (total marketcap/volume, dominance and\nthe market Fear & Greed score) — the API twin of the web heatmap.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"slug":"bitcoin","name":"Bitcoin","symbol":"BTC","price":"109731.2","marketcap":2183456789012,"change_24h":1.24,"change_7d":-2.31,"logo":"https://bitculator.com/storage/media/assets/bitcoin-small.png"}],"meta":{"total_marketcap":3456789012345,"total_volume_24h":98765432109,"dominance":{"btc":63.2,"eth":9.1,"top3":74.6},"fear_greed":15}},"properties":{"data":{"type":"array","example":[{"slug":"bitcoin","name":"Bitcoin","symbol":"BTC","price":"109731.2","marketcap":2183456789012,"change_24h":1.24,"change_7d":-2.31,"logo":"https://bitculator.com/storage/media/assets/bitcoin-small.png"}],"items":{"type":"object","properties":{"slug":{"type":"string","example":"bitcoin"},"name":{"type":"string","example":"Bitcoin"},"symbol":{"type":"string","example":"BTC"},"price":{"type":"string","example":"109731.2"},"marketcap":{"type":"integer","example":2183456789012},"change_24h":{"type":"number","example":1.24},"change_7d":{"type":"number","example":-2.31},"logo":{"type":"string","example":"https://bitculator.com/storage/media/assets/bitcoin-small.png"}}}},"meta":{"type":"object","properties":{"total_marketcap":{"type":"integer","example":3456789012345},"total_volume_24h":{"type":"integer","example":98765432109},"dominance":{"type":"object","properties":{"btc":{"type":"number","example":63.2},"eth":{"type":"number","example":9.1},"top3":{"type":"number","example":74.6}}},"fear_greed":{"type":"integer","example":15}}}}}}}}},"tags":["Global Market"]}},"/api/v1/global/history/{metric}":{"get":{"summary":"Global marketcap / volume history","operationId":"globalMarketcapVolumeHistory","description":"Total-market time series for `marketcap` or `volume`. Granularity follows the\n`period`: 24h = half-hourly, 7d = hourly, 30d/all = daily (finer rollups are\npruned).","parameters":[{"in":"query","name":"period","description":"24h, 7d, 30d or all (default 24h).","example":"7d","required":false,"schema":{"type":"string","description":"24h, 7d, 30d or all (default 24h).","example":"7d","nullable":true}}],"responses":[],"tags":["Global Market"]},"parameters":[{"in":"path","name":"metric","description":"Which series: marketcap or volume.","example":"marketcap","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/votes":{"get":{"summary":"Community vote tallies","operationId":"communityVoteTallies","description":"The coin's bullish/bearish community tallies over the rolling 24h window.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"coin":"bitcoin","bullish":184,"bearish":42,"total":226}},"properties":{"data":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"bullish":{"type":"integer","example":184},"bearish":{"type":"integer","example":42},"total":{"type":"integer","example":226}}}}}}}}},"tags":["Sentiment"]},"post":{"summary":"Cast a sentiment vote","operationId":"castASentimentVote","description":"Casts the key owner's sentiment vote for a coin. One vote per key owner per coin\nper rolling 24h window — re-voting inside the window updates the existing vote.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"coin":"bitcoin","bullish":185,"bearish":42,"total":227,"your_vote":"bullish"}},"properties":{"data":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"bullish":{"type":"integer","example":185},"bearish":{"type":"integer","example":42},"total":{"type":"integer","example":227},"your_vote":{"type":"string","example":"bullish"}}}}}}}}},"tags":["Sentiment"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vote":{"type":"string","description":"Your sentiment: `bullish` or `bearish`.","example":"bullish"}},"required":["vote"]}}}}},"parameters":[{"in":"path","name":"slug","description":"The coin's slug identifier.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/sentiment/fear-greed":{"get":{"summary":"Fear & Greed index","operationId":"fearGreedIndex","description":"The current Fear & Greed reading (a 15-minute snapshot — no history). Omit `coin`\nfor the market-wide index, or pass a coin slug for a per-coin reading. `intervals`\ncarries the 7d/30d sub-scores and their component breakdown.","parameters":[{"in":"query","name":"coin","description":"Coin slug for a per-coin reading; omit for the market index.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Coin slug for a per-coin reading; omit for the market index.","example":"bitcoin"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"scope":"market","score":15,"regime":"neutral","intervals":{"7d":{"score":15,"regime":"neutral","breakdown":{"volume":40,"breadth":1,"momentum":-8,"volatility":36},"score_normalized":15},"30d":{"score":18,"regime":"neutral","breakdown":{"volume":80,"breadth":1,"momentum":-10,"volatility":18},"score_normalized":18}}}},"properties":{"data":{"type":"object","properties":{"scope":{"type":"string","example":"market"},"score":{"type":"integer","example":15},"regime":{"type":"string","example":"neutral"},"intervals":{"type":"object","properties":{"7d":{"type":"object","properties":{"score":{"type":"integer","example":15},"regime":{"type":"string","example":"neutral"},"breakdown":{"type":"object","properties":{"volume":{"type":"integer","example":40},"breadth":{"type":"integer","example":1},"momentum":{"type":"integer","example":-8},"volatility":{"type":"integer","example":36}}},"score_normalized":{"type":"integer","example":15}}},"30d":{"type":"object","properties":{"score":{"type":"integer","example":18},"regime":{"type":"string","example":"neutral"},"breakdown":{"type":"object","properties":{"volume":{"type":"integer","example":80},"breadth":{"type":"integer","example":1},"momentum":{"type":"integer","example":-10},"volatility":{"type":"integer","example":18}}},"score_normalized":{"type":"integer","example":18}}}}}}}}}}}},"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"No fear & greed data for this scope."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"No fear & greed data for this scope."}}}}}}}}},"tags":["Sentiment"]}},"/api/v1/sentiment/bull-bear":{"get":{"summary":"Bull / Bear index","operationId":"bullBearIndex","description":"The current Bull/Bear reading (a 15-minute snapshot — no history). Omit `coin`\nfor the market-wide index, or pass a coin slug for a per-coin reading.","parameters":[{"in":"query","name":"coin","description":"Coin slug for a per-coin reading; omit for the market index.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Coin slug for a per-coin reading; omit for the market index.","example":"bitcoin"}}],"responses":[],"tags":["Sentiment"]}},"/api/v1/sentiment/altseason":{"get":{"summary":"Altseason index","operationId":"altseasonIndex","description":"The current altseason reading (count of coins beating BTC out of the top 100),\nwith optional daily `history`. Unlike Fear & Greed, altseason has full daily\nhistory — pass `days` to include it.","parameters":[{"in":"query","name":"days","description":"Days of daily history to include (1–365; 0/omit = current only).","example":30,"required":false,"schema":{"type":"integer","description":"Days of daily history to include (1–365; 0/omit = current only).","example":30,"nullable":true}}],"responses":[],"tags":["Sentiment"]}},"/api/v1/sentiment/indicators":{"get":{"summary":"Market indicator tally","operationId":"marketIndicatorTally","description":"The market-wide technical tally — 25 indicator categories rolled up, each with\nits current state, score and category data.","parameters":[],"responses":[],"tags":["Sentiment"]}},"/api/v1/coins/{slug}/indicators":{"get":{"summary":"Indicator snapshot","operationId":"indicatorSnapshot","description":"The multi-indicator snapshot — every indicator category's latest `state`\n(bullish/bearish/sheepish…), `score` and raw `data`, in one payload. Ideal\nfor a dashboard at-a-glance read; use the dedicated per-indicator endpoints\nbelow for full daily history.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"indicator":"OBV","state":"bearish","score":-1,"data":{"value":1755907904411,"window":21}},{"indicator":"macd","state":"bullish","score":1,"data":{"value":-2811.87686067,"signal":-3364.35539147,"histogram":552.4785308}}],"meta":{"coin":"bitcoin"}},"properties":{"data":{"type":"array","example":[{"indicator":"OBV","state":"bearish","score":-1,"data":{"value":1755907904411,"window":21}},{"indicator":"macd","state":"bullish","score":1,"data":{"value":-2811.87686067,"signal":-3364.35539147,"histogram":552.4785308}}],"items":{"type":"object","properties":{"indicator":{"type":"string","example":"OBV"},"state":{"type":"string","example":"bearish"},"score":{"type":"integer","example":-1},"data":{"type":"object","properties":{"value":{"type":"integer","example":1755907904411},"window":{"type":"integer","example":21}}}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"}}}}}}}},"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"No indicator data for this coin yet."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"No indicator data for this coin yet."}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/rsi":{"get":{"summary":"RSI (Relative Strength Index)","operationId":"rSIRelativeStrengthIndex","description":"Daily Relative Strength Index — a momentum oscillator bounded 0–100 that\nmeasures the speed and magnitude of recent price moves. Above 70 is\nconventionally overbought, below 30 oversold. Windows: 7, 14, 21, 28 days\n(default 14) — the 21- and 28-day windows require the Starter plan or higher.\nYoung coins return leading warm-up `null`s.","parameters":[{"in":"query","name":"period","description":"Window length — one of 7, 14, 21, 28 (default 14).","example":14,"required":false,"schema":{"type":"integer","description":"Window length — one of 7, 14, 21, 28 (default 14).","example":14}},{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":42},{"date":"2026-06-15","value":46}],"meta":{"coin":"bitcoin","indicator":"rsi","period":14,"count":2}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":42},{"date":"2026-06-15","value":46}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"integer","example":42}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"rsi"},"period":{"type":"integer","example":14},"count":{"type":"integer","example":2}}}}}}}},"403":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"plan_required","message":"The 28-day rsi window requires the Starter plan or higher.","details":{"required_plan":"starter"}}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"plan_required"},"message":{"type":"string","example":"The 28-day rsi window requires the Starter plan or higher."},"details":{"type":"object","properties":{"required_plan":{"type":"string","example":"starter"}}}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/stoch-rsi":{"get":{"summary":"Stochastic RSI","operationId":"stochasticRSI","description":"Daily Stochastic RSI — applies the stochastic oscillator to RSI itself,\ngiving a faster, more sensitive 0–100 momentum read with `%K` and `%D` lines\nthat cross to signal turns. Windows: 7, 14, 21, 28 days (default 14) — the\n21- and 28-day windows require the Starter plan or higher.","parameters":[{"in":"query","name":"period","description":"Window length — one of 7, 14, 21, 28 (default 14).","example":14,"required":false,"schema":{"type":"integer","description":"Window length — one of 7, 14, 21, 28 (default 14).","example":14}},{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","k":18.4,"d":22.1}],"meta":{"coin":"bitcoin","indicator":"stoch-rsi","period":14,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","k":18.4,"d":22.1}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"k":{"type":"number","example":18.4},"d":{"type":"number","example":22.1}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"stoch-rsi"},"period":{"type":"integer","example":14},"count":{"type":"integer","example":1}}}}}}}},"403":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"plan_required","message":"The 28-day stoch-rsi window requires the Starter plan or higher.","details":{"required_plan":"starter"}}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"plan_required"},"message":{"type":"string","example":"The 28-day stoch-rsi window requires the Starter plan or higher."},"details":{"type":"object","properties":{"required_plan":{"type":"string","example":"starter"}}}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/sma":{"get":{"summary":"SMA (Simple Moving Average)","operationId":"sMASimpleMovingAverage","description":"Daily Simple Moving Average — the arithmetic mean of the closing price over\nthe window, the classic trend baseline traders read for support, resistance\nand golden/death crosses. Windows: 50, 100, 200 days (default 50). Values are\ndecimal strings on the price scale.","parameters":[{"in":"query","name":"period","description":"Window length — one of 50, 100, 200 (default 50).","example":50,"required":false,"schema":{"type":"integer","description":"Window length — one of 50, 100, 200 (default 50).","example":50}},{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":"63120.44821000"}],"meta":{"coin":"bitcoin","indicator":"sma","period":50,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":"63120.44821000"}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"string","example":"63120.44821000"}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"sma"},"period":{"type":"integer","example":50},"count":{"type":"integer","example":1}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/cci":{"get":{"summary":"CCI (Commodity Channel Index)","operationId":"cCICommodityChannelIndex","description":"Daily Commodity Channel Index — measures how far price has deviated from its\nstatistical mean; readings beyond ±100 flag strong trends or potential\nreversals. Windows: 20, 50, 100 days (default 20).","parameters":[{"in":"query","name":"period","description":"Window length — one of 20, 50, 100 (default 20).","example":20,"required":false,"schema":{"type":"integer","description":"Window length — one of 20, 50, 100 (default 20).","example":20}},{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":-83.5}],"meta":{"coin":"bitcoin","indicator":"cci","period":20,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":-83.5}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"number","example":-83.5}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"cci"},"period":{"type":"integer","example":20},"count":{"type":"integer","example":1}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/mfi":{"get":{"summary":"MFI (Money Flow Index)","operationId":"mFIMoneyFlowIndex","description":"Daily Money Flow Index — a volume-weighted RSI (0–100) that factors trading\nvolume into momentum, often called \"volume RSI\"; above 80 overbought, below\n20 oversold. Windows: 7, 14, 28 days (default 14).","parameters":[{"in":"query","name":"period","description":"Window length — one of 7, 14, 28 (default 14).","example":14,"required":false,"schema":{"type":"integer","description":"Window length — one of 7, 14, 28 (default 14).","example":14}},{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":57.2}],"meta":{"coin":"bitcoin","indicator":"mfi","period":14,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":57.2}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"number","example":57.2}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"mfi"},"period":{"type":"integer","example":14},"count":{"type":"integer","example":1}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/williams-r":{"get":{"summary":"Williams %R","operationId":"williamsR","description":"Daily Williams %R — a momentum oscillator bounded −100–0 that maps where the\nclose sits within the recent high-low range; above −20 overbought, below −80\noversold. Windows: 14, 20, 50 days (default 14).","parameters":[{"in":"query","name":"period","description":"Window length — one of 14, 20, 50 (default 14).","example":14,"required":false,"schema":{"type":"integer","description":"Window length — one of 14, 20, 50 (default 14).","example":14}},{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":-72.4}],"meta":{"coin":"bitcoin","indicator":"williams-r","period":14,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":-72.4}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"number","example":-72.4}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"williams-r"},"period":{"type":"integer","example":14},"count":{"type":"integer","example":1}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/price-volatility":{"get":{"summary":"Price volatility","operationId":"priceVolatility","description":"Daily price-volatility index — the dispersion of daily returns over the\nwindow, a normalized read on how choppy price action has been. Windows: 7,\n14, 30 days (default 7) — the 30-day window requires the Starter plan or\nhigher.","parameters":[{"in":"query","name":"period","description":"Window length — one of 7, 14, 30 (default 7).","example":7,"required":false,"schema":{"type":"integer","description":"Window length — one of 7, 14, 30 (default 7).","example":7}},{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":3.18}],"meta":{"coin":"bitcoin","indicator":"price-volatility","period":7,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":3.18}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"number","example":3.18}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"price-volatility"},"period":{"type":"integer","example":7},"count":{"type":"integer","example":1}}}}}}}},"403":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"plan_required","message":"The 30-day price-volatility window requires the Starter plan or higher.","details":{"required_plan":"starter"}}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"plan_required"},"message":{"type":"string","example":"The 30-day price-volatility window requires the Starter plan or higher."},"details":{"type":"object","properties":{"required_plan":{"type":"string","example":"starter"}}}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/volume-volatility":{"get":{"summary":"Volume volatility","operationId":"volumeVolatility","description":"Daily volume-volatility index — the dispersion of daily trading volume over\nthe window, a read on how erratic participation has been. Windows: 7, 14, 30\ndays (default 7) — the 30-day window requires the Starter plan or higher.","parameters":[{"in":"query","name":"period","description":"Window length — one of 7, 14, 30 (default 7).","example":7,"required":false,"schema":{"type":"integer","description":"Window length — one of 7, 14, 30 (default 7).","example":7}},{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":12.6}],"meta":{"coin":"bitcoin","indicator":"volume-volatility","period":7,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":12.6}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"number","example":12.6}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"volume-volatility"},"period":{"type":"integer","example":7},"count":{"type":"integer","example":1}}}}}}}},"403":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"plan_required","message":"The 30-day volume-volatility window requires the Starter plan or higher.","details":{"required_plan":"starter"}}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"plan_required"},"message":{"type":"string","example":"The 30-day volume-volatility window requires the Starter plan or higher."},"details":{"type":"object","properties":{"required_plan":{"type":"string","example":"starter"}}}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/macd":{"get":{"summary":"MACD","operationId":"mACD","description":"Daily MACD (Moving Average Convergence Divergence) — the 12/26 EMA spread with\na 9-period signal line and histogram, a staple trend-and-momentum indicator\nread for signal-line crossovers and zero-line shifts. Returns `macd`, `signal`\nand `histogram` as decimal strings. No window parameter.","parameters":[{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","macd":"-2811.87686067","signal":"-3364.35539147","histogram":"552.47853080"}],"meta":{"coin":"bitcoin","indicator":"macd","period":null,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","macd":"-2811.87686067","signal":"-3364.35539147","histogram":"552.47853080"}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"macd":{"type":"string","example":"-2811.87686067"},"signal":{"type":"string","example":"-3364.35539147"},"histogram":{"type":"string","example":"552.47853080"}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"macd"},"period":{"type":"string","example":null,"nullable":true},"count":{"type":"integer","example":1}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/obv":{"get":{"summary":"OBV (On-Balance Volume)","operationId":"oBVOnBalanceVolume","description":"Daily On-Balance Volume — a cumulative volume line that adds volume on up days\nand subtracts it on down days, tracking net buying vs. selling pressure and\nconfirming (or diverging from) price trends. Single decimal-string series.","parameters":[{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":"1755907904411"}],"meta":{"coin":"bitcoin","indicator":"obv","period":null,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":"1755907904411"}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"string","example":"1755907904411"}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"obv"},"period":{"type":"string","example":null,"nullable":true},"count":{"type":"integer","example":1}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/adx":{"get":{"summary":"ADX (Average Directional Index)","operationId":"aDXAverageDirectionalIndex","description":"Daily ADX with +DI/−DI — measures trend *strength* (`adx`) and *direction*\n(the `plus_di`/`minus_di` directional indicators). ADX above 25 signals a\nstrong trend regardless of direction; the DI crossover signals which way.\nSingle series, no window parameter.","parameters":[{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","adx":27.3,"plus_di":22.1,"minus_di":15.8}],"meta":{"coin":"bitcoin","indicator":"adx","period":null,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","adx":27.3,"plus_di":22.1,"minus_di":15.8}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"adx":{"type":"number","example":27.3},"plus_di":{"type":"number","example":22.1},"minus_di":{"type":"number","example":15.8}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"adx"},"period":{"type":"string","example":null,"nullable":true},"count":{"type":"integer","example":1}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/vwap":{"get":{"summary":"VWAP (Volume-Weighted Average Price)","operationId":"vWAPVolumeWeightedAveragePrice","description":"Daily VWAP — the average price weighted by volume, a core fair-value and\nexecution reference; price above VWAP reads bullish, below bearish. Single\ndecimal-string series, no window parameter.","parameters":[{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":"62880.10000000"}],"meta":{"coin":"bitcoin","indicator":"vwap","period":null,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":"62880.10000000"}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"string","example":"62880.10000000"}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"vwap"},"period":{"type":"string","example":null,"nullable":true},"count":{"type":"integer","example":1}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/indicators/cmf":{"get":{"summary":"CMF (Chaikin Money Flow)","operationId":"cMFChaikinMoneyFlow","description":"Daily Chaikin Money Flow — sums money-flow volume over the period to gauge\naccumulation vs. distribution; positive reads as net buying pressure, negative\nas selling. Bounded around ±1. Single series, no window parameter.","parameters":[{"in":"query","name":"start","description":"ISO date lower bound.","example":"2026-06-01","required":false,"schema":{"type":"string","description":"ISO date lower bound.","example":"2026-06-01"}},{"in":"query","name":"end","description":"ISO date upper bound.","example":"2026-06-30","required":false,"schema":{"type":"string","description":"ISO date upper bound.","example":"2026-06-30"}},{"in":"query","name":"limit","description":"Max rows (1–1000, default 365).","example":30,"required":false,"schema":{"type":"integer","description":"Max rows (1–1000, default 365).","example":30}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-06-14","value":0.14}],"meta":{"coin":"bitcoin","indicator":"cmf","period":null,"count":1}},"properties":{"data":{"type":"array","example":[{"date":"2026-06-14","value":0.14}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-14"},"value":{"type":"number","example":0.14}}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"indicator":{"type":"string","example":"cmf"},"period":{"type":"string","example":null,"nullable":true},"count":{"type":"integer","example":1}}}}}}}}},"tags":["Indicators"]},"parameters":[{"in":"path","name":"slug","description":"The coin slug.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/liquidations":{"get":{"summary":"Liquidation feed","operationId":"liquidationFeed","description":"The raw liquidation feed (~last 48h, then pruned), newest first. Source coverage\nis currently OKX swap markets. Prices are decimal strings. `meta` carries the\npagination fields plus a `retention` and `note`.","parameters":[{"in":"query","name":"page","description":"Page number (1-based). Must be at least 1.","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based). Must be at least 1.","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"required":false,"schema":{"type":"integer","description":"Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.","example":50,"nullable":true}},{"in":"query","name":"exchange","description":"Restrict to a single exchange by slug. Source coverage is currently OKX swap markets. Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"okx","required":false,"schema":{"type":"string","description":"Restrict to a single exchange by slug. Source coverage is currently OKX swap markets. Must match the regex /^[a-z0-9\\-]{1,120}$/.","example":"okx","nullable":true}},{"in":"query","name":"instrument","description":"Instrument type: future, option, swap, spot or margin.","example":"swap","required":false,"schema":{"type":"string","description":"Instrument type: future, option, swap, spot or margin.","example":"swap","enum":["future","option","swap","spot","margin"],"nullable":true}},{"in":"query","name":"position","description":"Liquidated position side: long or short.","example":"short","required":false,"schema":{"type":"string","description":"Liquidated position side: long or short.","example":"short","enum":["long","short"],"nullable":true}},{"in":"query","name":"order","description":"Fill side that triggered the liquidation: buy or sell.","example":"buy","required":false,"schema":{"type":"string","description":"Fill side that triggered the liquidation: buy or sell.","example":"buy","enum":["buy","sell"],"nullable":true}},{"in":"query","name":"symbol","description":"Prefix match on the venue instId (e.g. BTC matches BTC-USDT-SWAP). Must match the regex /^[A-Za-z0-9$\\.\\-]{1,25}$/.","example":"BTC","required":false,"schema":{"type":"string","description":"Prefix match on the venue instId (e.g. BTC matches BTC-USDT-SWAP). Must match the regex /^[A-Za-z0-9$\\.\\-]{1,25}$/.","example":"BTC","nullable":true}},{"in":"query","name":"min_usd","description":"Only liquidations with a USD value at or above this threshold. Must be at least 0.","example":1000,"required":false,"schema":{"type":"number","description":"Only liquidations with a USD value at or above this threshold. Must be at least 0.","example":1000,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"symbol":"NEAR-USDT-SWAP","exchange":{"id":20,"slug":"okx","name":"OKX"},"instrument":"swap","position":"short","order":"buy","price":"2.245","value_usd":5727.73,"quantity":259.1,"liquidated_at":"2026-06-21T07:39:41+00:00"}],"meta":{"current_page":1,"per_page":50,"total":4681,"last_page":94,"retention":"~48 hours (raw feed is pruned)","note":"Source coverage: OKX swap markets."}},"properties":{"data":{"type":"array","example":[{"symbol":"NEAR-USDT-SWAP","exchange":{"id":20,"slug":"okx","name":"OKX"},"instrument":"swap","position":"short","order":"buy","price":"2.245","value_usd":5727.73,"quantity":259.1,"liquidated_at":"2026-06-21T07:39:41+00:00"}],"items":{"type":"object","properties":{"symbol":{"type":"string","example":"NEAR-USDT-SWAP"},"exchange":{"type":"object","properties":{"id":{"type":"integer","example":20},"slug":{"type":"string","example":"okx"},"name":{"type":"string","example":"OKX"}}},"instrument":{"type":"string","example":"swap"},"position":{"type":"string","example":"short"},"order":{"type":"string","example":"buy"},"price":{"type":"string","example":"2.245"},"value_usd":{"type":"number","example":5727.73},"quantity":{"type":"number","example":259.1},"liquidated_at":{"type":"string","example":"2026-06-21T07:39:41+00:00"}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"per_page":{"type":"integer","example":50},"total":{"type":"integer","example":4681},"last_page":{"type":"integer","example":94},"retention":{"type":"string","example":"~48 hours (raw feed is pruned)"},"note":{"type":"string","example":"Source coverage: OKX swap markets."}}}}}}}}},"tags":["Liquidations"]}},"/api/v1/liquidations/hourly":{"get":{"summary":"Hourly liquidations","operationId":"hourlyLiquidations","description":"Hourly long/short USD totals over the raw feed. Because the raw feed is pruned at\n~48h, `hours` is capped at 48. Source coverage is currently OKX swap markets.","parameters":[{"in":"query","name":"hours","description":"Look-back window in hours (1–48, default 24).","example":24,"required":false,"schema":{"type":"integer","description":"Look-back window in hours (1–48, default 24).","example":24,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"hour":"2026-07-03T08:00:00+00:00","liquidations":112,"total_usd":1834567.21,"long_usd":1034567.11,"short_usd":800000.1}],"meta":{"hours":24,"note":"Source coverage: OKX swap markets."}},"properties":{"data":{"type":"array","example":[{"hour":"2026-07-03T08:00:00+00:00","liquidations":112,"total_usd":1834567.21,"long_usd":1034567.11,"short_usd":800000.1}],"items":{"type":"object","properties":{"hour":{"type":"string","example":"2026-07-03T08:00:00+00:00"},"liquidations":{"type":"integer","example":112},"total_usd":{"type":"number","example":1834567.21},"long_usd":{"type":"number","example":1034567.11},"short_usd":{"type":"number","example":800000.1}}}},"meta":{"type":"object","properties":{"hours":{"type":"integer","example":24},"note":{"type":"string","example":"Source coverage: OKX swap markets."}}}}}}}}},"tags":["Liquidations"]}},"/api/v1/liquidations/daily":{"get":{"summary":"Daily liquidations","operationId":"dailyLiquidations","description":"Daily aggregates (kept forever), summed across exchanges/instruments per day —\ntotal/long/short USD plus long/short position counts. Today's row is partial and\nupdates every ~15 minutes. Source coverage is currently OKX swap markets.","parameters":[{"in":"query","name":"days","description":"Number of calendar days incl. today (1–365, default 30).","example":30,"required":false,"schema":{"type":"integer","description":"Number of calendar days incl. today (1–365, default 30).","example":30,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-07-02","total_usd":27888888.76,"long_usd":18345672.1,"short_usd":9543216.66,"longs":4231,"shorts":2614}],"meta":{"days":30,"note":"Source coverage: OKX swap markets."}},"properties":{"data":{"type":"array","example":[{"date":"2026-07-02","total_usd":27888888.76,"long_usd":18345672.1,"short_usd":9543216.66,"longs":4231,"shorts":2614}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-07-02"},"total_usd":{"type":"number","example":27888888.76},"long_usd":{"type":"number","example":18345672.1},"short_usd":{"type":"number","example":9543216.66},"longs":{"type":"integer","example":4231},"shorts":{"type":"integer","example":2614}}}},"meta":{"type":"object","properties":{"days":{"type":"integer","example":30},"note":{"type":"string","example":"Source coverage: OKX swap markets."}}}}}}}}},"tags":["Liquidations"]}},"/api/v1/liquidations/summary":{"get":{"summary":"Today's liquidation summary","operationId":"todaysLiquidationSummary","description":"Today so far — total/long/short USD, position counts and long-vs-short\n`dominance`. Figures are partial and update every ~15 minutes; `data` is null\nuntil the first liquidation of the day is recorded. Source coverage is currently\nOKX swap markets.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"date":"2026-07-03","total_usd":12345678.9,"long_usd":8345678.9,"short_usd":4000000,"longs":1834,"shorts":961,"dominance":{"long":67.6,"short":32.4}},"meta":{"note":"Source coverage: OKX swap markets. Today's figures are partial and update every ~15 minutes."}},"properties":{"data":{"type":"object","properties":{"date":{"type":"string","example":"2026-07-03"},"total_usd":{"type":"number","example":12345678.9},"long_usd":{"type":"number","example":8345678.9},"short_usd":{"type":"integer","example":4000000},"longs":{"type":"integer","example":1834},"shorts":{"type":"integer","example":961},"dominance":{"type":"object","properties":{"long":{"type":"number","example":67.6},"short":{"type":"number","example":32.4}}}}},"meta":{"type":"object","properties":{"note":{"type":"string","example":"Source coverage: OKX swap markets. Today's figures are partial and update every ~15 minutes."}}}}}}}}},"tags":["Liquidations"]}},"/api/v1/liquidations/netflow":{"get":{"summary":"Liquidation netflow","operationId":"liquidationNetflow","description":"Long-vs-short liquidation USD flow per day over the window. Source coverage is\ncurrently OKX swap markets.","parameters":[{"in":"query","name":"days","description":"Number of calendar days incl. today (1–90, default 30).","example":30,"required":false,"schema":{"type":"integer","description":"Number of calendar days incl. today (1–90, default 30).","example":30,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"date":"2026-07-02","long":1834567.21,"short":954321.55,"total":2788888.76,"longs":420,"shorts":261}],"meta":{"days":30,"note":"Source coverage: OKX swap markets."}},"properties":{"data":{"type":"array","example":[{"date":"2026-07-02","long":1834567.21,"short":954321.55,"total":2788888.76,"longs":420,"shorts":261}],"items":{"type":"object","properties":{"date":{"type":"string","example":"2026-07-02"},"long":{"type":"number","example":1834567.21},"short":{"type":"number","example":954321.55},"total":{"type":"number","example":2788888.76},"longs":{"type":"integer","example":420},"shorts":{"type":"integer","example":261}}}},"meta":{"type":"object","properties":{"days":{"type":"integer","example":30},"note":{"type":"string","example":"Source coverage: OKX swap markets."}}}}}}}}},"tags":["Liquidations"]}},"/api/v1/liquidations/coins":{"get":{"summary":"Top liquidated coins","operationId":"topLiquidatedCoins","description":"Top coins by liquidation volume over the recent window, with the long/short USD\nsplit per coin. Source coverage is currently OKX swap markets.","parameters":[{"in":"query","name":"hours","description":"Look-back window in hours (1–48, default 24).","example":24,"required":false,"schema":{"type":"integer","description":"Look-back window in hours (1–48, default 24).","example":24,"nullable":true}},{"in":"query","name":"limit","description":"Number of coins to return (1–20, default 8).","example":8,"required":false,"schema":{"type":"integer","description":"Number of coins to return (1–20, default 8).","example":8,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"symbol":"BTC","name":"Bitcoin","slug":"bitcoin","logo":"https://bitculator.com/storage/media/assets/bitcoin-small.png","long":734567.21,"short":954321.55,"total":1688888.76}],"meta":{"hours":24,"note":"Source coverage: OKX swap markets."}},"properties":{"data":{"type":"array","example":[{"symbol":"BTC","name":"Bitcoin","slug":"bitcoin","logo":"https://bitculator.com/storage/media/assets/bitcoin-small.png","long":734567.21,"short":954321.55,"total":1688888.76}],"items":{"type":"object","properties":{"symbol":{"type":"string","example":"BTC"},"name":{"type":"string","example":"Bitcoin"},"slug":{"type":"string","example":"bitcoin"},"logo":{"type":"string","example":"https://bitculator.com/storage/media/assets/bitcoin-small.png"},"long":{"type":"number","example":734567.21},"short":{"type":"number","example":954321.55},"total":{"type":"number","example":1688888.76}}}},"meta":{"type":"object","properties":{"hours":{"type":"integer","example":24},"note":{"type":"string","example":"Source coverage: OKX swap markets."}}}}}}}}},"tags":["Liquidations"]}},"/api/v1/convert":{"get":{"summary":"Convert between assets","operationId":"convertBetweenAssets","description":"Server-side conversion between any two active assets (crypto AND fiat). `to`\naccepts a CSV for multi-target conversion; reversing is just swapping `from`/`to`.\nConversion is linear, so `value = unit_rate * amount`. Fiat FX rates refresh\n~twice daily; crypto rates ~every minute.","parameters":[{"in":"query","name":"from","description":"Source asset slug.","example":"bitcoin","required":true,"schema":{"type":"string","description":"Source asset slug.","example":"bitcoin"}},{"in":"query","name":"to","description":"Target asset slug(s), comma-separated (up to 10).","example":"ethereum","required":true,"schema":{"type":"string","description":"Target asset slug(s), comma-separated (up to 10).","example":"ethereum"}},{"in":"query","name":"amount","description":"Amount of the source asset to convert (default 1).","example":2.5,"required":false,"schema":{"type":"number","description":"Amount of the source asset to convert (default 1).","example":2.5,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"from":{"slug":"bitcoin","symbol":"BTC"},"amount":1,"results":[{"slug":"ethereum","symbol":"ETH","value":"37.980395960595"}]}},"properties":{"data":{"type":"object","properties":{"from":{"type":"object","properties":{"slug":{"type":"string","example":"bitcoin"},"symbol":{"type":"string","example":"BTC"}}},"amount":{"type":"integer","example":1},"results":{"type":"array","example":[{"slug":"ethereum","symbol":"ETH","value":"37.980395960595"}],"items":{"type":"object","properties":{"slug":{"type":"string","example":"ethereum"},"symbol":{"type":"string","example":"ETH"},"value":{"type":"string","example":"37.980395960595"}}}}}}}}}}},"404":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"error":{"code":"not_found","message":"Unknown currency: dogecoinx."}},"properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string","example":"Unknown currency: dogecoinx."}}}}}}}}},"tags":["Conversion"]}},"/api/v1/fiats":{"get":{"summary":"List fiat currencies","operationId":"listFiatCurrencies","description":"The active fiat currencies with their USD FX rates: `rate_per_usd` (units per\nUSD) and its inverse `usd_value`. Fiat FX rates refresh ~twice daily.","parameters":[],"responses":[],"tags":["Conversion"]}},"/api/v1/rates":{"get":{"summary":"List conversion rates","operationId":"listConversionRates","description":"The vs-currencies usable as conversion legs — the top fiats, coins and tokens —\neach with a normalized `usd_value` (USD per one unit). Coin/token values refresh\n~every minute; the slow fiat rates are cached separately (~twice daily).","parameters":[],"responses":[],"tags":["Conversion"]}},"/api/v1/calculators/dca":{"get":{"summary":"DCA calculator","operationId":"dCACalculator","description":"Dollar-cost averaging backtest over the coin's real daily price history: one buy\nof `amount` per `interval` between `start` and `end`. Pass `series=true` to\ninclude the full per-purchase series.","parameters":[{"in":"query","name":"slug","description":"The coin's slug identifier.","example":"bitcoin","required":true,"schema":{"type":"string","description":"The coin's slug identifier.","example":"bitcoin"}},{"in":"query","name":"amount","description":"USD spent per purchase (0.01–1,000,000,000).","example":100,"required":true,"schema":{"type":"number","description":"USD spent per purchase (0.01–1,000,000,000).","example":100}},{"in":"query","name":"interval","description":"Purchase cadence: `daily`, `weekly`, `monthly`, `quarterly` or `yearly`.","example":"weekly","required":true,"schema":{"type":"string","description":"Purchase cadence: `daily`, `weekly`, `monthly`, `quarterly` or `yearly`.","example":"weekly"}},{"in":"query","name":"start","description":"date First purchase date (after 2008-12-31).","example":"2024-01-01","required":true,"schema":{"type":"string","description":"date First purchase date (after 2008-12-31).","example":"2024-01-01"}},{"in":"query","name":"end","description":"date Last purchase date (defaults to today).","example":"2025-01-01","required":false,"schema":{"type":"string","description":"date Last purchase date (defaults to today).","example":"2025-01-01","nullable":true}},{"in":"query","name":"series","description":"Include the per-purchase series in the payload.","example":false,"required":false,"schema":{"type":"boolean","description":"Include the per-purchase series in the payload.","example":false,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"summary":{"purchases":53,"invested":5300,"accumulated":0.0754210998,"final_value":7098.9,"profit":1798.9,"roi":33.94},"series":null},"meta":{"coin":"bitcoin","interval":"weekly","start":"2024-01-01","end":"2025-01-01","amount_per_buy":100,"currency":"USD"}},"properties":{"data":{"type":"object","properties":{"summary":{"type":"object","properties":{"purchases":{"type":"integer","example":53},"invested":{"type":"integer","example":5300},"accumulated":{"type":"number","example":0.0754210998},"final_value":{"type":"number","example":7098.9},"profit":{"type":"number","example":1798.9},"roi":{"type":"number","example":33.94}}},"series":{"type":"string","example":null,"nullable":true}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"interval":{"type":"string","example":"weekly"},"start":{"type":"string","example":"2024-01-01"},"end":{"type":"string","example":"2025-01-01"},"amount_per_buy":{"type":"integer","example":100},"currency":{"type":"string","example":"USD"}}}}}}}}},"tags":["Calculators"]}},"/api/v1/calculators/profit-loss":{"get":{"summary":"Profit / loss calculator","operationId":"profitLossCalculator","description":"What a buy-then-sell between two historical dates returned, using the coin's real\nprices on those dates. Fees are flat USD amounts, not percentages.","parameters":[{"in":"query","name":"slug","description":"The coin's slug identifier.","example":"bitcoin","required":true,"schema":{"type":"string","description":"The coin's slug identifier.","example":"bitcoin"}},{"in":"query","name":"amount","description":"USD invested at `buy_date` (0.01–1,000,000,000).","example":1000,"required":true,"schema":{"type":"number","description":"USD invested at `buy_date` (0.01–1,000,000,000).","example":1000}},{"in":"query","name":"buy_date","description":"date Purchase date.","example":"2023-01-01","required":true,"schema":{"type":"string","description":"date Purchase date.","example":"2023-01-01"}},{"in":"query","name":"sell_date","description":"date Sale date (on/after `buy_date`).","example":"2025-01-01","required":true,"schema":{"type":"string","description":"date Sale date (on/after `buy_date`).","example":"2025-01-01"}},{"in":"query","name":"buy_fee","description":"Flat purchase fee in USD (default 0).","example":10,"required":false,"schema":{"type":"number","description":"Flat purchase fee in USD (default 0).","example":10,"nullable":true}},{"in":"query","name":"sell_fee","description":"Flat sale fee in USD (default 0).","example":10,"required":false,"schema":{"type":"number","description":"Flat sale fee in USD (default 0).","example":10,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"buy_price":"16625.08","sell_price":"93429.2","quantity":0.0595486254,"investment_worth":5563.58,"total_fees":20,"profit":4553.58,"roi":455.36},"meta":{"coin":"bitcoin","amount":1000,"buy_date":"2023-01-01","sell_date":"2025-01-01","buy_fee":10,"sell_fee":10,"currency":"USD"}},"properties":{"data":{"type":"object","properties":{"buy_price":{"type":"string","example":"16625.08"},"sell_price":{"type":"string","example":"93429.2"},"quantity":{"type":"number","example":0.0595486254},"investment_worth":{"type":"number","example":5563.58},"total_fees":{"type":"integer","example":20},"profit":{"type":"number","example":4553.58},"roi":{"type":"number","example":455.36}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"amount":{"type":"integer","example":1000},"buy_date":{"type":"string","example":"2023-01-01"},"sell_date":{"type":"string","example":"2025-01-01"},"buy_fee":{"type":"integer","example":10},"sell_fee":{"type":"integer","example":10},"currency":{"type":"string","example":"USD"}}}}}}}}},"tags":["Calculators"]}},"/api/v1/calculators/compound-interest":{"get":{"summary":"Compound interest calculator","operationId":"compoundInterestCalculator","description":"Pure math — no market data. Note that the rate applies PER COMPOUNDING PERIOD\n(the web calculator's convention), not per year.","parameters":[{"in":"query","name":"principal","description":"Starting balance in USD.","example":10000,"required":true,"schema":{"type":"number","description":"Starting balance in USD.","example":10000}},{"in":"query","name":"rate","description":"Interest rate in % per compounding period.","example":1,"required":true,"schema":{"type":"number","description":"Interest rate in % per compounding period.","example":1}},{"in":"query","name":"duration","description":"Length of the projection (years are capped at 50).","example":5,"required":true,"schema":{"type":"integer","description":"Length of the projection (years are capped at 50).","example":5}},{"in":"query","name":"duration_unit","description":"`years` (default) or `months`.","example":"years","required":false,"schema":{"type":"string","description":"`years` (default) or `months`.","example":"years","nullable":true}},{"in":"query","name":"compound_frequency","description":"`daily`, `weekly`, `monthly` (default), `quarterly` or `annually`.","example":"monthly","required":false,"schema":{"type":"string","description":"`daily`, `weekly`, `monthly` (default), `quarterly` or `annually`.","example":"monthly","nullable":true}},{"in":"query","name":"contribution","description":"Recurring deposit in USD (default 0).","example":100,"required":false,"schema":{"type":"number","description":"Recurring deposit in USD (default 0).","example":100,"nullable":true}},{"in":"query","name":"contribution_frequency","description":"`daily`, `weekly`, `monthly` (default), `quarterly` or `annually`.","example":"monthly","required":false,"schema":{"type":"string","description":"`daily`, `weekly`, `monthly` (default), `quarterly` or `annually`.","example":"monthly","nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"final_balance":24471.19,"total_contributions":16000,"total_interest":8471.19,"roi":52.94},"meta":{"note":"The rate applies per compounding period (web calculator parity), not per year."}},"properties":{"data":{"type":"object","properties":{"final_balance":{"type":"number","example":24471.19},"total_contributions":{"type":"integer","example":16000},"total_interest":{"type":"number","example":8471.19},"roi":{"type":"number","example":52.94}}},"meta":{"type":"object","properties":{"note":{"type":"string","example":"The rate applies per compounding period (web calculator parity), not per year."}}}}}}}}},"tags":["Calculators"]}},"/api/v1/calculators/loan":{"get":{"summary":"Loan vs sell calculator","operationId":"loanVsSellCalculator","description":"Borrow against crypto vs sell it — compares both scenarios using the coin's\nCURRENT price. Informational projection, not financial advice.","parameters":[{"in":"query","name":"slug","description":"The coin's slug identifier.","example":"bitcoin","required":true,"schema":{"type":"string","description":"The coin's slug identifier.","example":"bitcoin"}},{"in":"query","name":"crypto_amount","description":"How much of the coin you hold.","example":2,"required":true,"schema":{"type":"number","description":"How much of the coin you hold.","example":2}},{"in":"query","name":"needed_cash","description":"USD you need to free up.","example":50000,"required":true,"schema":{"type":"number","description":"USD you need to free up.","example":50000}},{"in":"query","name":"term_months","description":"Loan term in months (default 36).","example":36,"required":false,"schema":{"type":"integer","description":"Loan term in months (default 36).","example":36,"nullable":true}},{"in":"query","name":"interest_rate","description":"Loan APR in % (default 10).","example":10,"required":false,"schema":{"type":"number","description":"Loan APR in % (default 10).","example":10,"nullable":true}},{"in":"query","name":"ltv","description":"Loan-to-value ratio in % (default 50).","example":50,"required":false,"schema":{"type":"number","description":"Loan-to-value ratio in % (default 50).","example":50,"nullable":true}},{"in":"query","name":"expected_growth","description":"Expected coin price growth over the term in % (default 25).","example":25,"required":false,"schema":{"type":"number","description":"Expected coin price growth over the term in % (default 25).","example":25,"nullable":true}},{"in":"query","name":"tax_rate","description":"Capital-gains tax in % applied to the sale (default 25).","example":25,"required":false,"schema":{"type":"number","description":"Capital-gains tax in % applied to the sale (default 25).","example":25,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"current_price":"109731.2","collateral_value":219462.4,"max_loan":109731.2,"loan_possible":true,"loan_scenario":{"monthly_payment":1613.4,"total_payback":58082.4,"total_interest":8082.4,"net_value":216296.72},"sell_scenario":{"crypto_sold":0.4556647344,"capital_gains_tax":12500,"net_value":230378.86},"better_scenario":"sell","opportunity_cost":14082.14,"break_even_growth":31.42,"risk_level":"medium"},"meta":{"coin":"bitcoin","currency":"USD","note":"Informational projection — the tax model taxes the full proceeds (no cost basis), matching the web calculator."}},"properties":{"data":{"type":"object","properties":{"current_price":{"type":"string","example":"109731.2"},"collateral_value":{"type":"number","example":219462.4},"max_loan":{"type":"number","example":109731.2},"loan_possible":{"type":"boolean","example":true},"loan_scenario":{"type":"object","properties":{"monthly_payment":{"type":"number","example":1613.4},"total_payback":{"type":"number","example":58082.4},"total_interest":{"type":"number","example":8082.4},"net_value":{"type":"number","example":216296.72}}},"sell_scenario":{"type":"object","properties":{"crypto_sold":{"type":"number","example":0.4556647344},"capital_gains_tax":{"type":"integer","example":12500},"net_value":{"type":"number","example":230378.86}}},"better_scenario":{"type":"string","example":"sell"},"opportunity_cost":{"type":"number","example":14082.14},"break_even_growth":{"type":"number","example":31.42},"risk_level":{"type":"string","example":"medium"}}},"meta":{"type":"object","properties":{"coin":{"type":"string","example":"bitcoin"},"currency":{"type":"string","example":"USD"},"note":{"type":"string","example":"Informational projection — the tax model taxes the full proceeds (no cost basis), matching the web calculator."}}}}}}}}},"tags":["Calculators"]}},"/api/v1/calculators/staking":{"get":{"summary":"Staking rewards calculator","operationId":"stakingRewardsCalculator","description":"Pure math — staking rewards with optional compounding and a validator\ncommission. No market data is read.","parameters":[{"in":"query","name":"amount","description":"Amount staked, in the staked asset's units.","example":1000,"required":true,"schema":{"type":"number","description":"Amount staked, in the staked asset's units.","example":1000}},{"in":"query","name":"period","description":"Length of the staking period (capped at the 50-year equivalent).","example":2,"required":true,"schema":{"type":"number","description":"Length of the staking period (capped at the 50-year equivalent).","example":2}},{"in":"query","name":"period_unit","description":"`years` (default), `months` or `days`.","example":"years","required":false,"schema":{"type":"string","description":"`years` (default), `months` or `days`.","example":"years","nullable":true}},{"in":"query","name":"apy","description":"Advertised APY in %.","example":5,"required":true,"schema":{"type":"number","description":"Advertised APY in %.","example":5}},{"in":"query","name":"compound_frequency","description":"`never`, `daily`, `weekly`, `monthly` (default) or `yearly`.","example":"monthly","required":false,"schema":{"type":"string","description":"`never`, `daily`, `weekly`, `monthly` (default) or `yearly`.","example":"monthly","nullable":true}},{"in":"query","name":"commission","description":"Validator commission in %, taken from rewards (default 0).","example":10,"required":false,"schema":{"type":"number","description":"Validator commission in %, taken from rewards (default 0).","example":10,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"final_balance":1094.42,"total_rewards":94.42,"yearly_reward":47.21,"monthly_reward":3.93,"roi":9.44,"risk_level":"low"}},"properties":{"data":{"type":"object","properties":{"final_balance":{"type":"number","example":1094.42},"total_rewards":{"type":"number","example":94.42},"yearly_reward":{"type":"number","example":47.21},"monthly_reward":{"type":"number","example":3.93},"roi":{"type":"number","example":9.44},"risk_level":{"type":"string","example":"low"}}}}}}}}},"tags":["Calculators"]}},"/api/v1/coins/{slug}/videos":{"get":{"summary":"Coin videos","operationId":"coinVideos","description":"Curated videos attached to a coin (the coin page's Videos tab), paginated.","parameters":[{"in":"query","name":"page","description":"Page number (1-based).","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based).","example":1}},{"in":"query","name":"per_page","description":"Rows per page (1–50, default 10).","example":10,"required":false,"schema":{"type":"integer","description":"Rows per page (1–50, default 10).","example":10}},{"in":"query","name":"type","description":"Filter by video type (e.g. `overview`, `tutorial`, `explainer`, `review`, `analysis`, `news`).","example":"review","required":false,"schema":{"type":"string","description":"Filter by video type (e.g. `overview`, `tutorial`, `explainer`, `review`, `analysis`, `news`).","example":"review"}},{"in":"query","name":"search","description":"Free-text match on the title.","example":"halving","required":false,"schema":{"type":"string","description":"Free-text match on the title.","example":"halving"}}],"responses":[],"tags":["Editorial"]},"parameters":[{"in":"path","name":"slug","description":"The coin's slug identifier.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/coins/{slug}/insights":{"get":{"summary":"Coin insight timeline","operationId":"coinInsightTimeline","description":"The coin's insight timeline — the same payload the asset page's insights panel\nuses, windowed by `offset`/`limit`.","parameters":[{"in":"query","name":"locale","description":"Content language (falls back to English).","example":"en","required":false,"schema":{"type":"string","description":"Content language (falls back to English).","example":"en","nullable":true}},{"in":"query","name":"offset","description":"Rows to skip (0–500, default 0).","example":0,"required":false,"schema":{"type":"integer","description":"Rows to skip (0–500, default 0).","example":0,"nullable":true}},{"in":"query","name":"limit","description":"Rows to return (1–50, default 5).","example":5,"required":false,"schema":{"type":"integer","description":"Rows to return (1–50, default 5).","example":5,"nullable":true}}],"responses":[],"tags":["Editorial"]},"parameters":[{"in":"path","name":"slug","description":"The coin's slug identifier.","example":"bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/articles":{"get":{"summary":"List articles","operationId":"listArticles","description":"Published articles, newest first, paginated. Filter by `tag` or by a related\n`coin` / `exchange` / `wallet` slug, or free-text `search`. Each row is a summary\n(title, subtitle, tags, reading time, hero image, related entities, dates).","parameters":[{"in":"query","name":"page","description":"Page number (1-based).","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based).","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page (1–50, default 20).","example":20,"required":false,"schema":{"type":"integer","description":"Rows per page (1–50, default 20).","example":20,"nullable":true}},{"in":"query","name":"locale","description":"Content language (falls back to English).","example":"en","required":false,"schema":{"type":"string","description":"Content language (falls back to English).","example":"en","nullable":true}},{"in":"query","name":"tag","description":"Filter by tag: news, guide, tutorial, explainer, analysis, review, trading, overview or information.","example":"guide","required":false,"schema":{"type":"string","description":"Filter by tag: news, guide, tutorial, explainer, analysis, review, trading, overview or information.","example":"guide","nullable":true}},{"in":"query","name":"coin","description":"Filter to articles related to this coin slug.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Filter to articles related to this coin slug.","example":"bitcoin","nullable":true}},{"in":"query","name":"exchange","description":"Filter to articles related to this exchange slug.","example":"binance-exchange","required":false,"schema":{"type":"string","description":"Filter to articles related to this exchange slug.","example":"binance-exchange","nullable":true}},{"in":"query","name":"wallet","description":"Filter to articles related to this wallet slug.","example":"frostsnap","required":false,"schema":{"type":"string","description":"Filter to articles related to this wallet slug.","example":"frostsnap","nullable":true}},{"in":"query","name":"search","description":"Free-text match on heading/subheading.","example":"halving","required":false,"schema":{"type":"string","description":"Free-text match on heading/subheading.","example":"halving","nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":14,"slug":"what-is-bitcoin","title":"What Is Bitcoin?","subtitle":"A plain-language introduction to the first cryptocurrency.","locale":"en","tags":["guide","analysis"],"reading_time_minutes":7,"hero_image":"https://bitculator.com/storage/media/articles/what-is-bitcoin.png","entities":[],"published_at":"2026-06-21","updated_at":"2026-06-21"}],"meta":{"current_page":1,"per_page":20,"total":10,"last_page":1}},"properties":{"data":{"type":"array","example":[{"id":14,"slug":"what-is-bitcoin","title":"What Is Bitcoin?","subtitle":"A plain-language introduction to the first cryptocurrency.","locale":"en","tags":["guide","analysis"],"reading_time_minutes":7,"hero_image":"https://bitculator.com/storage/media/articles/what-is-bitcoin.png","entities":[],"published_at":"2026-06-21","updated_at":"2026-06-21"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":14},"slug":{"type":"string","example":"what-is-bitcoin"},"title":{"type":"string","example":"What Is Bitcoin?"},"subtitle":{"type":"string","example":"A plain-language introduction to the first cryptocurrency."},"locale":{"type":"string","example":"en"},"tags":{"type":"array","example":["guide","analysis"],"items":{"type":"string"}},"reading_time_minutes":{"type":"integer","example":7},"hero_image":{"type":"string","example":"https://bitculator.com/storage/media/articles/what-is-bitcoin.png"},"entities":{"type":"array","example":[]},"published_at":{"type":"string","example":"2026-06-21"},"updated_at":{"type":"string","example":"2026-06-21"}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"per_page":{"type":"integer","example":20},"total":{"type":"integer","example":10},"last_page":{"type":"integer","example":1}}}}}}}}},"tags":["Editorial"]}},"/api/v1/articles/{slug}":{"get":{"summary":"Get an article","operationId":"getAnArticle","description":"One published article with its full body, tags, hero image, helpful counters and\nrelated entities. `locale` picks the content language with per-field English\nfallback (the payload reports which locale actually won).","parameters":[{"in":"query","name":"locale","description":"Content language (falls back to English).","example":"en","required":false,"schema":{"type":"string","description":"Content language (falls back to English).","example":"en","nullable":true}}],"responses":[],"tags":["Editorial"]},"parameters":[{"in":"path","name":"slug","description":"The article's slug.","example":"what-is-bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/articles/{slug}/feedback":{"post":{"summary":"Submit article feedback","operationId":"submitArticleFeedback","description":"Registers a thumbs-up/down on an article — the same counters the web's helpful\nbuttons use. Per-key throttling applies upstream.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"article":"what-is-bitcoin","helpful_yes":13,"helpful_no":2}},"properties":{"data":{"type":"object","properties":{"article":{"type":"string","example":"what-is-bitcoin"},"helpful_yes":{"type":"integer","example":13},"helpful_no":{"type":"integer","example":2}}}}}}}}},"tags":["Editorial"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"helpful":{"type":"boolean","description":"`true` for helpful, `false` for not helpful.","example":true}},"required":["helpful"]}}}}},"parameters":[{"in":"path","name":"slug","description":"The article's slug.","example":"what-is-bitcoin","required":true,"schema":{"type":"string"}}]},"/api/v1/videos/{id}":{"get":{"summary":"Get a video","operationId":"getAVideo","description":"One curated video with its YouTube id, title, type, duration and the\ncoins/exchanges/wallets it is attached to.","parameters":[],"responses":[],"tags":["Editorial"]},"parameters":[{"in":"path","name":"id","description":"The video id.","example":87,"required":true,"schema":{"type":"integer"}}]},"/api/v1/insights":{"get":{"summary":"List insights","operationId":"listInsights","description":"AI-generated market insights, paginated. Filter by `type`, a related `coin` slug\nor free-text `search`; `locale` picks the headline/summary language with English\nfallback.","parameters":[{"in":"query","name":"page","description":"Page number (1-based).","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based).","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page (1–50, default 20).","example":20,"required":false,"schema":{"type":"integer","description":"Rows per page (1–50, default 20).","example":20,"nullable":true}},{"in":"query","name":"locale","description":"Content language (falls back to English).","example":"en","required":false,"schema":{"type":"string","description":"Content language (falls back to English).","example":"en","nullable":true}},{"in":"query","name":"type","description":"Filter by insight type: `per_asset`, `market_overview` or `narrative`.","example":"per_asset","required":false,"schema":{"type":"string","description":"Filter by insight type: `per_asset`, `market_overview` or `narrative`.","example":"per_asset","nullable":true}},{"in":"query","name":"coin","description":"Filter to insights about this coin slug.","example":"bitcoin","required":false,"schema":{"type":"string","description":"Filter to insights about this coin slug.","example":"bitcoin","nullable":true}},{"in":"query","name":"search","description":"Free-text match on the headline.","example":"etf","required":false,"schema":{"type":"string","description":"Free-text match on the headline.","example":"etf","nullable":true}},{"in":"query","name":"sort","description":"Sort order: `first_reported` (default) or `last_updated`.","example":"first_reported","required":false,"schema":{"type":"string","description":"Sort order: `first_reported` (default) or `last_updated`.","example":"first_reported","nullable":true}}],"responses":[],"tags":["Editorial"]}},"/api/v1/insights/{id}":{"get":{"summary":"Get an insight","operationId":"getAnInsight","description":"One insight with its full payload — headline, summary, source-article timeline\nand related coins.","parameters":[{"in":"query","name":"locale","description":"Content language (falls back to English).","example":"en","required":false,"schema":{"type":"string","description":"Content language (falls back to English).","example":"en","nullable":true}}],"responses":[],"tags":["Editorial"]},"parameters":[{"in":"path","name":"id","description":"The insight id.","example":101,"required":true,"schema":{"type":"integer"}}]},"/api/v1/alarms":{"get":{"summary":"List alarms","operationId":"listAlarms","description":"The key owner's alarms, newest first, paginated. Filter by `status`, `direction`\nor `notification` channel.","parameters":[{"in":"query","name":"page","description":"Page number (1-based).","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based).","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page (1–100, default 25).","example":25,"required":false,"schema":{"type":"integer","description":"Rows per page (1–100, default 25).","example":25,"nullable":true}},{"in":"query","name":"status","description":"Filter by state: `active` or `triggered`.","example":"active","required":false,"schema":{"type":"string","description":"Filter by state: `active` or `triggered`.","example":"active","nullable":true}},{"in":"query","name":"direction","description":"Filter by trigger direction: `above` or `below`.","example":"above","required":false,"schema":{"type":"string","description":"Filter by trigger direction: `above` or `below`.","example":"above","nullable":true}},{"in":"query","name":"notification","description":"Filter by delivery channel: `email`, `push` or `webhook`.","example":"email","required":false,"schema":{"type":"string","description":"Filter by delivery channel: `email`, `push` or `webhook`.","example":"email","nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":42,"name":"BTC six figures","coin":{"slug":"bitcoin","symbol":"BTC","name":"Bitcoin"},"metric":"rate","direction":"above","target":"100000","notification":"email","status":"active","created_at":"2026-06-21T09:15:00+00:00"}],"meta":{"current_page":1,"per_page":25,"total":3,"last_page":1}},"properties":{"data":{"type":"array","example":[{"id":42,"name":"BTC six figures","coin":{"slug":"bitcoin","symbol":"BTC","name":"Bitcoin"},"metric":"rate","direction":"above","target":"100000","notification":"email","status":"active","created_at":"2026-06-21T09:15:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":42},"name":{"type":"string","example":"BTC six figures"},"coin":{"type":"object","properties":{"slug":{"type":"string","example":"bitcoin"},"symbol":{"type":"string","example":"BTC"},"name":{"type":"string","example":"Bitcoin"}}},"metric":{"type":"string","example":"rate"},"direction":{"type":"string","example":"above"},"target":{"type":"string","example":"100000"},"notification":{"type":"string","example":"email"},"status":{"type":"string","example":"active"},"created_at":{"type":"string","example":"2026-06-21T09:15:00+00:00"}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"per_page":{"type":"integer","example":25},"total":{"type":"integer","example":3},"last_page":{"type":"integer","example":1}}}}}}}}},"tags":["Alarms"]},"post":{"summary":"Create an alarm","operationId":"createAnAlarm","description":"Creates a TARGET alarm on a coin and spends one alarm slot from the key owner's\nbalance. The target is checked against the coin's current value so the alarm\ncannot self-trigger instantly: an `above` alarm must target more than the current\nvalue, a `below` alarm less.","parameters":[],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"id":43,"name":"BTC six figures","coin":{"slug":"bitcoin","symbol":"BTC","name":"Bitcoin"},"metric":"rate","direction":"above","target":"100000","notification":"email","status":"active","created_at":"2026-07-03T08:00:00+00:00"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":43},"name":{"type":"string","example":"BTC six figures"},"coin":{"type":"object","properties":{"slug":{"type":"string","example":"bitcoin"},"symbol":{"type":"string","example":"BTC"},"name":{"type":"string","example":"Bitcoin"}}},"metric":{"type":"string","example":"rate"},"direction":{"type":"string","example":"above"},"target":{"type":"string","example":"100000"},"notification":{"type":"string","example":"email"},"status":{"type":"string","example":"active"},"created_at":{"type":"string","example":"2026-07-03T08:00:00+00:00"}}}}}}}}},"tags":["Alarms"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"A label for the alarm (max 255 characters).","example":"BTC six figures"},"coin":{"type":"string","description":"The coin's slug identifier.","example":"bitcoin"},"metric":{"type":"string","description":"The watched metric: `rate`, `volume` or `marketcap`.","example":"rate"},"direction":{"type":"string","description":"Trigger direction: `above` or `below`.","example":"above"},"target":{"type":"number","description":"The threshold value (must sit on the `direction` side of the coin's current value).","example":100000},"notification":{"type":"string","description":"Delivery channel: `email`, `push` or `webhook`.","example":"email"}},"required":["name","coin","metric","direction","target","notification"]}}}}}},"/api/v1/alarms/{id}":{"delete":{"summary":"Delete an alarm","operationId":"deleteAnAlarm","description":"Deletes one of the key owner's alarms and refunds the alarm slot it consumed.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"deleted":true}},"properties":{"data":{"type":"object","properties":{"deleted":{"type":"boolean","example":true}}}}}}}}},"tags":["Alarms"]},"parameters":[{"in":"path","name":"id","description":"The alarm id.","example":42,"required":true,"schema":{"type":"integer"}}]},"/api/v1/webhooks":{"get":{"summary":"List webhook endpoints","operationId":"listWebhookEndpoints","description":"The key owner's webhook endpoints, newest first. Signing secrets are never\nincluded — each secret is shown exactly once, at creation.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":7,"url":"https://example.com/webhooks/bitculator","events":["alarm.triggered"],"status":"active","consecutive_failures":0,"disabled_at":null,"created_at":"2026-06-20T10:00:00+00:00"}]},"properties":{"data":{"type":"array","example":[{"id":7,"url":"https://example.com/webhooks/bitculator","events":["alarm.triggered"],"status":"active","consecutive_failures":0,"disabled_at":null,"created_at":"2026-06-20T10:00:00+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":7},"url":{"type":"string","example":"https://example.com/webhooks/bitculator"},"events":{"type":"array","example":["alarm.triggered"],"items":{"type":"string"}},"status":{"type":"string","example":"active"},"consecutive_failures":{"type":"integer","example":0},"disabled_at":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-06-20T10:00:00+00:00"}}}}}}}}}},"tags":["Webhooks"]},"post":{"summary":"Create a webhook endpoint","operationId":"createAWebhookEndpoint","description":"Registers an HTTPS endpoint (max 5 per account) for event deliveries. The\nresponse includes the signing `secret` — the ONLY time it is ever shown, so\nstore it immediately.","parameters":[],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"id":8,"url":"https://example.com/webhooks/bitculator","events":["alarm.triggered"],"status":"active","consecutive_failures":0,"disabled_at":null,"created_at":"2026-07-03T08:00:00+00:00","secret":"whsec_k5cQ1x9jJ2mW7pR4tY8uB3nV6zA0sD5f"}},"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","example":8},"url":{"type":"string","example":"https://example.com/webhooks/bitculator"},"events":{"type":"array","example":["alarm.triggered"],"items":{"type":"string"}},"status":{"type":"string","example":"active"},"consecutive_failures":{"type":"integer","example":0},"disabled_at":{"type":"string","example":null,"nullable":true},"created_at":{"type":"string","example":"2026-07-03T08:00:00+00:00"},"secret":{"type":"string","example":"whsec_k5cQ1x9jJ2mW7pR4tY8uB3nV6zA0sD5f"}}}}}}}}},"tags":["Webhooks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"The HTTPS delivery URL. Public hosts only — internal/private addresses are rejected.","example":"https://example.com/webhooks/bitculator"},"events":{"type":"array","description":"Events to subscribe to. Allowed values: `alarm.triggered`.","example":["alarm.triggered"],"items":{"type":"string"}}},"required":["url","events"]}}}}}},"/api/v1/webhooks/{id}":{"delete":{"summary":"Delete a webhook endpoint","operationId":"deleteAWebhookEndpoint","description":"Deletes one of the key owner's webhook endpoints. Pending deliveries to it are\nabandoned.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"deleted":true}},"properties":{"data":{"type":"object","properties":{"deleted":{"type":"boolean","example":true}}}}}}}}},"tags":["Webhooks"]},"parameters":[{"in":"path","name":"id","description":"The webhook endpoint id.","example":7,"required":true,"schema":{"type":"integer"}}]},"/api/v1/webhooks/{id}/test":{"post":{"summary":"Send a test event","operationId":"sendATestEvent","description":"Fires a signed `alarm.triggered` test event (`test: true` in the payload, real\nsignature headers) so receivers can be verified end-to-end.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"queued":true}},"properties":{"data":{"type":"object","properties":{"queued":{"type":"boolean","example":true}}}}}}}}},"tags":["Webhooks"]},"parameters":[{"in":"path","name":"id","description":"The webhook endpoint id.","example":7,"required":true,"schema":{"type":"integer"}}]},"/api/v1/webhooks/{id}/deliveries":{"get":{"summary":"Webhook delivery log","operationId":"webhookDeliveryLog","description":"The endpoint's delivery attempts (kept 30 days), newest first, paginated.","parameters":[{"in":"query","name":"page","description":"Page number (1-based).","example":1,"required":false,"schema":{"type":"integer","description":"Page number (1-based).","example":1,"nullable":true}},{"in":"query","name":"per_page","description":"Rows per page (1–100, default 25).","example":25,"required":false,"schema":{"type":"integer","description":"Rows per page (1–100, default 25).","example":25,"nullable":true}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":[{"id":311,"event":"alarm.triggered","response_status":200,"error":null,"attempts":1,"delivered_at":"2026-07-02T21:14:09+00:00","created_at":"2026-07-02T21:14:08+00:00"}],"meta":{"current_page":1,"per_page":25,"total":6,"last_page":1,"retention":"30 days"}},"properties":{"data":{"type":"array","example":[{"id":311,"event":"alarm.triggered","response_status":200,"error":null,"attempts":1,"delivered_at":"2026-07-02T21:14:09+00:00","created_at":"2026-07-02T21:14:08+00:00"}],"items":{"type":"object","properties":{"id":{"type":"integer","example":311},"event":{"type":"string","example":"alarm.triggered"},"response_status":{"type":"integer","example":200},"error":{"type":"string","example":null,"nullable":true},"attempts":{"type":"integer","example":1},"delivered_at":{"type":"string","example":"2026-07-02T21:14:09+00:00"},"created_at":{"type":"string","example":"2026-07-02T21:14:08+00:00"}}}},"meta":{"type":"object","properties":{"current_page":{"type":"integer","example":1},"per_page":{"type":"integer","example":25},"total":{"type":"integer","example":6},"last_page":{"type":"integer","example":1},"retention":{"type":"string","example":"30 days"}}}}}}}}},"tags":["Webhooks"]},"parameters":[{"in":"path","name":"id","description":"The webhook endpoint id.","example":7,"required":true,"schema":{"type":"integer"}}]},"/api/v1/openapi.json":{"get":{"summary":"OpenAPI spec","operationId":"openAPISpec","description":"The machine-readable OpenAPI 3 document for this API, as JSON — point codegen\nor API tooling at this URL. Public: no key required.","parameters":[],"responses":[],"tags":["Meta"]}},"/api/v1/ping":{"get":{"summary":"Ping","operationId":"ping","description":"An authenticated no-op for verifying a Data API key end-to-end (auth.api →\nper-plan burst throttle → monthly quota). It counts against the quota like any\nother call.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"status":"ok","plan":"free"}},"properties":{"data":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"plan":{"type":"string","example":"free"}}}}}}}}},"tags":["Meta"]}},"/api/v1/usage":{"get":{"summary":"Key usage & quota","operationId":"keyUsageQuota","description":"Usage introspection for the calling key's owner: the Data API plan, its monthly\nlimit, used and remaining (always matching the X-Quota-* headers), the current\nperiod window, and per-endpoint / per-token breakdowns. Embed-widget usage has\nits own plan and pool — it never appears here.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","example":{"data":{"plan":"free","limit":10000,"used":29,"remaining":9971,"period_start":"2026-06-15","period_end":"2026-07-15T00:00:00+00:00","burst_per_minute":60,"endpoints":[{"endpoint":"GET api/v1/prices","requests":18},{"endpoint":"GET api/v1/global","requests":11}],"tokens":[{"id":12,"name":"production","kind":"data-api","requests":29,"last_used_at":"2026-07-02T21:14:09+00:00","revoked":false}]},"meta":{"note":"Endpoint and token breakdowns are flushed from the buffer every minute and can trail `used` slightly."}},"properties":{"data":{"type":"object","properties":{"plan":{"type":"string","example":"free"},"limit":{"type":"integer","example":10000},"used":{"type":"integer","example":29},"remaining":{"type":"integer","example":9971},"period_start":{"type":"string","example":"2026-06-15"},"period_end":{"type":"string","example":"2026-07-15T00:00:00+00:00"},"burst_per_minute":{"type":"integer","example":60},"endpoints":{"type":"array","example":[{"endpoint":"GET api/v1/prices","requests":18},{"endpoint":"GET api/v1/global","requests":11}],"items":{"type":"object","properties":{"endpoint":{"type":"string","example":"GET api/v1/prices"},"requests":{"type":"integer","example":18}}}},"tokens":{"type":"array","example":[{"id":12,"name":"production","kind":"data-api","requests":29,"last_used_at":"2026-07-02T21:14:09+00:00","revoked":false}],"items":{"type":"object","properties":{"id":{"type":"integer","example":12},"name":{"type":"string","example":"production"},"kind":{"type":"string","example":"data-api"},"requests":{"type":"integer","example":29},"last_used_at":{"type":"string","example":"2026-07-02T21:14:09+00:00"},"revoked":{"type":"boolean","example":false}}}}}},"meta":{"type":"object","properties":{"note":{"type":"string","example":"Endpoint and token breakdowns are flushed from the buffer every minute and can trail `used` slightly."}}}}}}}}},"tags":["Meta"]}}}}