TAAPI.IO Manual Candles API

Calculate indicators over a list of provided candles instead of fetching them from an exchange. You must provide your own OHLCV data.

GitHub OpenAPI

Operations 2

POST /indicator/{indicator} Single indicator — manual candles #
POST /bulk-candles Bulk — manual candles #

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/taapi-io:taapi-io-manual-candles-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

taapi-io-manual-candles-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: TAAPI.IO Manual Candles API
  version: 2.0.0
  description: 'Technical Analysis API providing indicator calculations and OHLCV candle data for crypto and stock markets.


    Each indicator is exposed as its own endpoint (`GET /indicator/`) with only the parameters that indicator actually accepts documented.


    ## Authentication


    All endpoints require a valid API key passed as a **Bearer token** in the `Authorization` header:


    ```

    Authorization: Bearer

    ```


    Get your API key at taapi.io.


    ## Rate Limiting


    Requests are rate-limited per API key according to your subscription plan (see taapi.io for plan limits). Limits use a **fixed window**: the window (15 seconds by default) starts with your first request, and the counter resets when it expires.


    Every authenticated response includes these headers:


    | Header | Meaning |

    |--------|---------|

    | `X-RateLimit-Limit` | Requests allowed per window |

    | `X-RateLimit-Remaining` | Requests left in the current window |

    | `X-RateLimit-Reset` | Seconds until the current window resets |


    When the limit is exceeded the API returns **HTTP 429** with:


    ```json

    { "error": "Too Many Requests", "retryAfter": 9 }

    ```


    Wait `retryAfter` seconds before retrying.


    ## Real-time streaming (WebSocket)


    For live indicator updates over a persistent connection, use the **streaming** service on the same domain:


    - **WebSocket URL:** `wss://v2.taapi.io/streaming` (or your base URL + `/streaming` if using path-based routing)

    - **Health check:** `GET https://v2.taapi.io/streaming/health`


    All messages are JSON objects with a `type` field. Streaming uses `interval` (not `timeframe` as in REST); allowed intervals are `1m`, `5m`, `15m` and `1h`. Symbols use the same format as the REST API (`BTCUSDT`, not `BTC/USDT`) and must appear in `GET /exchanges/{exchange}/symbols`.


    **Connection flow:**


    1. Connect to the WebSocket URL.

    2. **Authenticate** — send: `{ "type": "auth", "token": "Bearer " }`

    - Response: `{ "type": "auth_ok", "userId": "...", "plan": { "socketSubscriptionsAllowed": 10, "streamThrottleMs": 5000 } }` or `{ "type": "auth_error", "error": "..." }`

    3. **Subscribe** to an indicator — send:

    `{ "type": "subscribe", "id": "my_rsi", "exchange": "binance", "symbol": "BTCUSDT", "interval": "1m", "indicator": "rsi", "params": { "period": 14 } }`

    - Response: `{ "type": "subscribed", "id": "binance_btcusdt_1m_my_rsi", "subscription": "binance:btcusdt:1m", "indicator": "rsi" }`

    - The returned `id` is the **scoped id**: `___`, lowercased. Use it to unsubscribe and to read updates.

    4. **Receive updates** — the server pushes only values that changed, keyed by scoped id. Values are arrays, as in the REST API:

    `{ "type": "update", "subscription": "binance:btcusdt:1m", "data": { "binance_btcusdt_1m_my_rsi": { "value": [41.99], "timestamp": [1793656260] } } }`

    5. **Unsubscribe** — send the scoped id: `{ "type": "unsubscribe", "id": "binance_btcusdt_1m_my_rsi" }` → `{ "type": "unsubscribed", "id": "binance_btcusdt_1m_my_rsi" }`


    **Other message types:**


    - `{ "type": "subscribe_bulk", "exchange": "binance", "symbols": ["BTCUSDT", "ETHUSDT"], "intervals": ["1m"], "indicators": [{ "id": "my_rsi", "name": "rsi", "params": { "period": 14 } }] }` — subscribes every symbol × interval × indicator combination. The server replies `subscribe_bulk_ack`, then `subscribe_bulk_complete` with the `subKeys` registered.

    - `{ "type": "unsubscribe_all" }` → `{ "type": "unsubscribed_all", "message": "..." }`

    - `{ "type": "list" }` → `{ "type": "subscriptions", "data": { ... } }` (add `"unpack": true` for a flat array)

    - `{ "type": "ping" }` → `{ "type": "pong", "timestamp": 1793656260000 }`

    - Errors arrive as `{ "type": "error", "error": "..." }`.


    Use the same API key (Bearer token) as for the REST API.'
