Capital.com Public API · AsyncAPI Specification

Capital.com WebSocket Streaming API

Version 1.0.0

Real-time streaming API from Capital.com for market data and OHLC candlestick updates. Clients connect over WebSocket using session tokens (CST and X-SECURITY-TOKEN) obtained from the Capital.com REST API. A single connection supports up to 40 concurrent instrument subscriptions and must be pinged at least once every 10 minutes to remain active.

View Spec View on GitHub CFDCommoditiesCryptocurrencyFinancialForexIndicesMarket DataSharesStreamingTradingWebSocketAsyncAPIWebhooksEvents

Channels

/
publish sendClientFrame
Frames sent from the client to Capital.com.
Single WebSocket channel for all destinations. Clients send frames whose `destination` field selects an operation (marketData.subscribe, marketData.unsubscribe, OHLCMarketData.subscribe, OHLCMarketData.unsubscribe, ping). The server publishes subscription confirmations, market data updates, OHLC bar updates, and ping responses on the same connection.

Messages

MarketDataSubscribe
Subscribe to real-time market data
Subscribe to live bid/offer price updates for a set of instrument epics.
MarketDataUnsubscribe
Unsubscribe from real-time market data
Remove real-time price subscriptions for one or more epics.
OHLCMarketDataSubscribe
Subscribe to OHLC candlestick updates
Subscribe to OHLC candle updates for a set of epics, resolutions, and bar type.
OHLCMarketDataUnsubscribe
Unsubscribe from OHLC candlestick updates
Remove OHLC subscriptions for the given epics, with optional resolution and type filters.
Ping
Ping the streaming session
Keep the WebSocket session alive (must be sent at least every 10 minutes).
SubscriptionStatus
Subscription processing status
Confirms processing status of a subscribe or unsubscribe request per epic.
MarketDataUpdate
Real-time market data update
Streaming bid/offer quote update for a subscribed instrument.
OHLCMarketDataUpdate
OHLC candlestick update
Streaming OHLC bar update for a subscribed instrument and resolution.
PingResponse
Ping response
Server acknowledgement of a client ping.

Servers

wss
production api-streaming-capital.backend-capital.com/connect
Capital.com production WebSocket streaming endpoint.
wss
demo demo-api-streaming-capital.backend-capital.com/connect
Capital.com demo WebSocket streaming endpoint.

AsyncAPI Specification

Raw ↑
asyncapi: '2.6.0'
info:
  title: Capital.com WebSocket Streaming API
  version: '1.0.0'
  description: |
    Real-time streaming API from Capital.com for market data and OHLC candlestick updates.
    Clients connect over WebSocket using session tokens (CST and X-SECURITY-TOKEN) obtained
    from the Capital.com REST API. A single connection supports up to 40 concurrent instrument
    subscriptions and must be pinged at least once every 10 minutes to remain active.
  contact:
    name: Capital.com API Support
    url: https://open-api.capital.com
  termsOfService: https://capital.com/terms-and-conditions
  license:
    name: Capital.com Terms of Service
    url: https://capital.com/terms-and-conditions

servers:
  production:
    url: api-streaming-capital.backend-capital.com/connect
    protocol: wss
    description: Capital.com production WebSocket streaming endpoint.
  demo:
    url: demo-api-streaming-capital.backend-capital.com/connect
    protocol: wss
    description: Capital.com demo WebSocket streaming endpoint.

defaultContentType: application/json

channels:
  /:
    description: |
      Single WebSocket channel for all destinations. Clients send frames whose `destination`
      field selects an operation (marketData.subscribe, marketData.unsubscribe,
      OHLCMarketData.subscribe, OHLCMarketData.unsubscribe, ping). The server publishes
      subscription confirmations, market data updates, OHLC bar updates, and ping responses
      on the same connection.
    publish:
      operationId: sendClientFrame
      summary: Frames sent from the client to Capital.com.
      message:
        oneOf:
          - $ref: '#/components/messages/MarketDataSubscribe'
          - $ref: '#/components/messages/MarketDataUnsubscribe'
          - $ref: '#/components/messages/OHLCMarketDataSubscribe'
          - $ref: '#/components/messages/OHLCMarketDataUnsubscribe'
          - $ref: '#/components/messages/Ping'
    subscribe:
      operationId: receiveServerFrame
      summary: Frames received from Capital.com.
      message:
        oneOf:
          - $ref: '#/components/messages/SubscriptionStatus'
          - $ref: '#/components/messages/MarketDataUpdate'
          - $ref: '#/components/messages/OHLCMarketDataUpdate'
          - $ref: '#/components/messages/PingResponse'

