openapi: 3.1.0 info: title: Forum Account Market Data API version: '1.0' description: 'The Forum API provides programmatic access to the Forum perpetual futures exchange. Trade attention-based perpetual futures, access real-time market data, and manage your account. ## Base URL All endpoints are relative to `https://api.forum.market/v1`. ## Authentication Public endpoints (market data, exchange status) require no authentication. Private endpoints (orders, positions, account) require HMAC-SHA256 signed requests. See the [Authentication](/api-reference/authentication) guide for details. ' contact: name: Forum Support email: contact@forum.market url: https://forum.market termsOfService: https://forum-legal.s3.us-east-2.amazonaws.com/terms-of-service.pdf servers: - url: https://api.forum.market/v1 description: Production security: - ForumAccessKey: [] ForumAccessTimestamp: [] ForumAccessSign: [] tags: - name: Market Data description: Order books, tickers, trades, and candles paths: /markets/{ticker}/book: get: operationId: getOrderBook summary: Get order book description: Returns the current order book snapshot for a market. Use sequence numbers with WebSocket `book_updates` channel for real-time updates. tags: - Market Data security: [] parameters: - $ref: '#/components/parameters/TickerPath' - name: depth in: query schema: type: integer minimum: 1 maximum: 100 default: 20 description: Number of price levels per side responses: '200': description: Order book snapshot content: application/json: schema: $ref: '#/components/schemas/OrderBook' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/RateLimited' /markets/{ticker}/trades: get: operationId: getRecentTrades summary: Get recent trades description: Returns recent public trades for a market. A trade occurs at the price of the maker (resting) order. tags: - Market Data security: [] parameters: - $ref: '#/components/parameters/TickerPath' - name: limit in: query schema: type: integer minimum: 1 maximum: 500 default: 100 description: Maximum number of trades to return - name: cursor in: query schema: type: string description: Opaque pagination cursor from a previous response responses: '200': description: Recent trades content: application/json: schema: type: object required: - data - nextCursor properties: data: type: array items: $ref: '#/components/schemas/PublicTrade' nextCursor: type: string nullable: true description: Opaque cursor for fetching the next page, or null if no more results '429': $ref: '#/components/responses/RateLimited' /markets/{ticker}/candles: get: operationId: getCandles summary: Get candlestick data description: Returns OHLCV candlestick data for a market within a time range. tags: - Market Data security: [] parameters: - $ref: '#/components/parameters/TickerPath' - name: interval in: query required: true schema: type: string enum: - 1m - 5m - 1d description: Candle interval - name: start in: query required: true schema: type: string format: date-time description: Start time (ISO 8601) example: '2026-02-24T00:00:00.000Z' - name: end in: query schema: type: string format: date-time description: End time (ISO 8601). Defaults to current time. - name: limit in: query schema: type: integer minimum: 1 maximum: 2500 default: 2500 description: Maximum number of candles to return responses: '200': description: Candlestick data content: application/json: schema: type: array items: $ref: '#/components/schemas/CandlestickRecord' '400': $ref: '#/components/responses/BadRequest' '429': $ref: '#/components/responses/RateLimited' components: schemas: PublicTrade: type: object required: - tradeId - ticker - price - quantity - takerSide - timestamp properties: tradeId: type: integer description: Unique trade identifier example: 5678 ticker: type: string example: OPENAI price: type: number description: Trade price in cents example: 10550 quantity: type: number example: 5 takerSide: type: string enum: - buy - sell description: Side of the taker order example: buy timestamp: type: string format: date-time example: '2026-02-25T12:00:00.100Z' ErrorResponse: type: object required: - error properties: error: type: object required: - code - message properties: code: type: string description: Machine-readable error code example: INVALID_PARAMETER message: type: string description: Human-readable error message example: Request validation failed details: type: object description: Additional error details example: fields: - field: ticker message: Required OrderBook: type: object required: - ticker - bids - asks - seq - updatedAt properties: ticker: type: string example: OPENAI bids: type: array maxItems: 100 description: Bid levels sorted by descending price in cents items: $ref: '#/components/schemas/BookLevel' asks: type: array maxItems: 100 description: Ask levels sorted by ascending price in cents items: $ref: '#/components/schemas/BookLevel' seq: type: integer description: Sequence number for gap detection example: 12345 updatedAt: type: string format: date-time description: Last update timestamp (ISO 8601) example: '2026-02-25T12:00:00.000Z' CandlestickRecord: type: object required: - ticker - interval - start - open - high - low - close - volume - active properties: ticker: type: string example: OPENAI interval: type: string enum: - 1m - 5m - 1d example: 1m start: type: string format: date-time description: Candle period start time example: '2026-02-25T12:00:00.000Z' open: type: number description: Opening price in cents example: 10500 high: type: number description: Highest price in cents example: 10600 low: type: number description: Lowest price in cents example: 10450 close: type: number description: Closing price in cents example: 10550 volume: type: number description: Volume in cents example: 150 active: type: boolean description: Whether this candle is still in its active period example: true BookLevel: type: object required: - price - qty properties: price: type: number description: Price level in cents example: 10500 qty: type: number description: Total quantity at this price level example: 10 responses: NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: NOT_FOUND message: Resource not found BadRequest: description: Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: INVALID_PARAMETER message: Request validation failed details: fields: - field: ticker message: Required RateLimited: description: Rate limit exceeded headers: Retry-After: schema: type: integer description: Seconds to wait before retrying content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: RATE_LIMIT_EXCEEDED message: Rate limit exceeded. Try again in 5 seconds. parameters: TickerPath: name: ticker in: path required: true schema: type: string description: Market ticker symbol example: OPENAI securitySchemes: ForumAccessKey: type: apiKey in: header name: FORUM-ACCESS-KEY description: Your API key ID (e.g. `fk_a1b2c3d4e5f6...`) ForumAccessTimestamp: type: apiKey in: header name: FORUM-ACCESS-TIMESTAMP description: Unix epoch in seconds (UTC), as a string ForumAccessSign: type: apiKey in: header name: FORUM-ACCESS-SIGN description: 'Base64-encoded HMAC-SHA256 signature. **Signature generation:** ``` prehash = timestamp + method + requestPath + body signature = Base64(HMAC-SHA256(secret, prehash)) ``` '