API Documentation

Programmatic access to iComBot BTC direction signals for Polymarket. Available on the Pro plan. REST + WebSocket.

Quickstart

Once you have a Pro subscription, generate an API key from your account page. Pass it in the Authorization header as a Bearer token.

curl -H "Authorization: Bearer YOUR_API_KEY" \
     https://icombot.com/api/v1/signal

Authentication

All REST endpoints require an API key passed as a Bearer token:

Authorization: Bearer <api_key>

WebSocket connections use a query-string parameter instead, because browsers cannot set custom headers on WebSocket upgrade:

wss://icombot.com/api/v1/ws?key=<api_key>

Keep your API key secret. You can rotate it from the account page at any time.

Endpoints

MethodPathDescription
GET/api/v1/signalCurrent live signal (canonical object)
GET/api/v1/signal/historyRecent signal history (paginated)
GET/api/v1/statsPerformance stats (win rates, totals)
GET/api/v1/statusService health and API key status
WSS/api/v1/wsPro real-time signal push over WebSocket

Response Example

GET /api/v1/signal returns the canonical signal object:

{
  "roundId": "btc-updown-5m-1772164500",
  "direction": "UP",
  "strength": "STRONG",
  "confidence": 0.83,
  "timestamp": 1772164520,
  "expiresAt": 1772164800,
  "result": "PENDING"
}

Enum values:

  • direction: UP | DOWN | NONE
  • strength: STRONG | MODERATE | WEAK
  • result: WIN | LOSE | PENDING | VOID

WebSocket

The WebSocket feed pushes a new signal event as soon as each 5-minute round emits. Connect with your API key as a query parameter:

const ws = new WebSocket(
  "wss://icombot.com/api/v1/ws?key=YOUR_API_KEY"
);
ws.onmessage = (ev) => {
  const signal = JSON.parse(ev.data);
  console.log(signal.direction, signal.confidence);
};

Pro subscribers also get a heartbeat frame every 30 seconds to keep the connection alive.

Rate Limits

PlanREST limitWebSocket
Free
Basic1 connection
Pro60 req/min1 connection

Exceeding the rate limit returns HTTP 429 with a Retry-After header.

Error Codes

HTTPErrorMeaning
400bad_requestMalformed query or body
401unauthorizedMissing or invalid API key
403forbiddenYour plan does not include this endpoint
404not_foundResource does not exist
429rate_limitedExceeded request quota
500internalServer error — please retry