components:
  messages:
    MarketDataSubscribe:
      name: marketDataSubscribe
      title: Subscribe to real-time market data
      summary: Subscribe to live bid/offer price updates for a set of instrument epics.
      payload:
        $ref: '#/components/schemas/MarketDataSubscribeFrame'

    MarketDataUnsubscribe:
      name: marketDataUnsubscribe
      title: Unsubscribe from real-time market data
      summary: Remove real-time price subscriptions for one or more epics.
      payload:
        $ref: '#/components/schemas/MarketDataUnsubscribeFrame'

    OHLCMarketDataSubscribe:
      name: ohlcMarketDataSubscribe
      title: Subscribe to OHLC candlestick updates
      summary: Subscribe to OHLC candle updates for a set of epics, resolutions, and bar type.
      payload:
        $ref: '#/components/schemas/OHLCMarketDataSubscribeFrame'

    OHLCMarketDataUnsubscribe:
      name: ohlcMarketDataUnsubscribe
      title: Unsubscribe from OHLC candlestick updates
      summary: Remove OHLC subscriptions for the given epics, with optional resolution and type filters.
      payload:
        $ref: '#/components/schemas/OHLCMarketDataUnsubscribeFrame'

    Ping:
      name: ping
      title: Ping the streaming session
      summary: Keep the WebSocket session alive (must be sent at least every 10 minutes).
      payload:
        $ref: '#/components/schemas/PingFrame'

    SubscriptionStatus:
      name: subscriptionStatus
      title: Subscription processing status
      summary: Confirms processing status of a subscribe or unsubscribe request per epic.
      payload:
        $ref: '#/components/schemas/SubscriptionStatusFrame'

    MarketDataUpdate:
      name: marketDataUpdate
      title: Real-time market data update
      summary: Streaming bid/offer quote update for a subscribed instrument.
      payload:
        $ref: '#/components/schemas/MarketDataUpdateFrame'

    OHLCMarketDataUpdate:
      name: ohlcMarketDataUpdate
      title: OHLC candlestick update
      summary: Streaming OHLC bar update for a subscribed instrument and resolution.
      payload:
        $ref: '#/components/schemas/OHLCMarketDataUpdateFrame'

    PingResponse:
      name: pingResponse
      title: Ping response
      summary: Server acknowledgement of a client ping.
      payload:
        $ref: '#/components/schemas/PingResponseFrame'

  schemas:
    MarketDataSubscribeFrame:
      type: object
      required:
        - destination
        - correlationId
        - cst
        - securityToken
        - payload
      properties:
        destination:
          type: string
          enum:
            - marketData.subscribe
        correlationId:
          type: string
          description: Client-generated id to correlate request and response frames.
          example: '1'
        cst:
          type: string
          description: CST access token from a REST API session.
        securityToken:
          type: string
          description: X-SECURITY-TOKEN account identifier from a REST API session.
        payload:
          type: object
          required:
            - epics
          properties:
            epics:
              type: array
              description: List of instrument epics to subscribe to (up to 40 concurrent).
              maxItems: 40
              items:
                type: string
              example:
                - OIL_CRUDE
                - AAPL

    MarketDataUnsubscribeFrame:
      type: object
      required:
        - destination
        - correlationId
        - cst
        - securityToken
        - payload
      properties:
        destination:
          type: string
          enum:
            - marketData.unsubscribe
        correlationId:
          type: string
          example: '2'
        cst:
          type: string
        securityToken:
          type: string
        payload:
          type: object
          required:
            - epics
          properties:
            epics:
              type: array
              items:
                type: string
              example:
                - OIL_CRUDE

    OHLCMarketDataSubscribeFrame:
      type: object
      required:
        - destination
        - correlationId
        - cst
        - securityToken
        - payload
      properties:
        destination:
          type: string
          enum:
            - OHLCMarketData.subscribe
        correlationId:
          type: string
          example: '3'
        cst:
          type: string
        securityToken:
          type: string
        payload:
          type: object
          required:
            - epics
          properties:
            epics:
              type: array
              description: Up to 40 instrument epics.
              maxItems: 40
              items:
                type: string
              example:
                - AAPL
            resolutions:
              type: array
              description: Candle timeframes to subscribe to. Defaults to MINUTE.
              items:
                type: string
                enum:
                  - MINUTE
                  - MINUTE_5
                  - MINUTE_15
                  - MINUTE_30
                  - HOUR
                  - HOUR_4
                  - DAY
                  - WEEK
              example:
                - MINUTE_5
            type:
              type: string
              description: Candle bar format. Defaults to classic.
              enum:
                - classic
                - heikin-ashi
              default: classic

    OHLCMarketDataUnsubscribeFrame:
      type: object
      required:
        - destination
        - correlationId
        - cst
        - securityToken
        - payload
      properties:
        destination:
          type: string
          enum:
            - OHLCMarketData.unsubscribe
        correlationId:
          type: string
          example: '4'
        cst:
          type: string
        securityToken:
          type: string
        payload:
          type: object
          required:
            - epics
          properties:
            epics:
              type: array
              items:
                type: string
              example:
                - AAPL
            resolutions:
              type: array
              description: Optional resolutions to unsubscribe from. Defaults to all.
              items:
                type: string
                enum:
                  - MINUTE
                  - MINUTE_5
                  - MINUTE_15
                  - MINUTE_30
                  - HOUR
                  - HOUR_4
                  - DAY
                  - WEEK
            types:
              type: array
              description: Optional candle types to unsubscribe from. Defaults to all.
              items:
                type: string
                enum:
                  - classic
                  - heikin-ashi

    PingFrame:
      type: object
      required:
        - destination
        - correlationId
        - cst
        - securityToken
      properties:
        destination:
          type: string
          enum:
            - ping
        correlationId:
          type: string
          example: '5'
        cst:
          type: string
        securityToken:
          type: string

    SubscriptionStatusFrame:
      type: object
      description: |
        Frame returned in response to marketData.subscribe, marketData.unsubscribe,
        OHLCMarketData.subscribe, or OHLCMarketData.unsubscribe.
      properties:
        status:
          type: string
          description: Overall status of the request (for example, OK).
          example: OK
        destination:
          type: string
          example: marketData.subscribe
        correlationId:
          type: string
          example: '1'
        payload:
          type: object
          properties:
            subscriptions:
              type: object
              additionalProperties:
                type: string
                description: Per-epic subscription processing status (for example, PROCESSED).
                example: PROCESSED

    MarketDataUpdateFrame:
      type: object
      description: Streaming market data quote frame.
      properties:
        status:
          type: string
          example: OK
        destination:
          type: string
          enum:
            - quote
        payload:
          type: object
          properties:
            epic:
              type: string
              description: Instrument identifier.
              example: OIL_CRUDE
            product:
              type: string
              description: Instrument category (for example, CFD).
              example: CFD
            bid:
              type: number
              format: double
              description: Current bid price.
            bidQty:
              type: number
              format: double
              description: Quantity available at the current bid.
            ofr:
              type: number
              format: double
              description: Current offer (ask) price.
            ofrQty:
              type: number
              format: double
              description: Quantity available at the current offer.
            timestamp:
              type: integer
              format: int64
              description: Update timestamp in milliseconds since epoch.

    OHLCMarketDataUpdateFrame:
      type: object
      description: Streaming OHLC candle update frame.
      properties:
        status:
          type: string
          example: OK
        destination:
          type: string
          enum:
            - ohlc.event
        payload:
          type: object
          properties:
            epic:
              type: string
              example: AAPL
            resolution:
              type: string
              enum:
                - MINUTE
                - MINUTE_5
                - MINUTE_15
                - MINUTE_30
                - HOUR
                - HOUR_4
                - DAY
                - WEEK
            type:
              type: string
              enum:
                - classic
                - heikin-ashi
            priceType:
              type: string
              description: Price basis used to build the candle.
              enum:
                - bid
                - ask
            t:
              type: integer
              format: int64
              description: Bar timestamp in milliseconds since epoch.
            o:
              type: number
              format: double
              description: Opening price of the bar.
            h:
              type: number
              format: double
              description: Highest price of the bar.
            l:
              type: number
              format: double
              description: Lowest price of the bar.
            c:
              type: number
              format: double
              description: Closing price of the bar.

    PingResponseFrame:
      type: object
      properties:
        status:
          type: string
          example: OK
        destination:
          type: string
          enum:
            - ping
        correlationId:
          type: string
          example: '5'
        payload:
          type: object
          description: Empty payload.