servers:
- url: https://v2.taapi.io
  description: Production
- url: http://localhost:8080
  description: Local development
security:
- bearerAuth: []
tags:
- name: Manual Candles
  description: Calculate indicators over a list of provided candles instead of fetching them from an exchange. You must provide your own OHLCV data.
paths:
  /indicator/{indicator}:
    post:
      tags:
      - Manual Candles
      summary: Single indicator — manual candles
      description: 'Calculate a single indicator from a user-supplied candle array.


        Use this endpoint when you have candles from your own data source and want TAAPI to compute indicator values from them — **no exchange, symbol, or timeframe required**.


        - Supports both long-form (`open/high/low/close/volume/timestamp`) and short-form (`o/h/l/c/v/t`) candle objects.

        - Maximum **500 candles** per request.

        - Results are **never cached** — each request is computed fresh.

        - All indicator parameters (e.g. `period`, `source`) are passed in the request body alongside the candles, exactly as they would be in a query string on the standard `GET /indicator/:ind` endpoint.

        - For reduced request payload size, the short-form notation (`o`, `h`, `l`, `c`, `v`, `t`) is recommended over the full field names (`open`, `high`, `low`, `close`, `volume`, `timestamp`). Both are functionally equivalent.'
      operationId: postIndicatorManualCandles
      security:
      - BearerAuth: []
      parameters:
      - name: indicator
        in: path
        required: true
        description: Indicator name (e.g. `rsi`, `ema`, `macd`).
        schema:
          type: string
          example: rsi
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - candles
              properties:
                candles:
                  type: array
                  description: Array of OHLCV candles. Maximum 500 candles per request. Both long-form and short-form field names are supported.
                  maxItems: 500
                  minItems: 1
                  items:
                    type: object
                    description: A single OHLCV candle. Both long-form (`open/high/low/close/volume/timestamp`) and short-form (`o/h/l/c/v/t`) field names are accepted.
                    properties:
                      timestamp:
                        type: number
                        description: Unix timestamp in seconds (optional).
                      t:
                        type: number
                        description: Unix timestamp — short-form alias for `timestamp`.
                      open:
                        type: number
                      o:
                        type: number
                        description: Short-form alias for `open`.
                      high:
                        type: number
                      h:
                        type: number
                        description: Short-form alias for `high`.
                      low:
                        type: number
                      l:
                        type: number
                        description: Short-form alias for `low`.
                      close:
                        type: number
                      c:
                        type: number
                        description: Short-form alias for `close`.
                      volume:
                        type: number
                        default: 0
                      v:
                        type: number
                        description: Short-form alias for `volume`.
                    oneOf:
                    - required:
                      - open
                      - high
                      - low
                      - close
                    - required:
                      - o
                      - h
                      - l
                      - c
                    example:
                      t: 1708300800
                      o: 51200.5
                      h: 52100
                      l: 50900.25
                      c: 51850.75
                      v: 1234.56
                results:
                  type: integer
                  default: 1
                  description: Number of result values to return (most recent first).
                  example: 1
                backtrack:
                  type: integer
                  default: 0
                  description: Number of closed candles to skip from the end before calculating.
                  example: 0
              additionalProperties:
                description: Any additional indicator-specific parameters (e.g. `period`, `source`, `fastPeriod`). These are identical to the query-string params accepted by `GET /indicator/:ind`.
            examples:
              rsi:
                summary: RSI with period 14
                value:
                  candles:
                  - t: 1708300800
                    o: 51200.5
                    h: 52100
                    l: 50900.25
                    c: 51850.75
                    v: 1234.56
                  - t: 1708304400
                    o: 51850.75
                    h: 52500
                    l: 51700
                    c: 52200
                    v: 987.32
                  - t: 1708308000
                    o: 52200
                    h: 52800
                    l: 51900
                    c: 52600
                    v: 1100.12
                  period: 14
                  results: 1
              emaShortForm:
                summary: EMA using short-form candle fields
                value:
                  candles:
                  - t: 1708300800
                    o: 51200.5
                    h: 52100
                    l: 50900.25
                    c: 51850.75
                    v: 1234.56
                  period: 20
                  results: 1
      responses:
        '200':
          description: Indicator value(s) computed from the supplied candles.
          content:
            application/json:
              schema:
                type: object
                description: Indicator result. Shape matches the standard `GET /indicator/:ind` response.
                properties:
                  value:
                    type: array
                    items:
                      type: number
                  timestamp:
                    type: array
                    items:
                      type: number
                additionalProperties: true
              examples:
                rsi:
                  summary: RSI result
                  value:
                    value:
                    - 58.4
                    timestamp:
                    - 1708308000
                macd:
                  summary: MACD result (multi-value)
                  value:
                    valueMACD:
                    - 120.5
                    valueMACDSignal:
                    - 115.2
                    valueMACDHist:
                    - 5.3
                    timestamp:
                    - 1708308000
        '400':
          description: Validation error — missing candles, invalid candle format, или unknown indicator.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              examples:
                missingCandles:
                  summary: No candles supplied
                  value:
                    error: '"candles" must be a non-empty array'
                tooMany:
                  summary: Over 500 candles
                  value:
                    error: '"candles" exceeds maximum of 500 candles (got 501)'
                badField:
                  summary: Non-numeric OHLC
                  value:
                    error: candles[0].open must be a finite number
                unknownIndicator:
                  summary: Unknown indicator
                  value:
                    error: 'Unknown indicator: fakeindicator'
        '401':
          description: Unauthorized — a valid API key must be provided.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
  /bulk-candles:
    post:
      tags:
      - Manual Candles
      summary: Bulk — manual candles
      description: 'Calculate multiple indicators across one or more constructs, each with its own user-supplied candle array.


        Use this endpoint when you have candles from your own data source. Unlike `POST /bulk`, there is **no exchange, symbol, or timeframe** — each construct carries its own `candles` array instead.


        - Maximum **500 candles** per construct.

        - Maximum constructs per request is plan-dependent (hard cap: 20).

        - Both long-form and short-form candle field names are supported.

        - Results are **never cached** — each request is freshly computed.

        - For reduced request payload size, the short-form notation (`o`, `h`, `l`, `c`, `v`, `t`) is recommended over the full field names (`open`, `high`, `low`, `close`, `volume`, `timestamp`). Both are functionally equivalent.'
      operationId: postBulkManualCandles
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - constructs
              properties:
                verbose:
                  type: boolean
                  default: false
                  description: When `true`, each indicator result is wrapped in a metadata envelope (`indicator`, `params`, `result`, `errors`).
                constructs:
                  type: array
                  minItems: 1
                  maxItems: 20
                  description: Array of constructs. Each construct has its own candle array and a set of indicators to compute.
                  items:
                    type: object
                    required:
                    - id
                    - candles
                    - indicators
                    properties:
                      id:
                        type: string
                        pattern: ^[a-zA-Z0-9_]+$
                        description: Unique identifier for this construct. Used as the key in the response object. Only alphanumeric characters and underscores are allowed.
                        example: my_btc
                      candles:
                        type: array
                        description: Array of OHLCV candles. Maximum 500 candles per request. Both long-form and short-form field names are supported.
                        maxItems: 500
                        minItems: 1
                        items:
                          type: object
                          description: A single OHLCV candle. Both long-form (`open/high/low/close/volume/timestamp`) and short-form (`o/h/l/c/v/t`) field names are accepted.
                          properties:
                            timestamp:
                              type: number
                              description: Unix timestamp in seconds (optional).
                            t:
                              type: number
                              description: Unix timestamp — short-form alias for `timestamp`.
                            open:
                              type: number
                            o:
                              type: number
                              description: Short-form alias for `open`.
                            high:
                              type: number
                            h:
                              type: number
                              description: Short-form alias for `high`.
                            low:
                              type: number
                            l:
                              type: number
                              description: Short-form alias for `low`.
                            close:
                              type: number
                            c:
                              type: number
                              description: Short-form alias for `close`.
                            volume:
                              type: number
                              default: 0
                            v:
                              type: number
                              description: Short-form alias for `volume`.
                          oneOf:
                          - required:
                            - open
                            - high
                            - low
                            - close
                          - required:
                            - o
                            - h
                            - l
                            - c
                          example:
                            t: 1708300800
                            o: 51200.5
                            h: 52100
                            l: 50900.25
                            c: 51850.75
                            v: 1234.56
                      indicators:
                        type: array
                        minItems: 1
                        description: List of indicators to compute against this construct's candles.
                        items:
                          type: object
                          required:
                          - id
                          - indicator
                          properties:
                            id:
                              type: string
                              pattern: ^[a-zA-Z0-9_]+$
                              description: Unique identifier for this indicator within the construct.
                              example: rsi_14
                            indicator:
                              type: string
                              description: Indicator name (e.g. `rsi`, `ema`, `macd`).
                              example: rsi
                            results:
                              type: integer
                              default: 1
                              description: Number of result values to return.
                            backtrack:
                              type: integer
                              default: 0
                              description: Candles to skip from the end before calculating.
                          additionalProperties:
                            description: Any additional indicator-specific parameters (e.g. `period`, `source`).
            examples:
              singleConstruct:
                summary: One construct, two indicators
                value:
                  constructs:
                  - id: my_btc
                    candles:
                    - t: 1708300800
                      o: 51200.5
                      h: 52100
                      l: 50900.25
                      c: 51850.75
                      v: 1234.56
                    - t: 1708304400
                      o: 51850.75
                      h: 52500
                      l: 51700
                      c: 52200
                      v: 987.32
                    indicators:
                    - id: rsi_14
                      indicator: rsi
                      period: 14
                      results: 1
                    - id: ema_20
                      indicator: ema
                      period: 20
                      results: 1
              multiConstruct:
                summary: Two constructs with different candle sets
                value:
                  constructs:
                  - id: btc_data
                    candles:
                    - t: 1708300800
                      o: 51200.5
                      h: 52100
                      l: 50900.25
                      c: 51850.75
                      v: 1234.56
                    indicators:
                    - id: rsi
                      indicator: rsi
                      period: 14
                  - id: eth_data
                    candles:
                    - t: 1708300800
                      o: 2800
                      h: 2900
                      l: 2750
                      c: 2850
                      v: 5000
                    indicators:
                    - id: ema
                      indicator: ema
                      period: 20
              verbose:
                summary: Verbose output
                value:
                  verbose: true
                  constructs:
                  - id: my_btc
                    candles:
                    - t: 1708300800
                      o: 51200.5
                      h: 52100
                      l: 50900.25
                      c: 51850.75
                      v: 1234.56
                    indicators:
                    - id: rsi_14
                      indicator: rsi
                      period: 14
      responses:
        '200':
          description: Indicator results keyed by construct id.
          content:
            application/json:
              schema:
                type: object
                description: Response object keyed by construct `id`. Each value is an object keyed by indicator `id`.
                additionalProperties:
                  type: object
                  additionalProperties: true
              examples:
                default:
                  summary: 'Standard output (verbose: false)'
                  value:
                    my_btc:
                      rsi_14:
                        value:
                        - 58.4
                        timestamp:
                        - 1708308000
                      ema_20:
                        value:
                        - 51600.3
                        timestamp:
                        - 1708308000
                verbose:
                  summary: 'Verbose output (verbose: true)'
                  value:
                    my_btc:
                      rsi_14:
                        indicator: rsi
                        params:
                          period: 14
                        result:
                          value:
                          - 58.4
                          timestamp:
                          - 1708308000
                        errors: []
        '400':
          description: Validation error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              examples:
                missingCandles:
                  summary: Missing candles
                  value:
                    error: 'Construct "my_btc" candles error: "candles" must be a non-empty array'
                tooMany:
                  summary: Too many candles
                  value:
                    error: 'Construct "my_btc" candles error: "candles" exceeds maximum of 500 candles (got 501)'
                unknownIndicator:
                  summary: Unknown indicator
                  value:
                    error: 'Construct "my_btc" references unknown indicator: fakeindicator'
                duplicateId:
                  summary: Duplicate construct id
                  value:
                    error: Duplicate construct id "my_btc". Construct ids must be unique within the request.
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        '429':
          description: Plan construct limit exceeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              example:
                error: Too many constructs. Your plan allows 1 construct(s) per bulk-candles request.
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: Your TAAPI API key, passed as a Bearer token in the Authorization header.