tickfeed-pro market data API

The market data API from tickfeed-pro — 6 operation(s) for market data.

Operations 6

GET /v1/symbols List Symbols #
GET /v1/price/{symbol} Get Price #
GET /v1/prices Get Prices #
GET /v1/candles/{symbol} Get Candles #
GET /v1/ticks/{symbol} Get Ticks #
GET /v1/candles/{symbol}/gaps Get Gaps #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/tickfeed-pro:tickfeed-pro-market-data-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

tickfeed-pro-market-data-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Tickfeed Pro market data API
  version: 0.1.0
  description: 'Operations tagged market data across 2 of this provider''s published API definitions: api.tickfeed.pro-openapi.json, tickfeed-pro-openapi.json. Each path carries the servers of the definition it was published in.'
tags:
- name: market data
paths:
  /v1/symbols:
    get:
      tags:
      - market data
      summary: List Symbols
      description: Supported symbols, their trading sessions and price precision. Free.
      operationId: list_symbols_v1_symbols_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SymbolsResponse'
        '401':
          description: Missing, invalid or revoked API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Balance too low for this request (insufficient_balance)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Account inactive
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Unsupported symbol
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Market data feed unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - APIKeyHeader: []
  /v1/price/{symbol}:
    get:
      tags:
      - market data
      summary: Get Price
      description: 'Latest bid/ask.


        `freshness`: `fresh` if the tick is at most `stale_after_seconds` old; `market_closed` if older

        but the market is outside its scheduled session; `stale` if older while the market should be

        trading (a feed problem). The last known price is returned in every case, clearly labelled.


        Cost: 1 unit.'
      operationId: get_price_v1_price__symbol__get
      security:
      - APIKeyHeader: []
      parameters:
      - name: symbol
        in: path
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9._-]{1,20}$
          title: Symbol
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PriceResponse'
        '401':
          description: Missing, invalid or revoked API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Balance too low for this request (insufficient_balance)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Account inactive
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Unsupported symbol
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Market data feed unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/prices:
    get:
      tags:
      - market data
      summary: Get Prices
      description: 'Latest bid/ask for several symbols in one request, each with the same fields and freshness

        label as `/v1/price/{symbol}`. Use this instead of one request per pair: it is faster for you

        and counts once against your rate limit.


        Cost: 1 unit per symbol returned (duplicates are removed).'
      operationId: get_prices_v1_prices_get
      security:
      - APIKeyHeader: []
      parameters:
      - name: symbols
        in: query
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9._,\s-]{1,700}$
          description: Comma-separated symbols, e.g. EURUSD,GBPUSD,XAUUSD (up to 30)
          title: Symbols
        description: Comma-separated symbols, e.g. EURUSD,GBPUSD,XAUUSD (up to 30)
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricesResponse'
        '401':
          description: Missing, invalid or revoked API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Balance too low for this request (insufficient_balance)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Account inactive
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Unsupported symbol
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Market data feed unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/candles/{symbol}:
    get:
      tags:
      - market data
      summary: Get Candles
      description: 'OHLC candles in chronological order (oldest first).


        * With `start_time`: the first `limit` bars from `start_time` up to `end_time` (or now).

        If more exist, `truncated` is true and `next_start_time` gives the next page.

        * Without `start_time`: the latest `limit` bars up to `end_time` (or now).


        S1, S5, S15 and S30 are built from tick history (about the last six months) and are live only.

        The most recent bar may still be forming; it is returned with `complete: false`.

        Gaps (weekends, breaks, missing history) are never filled.


        Cost: 1 unit per started block of 100 bars returned (1-100 bars = 1 unit, 101-200 = 2, ...).'
      operationId: get_candles_v1_candles__symbol__get
      security:
      - APIKeyHeader: []
      parameters:
      - name: symbol
        in: path
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9._-]{1,20}$
          title: Symbol
      - name: timeframe
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/Timeframe'
          description: Bar timeframe
          default: M5
        description: Bar timeframe
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 5000
          minimum: 1
          default: 100
          title: Limit
      - name: start_time
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          description: ISO 8601; naive values are treated as UTC
          title: Start Time
        description: ISO 8601; naive values are treated as UTC
      - name: end_time
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          description: ISO 8601; naive values are treated as UTC
          title: End Time
        description: ISO 8601; naive values are treated as UTC
      - name: source
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/CandleSource'
          description: live = real-time feed, stored = TickFeed stored history
          default: live
        description: live = real-time feed, stored = TickFeed stored history
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CandlesResponse'
        '401':
          description: Missing, invalid or revoked API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Balance too low for this request (insufficient_balance)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Account inactive
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Unsupported symbol
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Market data feed unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/ticks/{symbol}:
    get:
      tags:
      - market data
      summary: Get Ticks
      description: 'Raw tick history: every bid/ask change, timestamped to the millisecond (UTC), oldest first.


        * With `start_time`: the first `limit` ticks from `start_time` up to `end_time` (or now).

        If more exist, `truncated` is true and `next_start_time` gives the next page.

        * Without `start_time`: the latest `limit` ticks up to `end_time` (or now).


        History covers roughly the last six months (rolling); `notes` gives the exact start for the symbol.


        Cost: 1 unit per started block of 1,000 ticks returned (1-1,000 ticks = 1 unit, 1,001-2,000 = 2, ...).'
      operationId: get_ticks_v1_ticks__symbol__get
      security:
      - APIKeyHeader: []
      parameters:
      - name: symbol
        in: path
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9._-]{1,20}$
          title: Symbol
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 10000
          minimum: 1
          description: Maximum ticks to return
          default: 1000
          title: Limit
        description: Maximum ticks to return
      - name: start_time
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          description: ISO 8601; naive values are treated as UTC
          title: Start Time
        description: ISO 8601; naive values are treated as UTC
      - name: end_time
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          description: ISO 8601; naive values are treated as UTC
          title: End Time
        description: ISO 8601; naive values are treated as UTC
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TicksResponse'
        '401':
          description: Missing, invalid or revoked API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Balance too low for this request (insufficient_balance)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Account inactive
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Unsupported symbol
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Market data feed unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/candles/{symbol}/gaps:
    get:
      tags:
      - market data
      summary: Get Gaps
      description: 'Missing intervals in the stored candle history. Cost: 1 unit.'
      operationId: get_gaps_v1_candles__symbol__gaps_get
      security:
      - APIKeyHeader: []
      parameters:
      - name: symbol
        in: path
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9._-]{1,20}$
          title: Symbol
      - name: timeframe
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/Timeframe'
          default: M5
      - name: start_time
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Start Time
      - name: end_time
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: End Time
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GapsResponse'
        '401':
          description: Missing, invalid or revoked API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Balance too low for this request (insufficient_balance)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Account inactive
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Unsupported symbol
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Market data feed unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    GapOut:
      properties:
        after:
          type: string
          format: date-time
          title: After
          description: Open time of the last stored bar before the gap.
        before:
          type: string
          format: date-time
          title: Before
          description: Open time of the first stored bar after the gap.
        missing_bars:
          type: integer
          title: Missing Bars
        expected:
          type: boolean
          title: Expected
          description: True if every missing bar falls outside scheduled trading hours.
        unexplained_bars:
          type: integer
          title: Unexplained Bars
          description: Missing bars inside scheduled trading hours.
      type: object
      required:
      - after
      - before
      - missing_bars
      - expected
      - unexplained_bars
      title: GapOut
    ErrorResponse:
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
      type: object
      required:
      - error
      title: ErrorResponse
    TickOut:
      properties:
        time:
          type: string
          title: Time
          description: Quote time, UTC, ISO 8601 with milliseconds (e.g. 2026-10-30T12:00:00.123Z).
        bid:
          type: number
          title: Bid
        ask:
          type: number
          title: Ask
      type: object
      required:
      - time
      - bid
      - ask
      title: TickOut
    GapsResponse:
      properties:
        symbol:
          type: string
          title: Symbol
        timeframe:
          $ref: '#/components/schemas/Timeframe'
        stored_bars:
          type: integer
          title: Stored Bars
        gaps:
          items:
            $ref: '#/components/schemas/GapOut'
          type: array
          title: Gaps
        note:
          type: string
          title: Note
          default: Gaps are computed from stored bars only and are never filled. 'expected' gaps are market closures per the symbol's schedule. Unexplained gaps can be holidays (not modelled), minutes with no ticks (common on M1), or missing data; the collector periodically re-requests them.
      type: object
      required:
      - symbol
      - timeframe
      - stored_bars
      - gaps
      title: GapsResponse
    TicksResponse:
      properties:
        symbol:
          type: string
          title: Symbol
        count:
          type: integer
          title: Count
        truncated:
          type: boolean
          title: Truncated
          description: True if more ticks matched than `limit` allowed.
        next_start_time:
          anyOf:
          - type: string
          - type: 'null'
          title: Next Start Time
          description: When truncated with start_time, pass this as start_time to get the next page (no tick is repeated or skipped).
        ticks:
          items:
            $ref: '#/components/schemas/TickOut'
          type: array
          title: Ticks
          description: Every bid/ask change, oldest first.
        notes:
          items:
            type: string
          type: array
          title: Notes
          default: []
      type: object
      required:
      - symbol
      - count
      - truncated
      - next_start_time
      - ticks
      title: TicksResponse
    Timeframe:
      type: string
      enum:
      - S1
      - S5
      - S15
      - S30
      - M1
      - M5
      - M15
      - M30
      - H1
      - H4
      - D1
      title: Timeframe
    SymbolInfo:
      properties:
        symbol:
          type: string
          title: Symbol
          description: Public symbol used in API paths.
        available:
          type: boolean
          title: Available
        session:
          type: string
          title: Session
          description: 'Trading schedule: forex, metals or always.'
        category:
          anyOf:
          - type: string
          - type: 'null'
          title: Category
          description: metal, major, minor or exotic.
        name:
          anyOf:
          - type: string
          - type: 'null'
          title: Name
          description: Readable name, e.g. 'Euro / US Dollar'.
        history_from:
          anyOf:
          - additionalProperties:
              anyOf:
              - type: string
                format: date-time
              - type: 'null'
            type: object
          - type: 'null'
          title: History From
          description: 'Open time (UTC) of the oldest stored bar for each timeframe, e.g. {"H1": ...}. Use it to check history depth before a backtest.'
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
          description: Same as `name`; kept for compatibility.
        digits:
          anyOf:
          - type: integer
          - type: 'null'
          title: Digits
        point:
          anyOf:
          - type: number
          - type: 'null'
          title: Point
          description: Size of one price point in quote-currency units.
        base_currency:
          anyOf:
          - type: string
          - type: 'null'
          title: Base Currency
        quote_currency:
          anyOf:
          - type: string
          - type: 'null'
          title: Quote Currency
      type: object
      required:
      - symbol
      - available
      - session
      title: SymbolInfo
    CandleSource:
      type: string
      enum:
      - live
      - stored
      title: CandleSource
    SymbolsResponse:
      properties:
        symbols:
          items:
            $ref: '#/components/schemas/SymbolInfo'
          type: array
          title: Symbols
        timeframes:
          items:
            $ref: '#/components/schemas/Timeframe'
          type: array
          title: Timeframes
      type: object
      required:
      - symbols
      - timeframes
      title: SymbolsResponse
    CandlesResponse:
      properties:
        symbol:
          type: string
          title: Symbol
        timeframe:
          $ref: '#/components/schemas/Timeframe'
        source:
          $ref: '#/components/schemas/CandleSource'
        count:
          type: integer
          title: Count
        truncated:
          type: boolean
          title: Truncated
          description: True if more bars matched the range than `limit` allowed.
        next_start_time:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Next Start Time
          description: When truncated with start_time, pass this as start_time to get the next page.
        candles:
          items:
            $ref: '#/components/schemas/CandleOut'
          type: array
          title: Candles
          description: Chronological, oldest first. No gaps are filled.
        notes:
          items:
            type: string
          type: array
          title: Notes
          default: []
      type: object
      required:
      - symbol
      - timeframe
      - source
      - count
      - truncated
      - next_start_time
      - candles
      title: CandlesResponse
    ErrorDetail:
      properties:
        code:
          type: string
          title: Code
          examples:
          - unsupported_symbol
        message:
          type: string
          title: Message
      type: object
      required:
      - code
      - message
      title: ErrorDetail
    CandleOut:
      properties:
        time:
          type: string
          format: date-time
          title: Time
          description: Bar open time, UTC.
        open:
          type: number
          title: Open
        high:
          type: number
          title: High
        low:
          type: number
          title: Low
        close:
          type: number
          title: Close
        tick_volume:
          type: integer
          title: Tick Volume
        spread_points:
          anyOf:
          - type: integer
          - type: 'null'
          title: Spread Points
          description: Spread recorded for the bar, in points.
        complete:
          type: boolean
          title: Complete
          description: False if the bar period had not ended when these values were captured; its values can still change.
      type: object
      required:
      - time
      - open
      - high
      - low
      - close
      - tick_volume
      - spread_points
      - complete
      title: CandleOut
    PriceResponse:
      properties:
        symbol:
          type: string
          title: Symbol
        bid:
          type: number
          title: Bid
        ask:
          type: number
          title: Ask
        spread:
          type: number
          title: Spread
          description: ask - bid, in price units (quote currency per unit).
        spread_points:
          type: integer
          title: Spread Points
          description: Spread in points (1 point = `point` price units).
        point:
          type: number
          title: Point
        tick_time:
          type: string
          format: date-time
          title: Tick Time
          description: Time of the latest tick, UTC.
        age_seconds:
          type: number
          title: Age Seconds
        freshness:
          type: string
          enum:
          - fresh
          - market_closed
          - stale
          title: Freshness
          description: 'fresh: last tick no older than stale_after_seconds. market_closed: older, but the market is outside its scheduled session (or within the grace period right after it opened). stale: older while the market is scheduled to be trading, which indicates a feed problem.'
        market_open:
          type: boolean
          title: Market Open
        stale_after_seconds:
          type: integer
          title: Stale After Seconds
        source:
          type: string
          title: Source
          description: live = real-time feed; cache = the last real quote, returned while the feed is briefly interrupted (check freshness)
          default: live
      type: object
      required:
      - symbol
      - bid
      - ask
      - spread
      - spread_points
      - point
      - tick_time
      - age_seconds
      - freshness
      - market_open
      - stale_after_seconds
      title: PriceResponse
    PricesResponse:
      properties:
        prices:
          items:
            $ref: '#/components/schemas/PriceResponse'
          type: array
          title: Prices
          description: One quote per requested symbol, in request order.
      type: object
      required:
      - prices
      title: PricesResponse
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      description: Your API key
      in: header
      name: X-API-Key
x-refined-from:
- api.tickfeed.pro-openapi.json
- tickfeed-pro-openapi.json