# SpectralBot by Cotes > A research-signal service for prediction markets. SpectralBot reads BTC 15-minute prediction markets on Kalshi in real time and delivers a clear YES or NO call every minute, with the confidence and edge behind it. Built by Cotes AI (https://cotes.ai). Start at https://spectralbot.cotes.ai/ with a 24-hour free trial. Signals are research output, not trade instructions — you decide which calls to take. Connecting a Kalshi account lets you place an order on a signal with one tap; funds stay in your own Kalshi account under Kalshi's custody, and Cotes never holds or withdraws them. ## What it covers - Markets: BTC 15-minute prediction markets on Kalshi (series `KXBTC15M`) today; more liquid prediction markets are being added as the Cotes signal stack expands. - Cadence: a fresh YES or NO call every minute, from market open through to resolution. - Signal contents: direction (YES/NO), calibrated confidence, entry price, and edge. - Firing policy: isotonically calibrated, per-time-slot confidence against a fixed ex-ante threshold, designated before resolution and never selected after. ## Accuracy - Live, trailing 30-day production average: first signal per market 85.1%, last signal 87.7%, all fired signals 88.8%. - Out-of-sample backtest across 7,654 markets under the same signal policy: 90.3% / 92.9% / 95.1%. - Backtest results are simulated and are not a promise of future performance. ## Product - [SpectralBot](https://spectralbot.cotes.ai/): How it works, the signal, backtest results, pricing, FAQ - [Sign in / start the free trial](https://app.cotes.ai/login): 24-hour free trial, then a paid subscription - [Cotes AI](https://cotes.ai): The parent company and its signal research - [Discord](https://discord.gg/PNxQvcr3j): Community and support ## Public Signals API HTTPS API for live prediction-market contest snapshots and Cotes AI signals (JSON + SSE). Base URL: https://api.cotes.ai. Authenticate with `Authorization: Bearer `, sent as a header — never a query string. Generate a key under Account -> API keys at https://app.cotes.ai. It is shown once, at creation: only a hash is stored, so it cannot be shown again — lose it and you revoke it and make another. A key belongs to your account and carries its access, so it works while a trial or subscription is live and stops when that lapses. Two live keys per account. Revoking lands on the next request the key makes, including on an open stream. `401` means the key is missing, unknown, or revoked. `402` means the key is genuine but the account's trial or subscription has lapsed — renew at https://app.cotes.ai. There is no first-party SDK. Call the API directly. Use the series prefix (e.g. `KXBTC15M`) for active contest and stream; use the full ticker only for `/v1/contests/{ticker}`. Apply your own signal thresholds — the API returns Cotes AI signals with confidence, entry price, edge, and outcome. ## Docs - [Getting started](https://spectralbot.cotes.ai/docs/): Base URL, quickstart curl, endpoint list - [Authentication](https://spectralbot.cotes.ai/docs/authentication/): How to send the API key - [Contests & signals](https://spectralbot.cotes.ai/docs/contests/): Contest and signal field shapes - [Streaming (SSE)](https://spectralbot.cotes.ai/docs/streaming/): Live event stream - [Rate limits](https://spectralbot.cotes.ai/docs/rate-limits/): 5 req/s per IP, burst 20, 429 handling - [Errors](https://spectralbot.cotes.ai/docs/errors/): problem+json error format - [API reference](https://spectralbot.cotes.ai/docs/reference/): OpenAPI-generated reference - [OpenAPI YAML](https://spectralbot.cotes.ai/docs/openapi.yaml): Machine-readable contract - [Agent prompts](https://spectralbot.cotes.ai/docs/agents/): Sample prompts for coding agents ## Endpoints - `GET https://api.cotes.ai/v1/health` — liveness (no auth) - `GET https://api.cotes.ai/v1/contests/active?series={series}` — live contest + signals (API key) - `GET https://api.cotes.ai/v1/contests?series={series}&limit={n}` — settled history, newest first, outcomes graded (API key) - `GET https://api.cotes.ai/v1/contests/{ticker}` — contest by full ticker (API key) - `GET https://api.cotes.ai/v1/stream/contests?series={series}` — SSE stream (API key) ## SSE events - `contest.opened` — contest JSON - `signal.emitted` — `{ signal, contest }` - `contest.settled` — settled contest JSON