Manual Candle Injection

Calculate technical indicators entirely from your own price data — no exchange, symbol, or timeframe required. POST any OHLCV candle array to the API and receive indicator values in return. Works with data from any source: crypto, equities, futures, forex, or custom synthetic indices.


Single indicator

POST your candle array directly to an indicator’s endpoint:

POST https://v2.taapi.io/indicator/{name}
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Indicator-specific parameters (e.g. period) are included in the JSON body alongside the candles array — not as query strings.

Candle format

Both long-form and short-form field names are supported and functionally equivalent:

Long-form Short-form Description
timestamp t Unix timestamp (seconds)
open o Open price
high h High price
low l Low price
close c Close price
volume v Volume

Short-form notation (t, o, h, l, c, v) significantly reduces payload size and is recommended for production use.

Body parameters

In addition to indicator-specific parameters (e.g. period), the following optional fields control how many results are returned:

Parameter Default Description
candles (Required) Array of OHLCV candle objects
results 1 Number of result values to return (most recent first)
backtrack 0 Number of closed candles to skip from the end before calculating

Request

POST https://v2.taapi.io/indicator/rsi

{
  "period": 14,
  "results": 1,
  "candles": [
    { "t": 1708300800, "o": 51200.50, "h": 52100.00, "l": 50900.25, "c": 51850.75, "v": 1234.56 },
    { "t": 1708304400, "o": 51850.75, "h": 52500.00, "l": 51700.00, "c": 52200.00, "v":  987.32 }
  ]
}

Response

The response shape matches the standard GET /indicator/<name> endpoint — value is always an array, paired with a timestamp array:

{
  "value": [58.4],
  "timestamp": [1708308000]
}

Multi-output indicators return named array fields:

{
  "valueMACD":       [120.5],
  "valueMACDSignal": [115.2],
  "valueMACDHist":   [5.3],
  "timestamp":       [1708308000]
}

Limits

  • Maximum 500 candles per request
  • Results are never cached — every request is computed fresh in memory
  • The candles array must contain enough periods to satisfy the indicator’s lookback window (e.g. RSI with period: 14 requires at least 15 candles)

Bulk manual candles

Calculate multiple indicators across one or more custom candle datasets in a single request. Each construct carries its own independent candle array — useful for running a full indicator matrix against proprietary or multi-asset data.

POST https://v2.taapi.io/bulk-candles
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Request

{
  "constructs": [
    {
      "id": "my_dataset",
      "candles": [
        { "t": 1708300800, "o": 51200.50, "h": 52100.00, "l": 50900.25, "c": 51850.75, "v": 1234.56 },
        { "t": 1708304400, "o": 51850.75, "h": 52500.00, "l": 51700.00, "c": 52200.00, "v":  987.32 }
      ],
      "indicators": [
        { "id": "rsi_14", "indicator": "rsi", "period": 14 },
        { "id": "ema_20", "indicator": "ema", "period": 20 }
      ]
    }
  ]
}

Response

{
  "my_dataset": {
    "rsi_14": { "value": [58.4],    "timestamp": [1708308000] },
    "ema_20": { "value": [51600.3], "timestamp": [1708308000] }
  }
}

Add "verbose": true to the request body to include full metadata (indicator name, normalised parameters, and an errors array) in each result.

Limits and rules

Constraint Value
Max candles per construct 500
Max constructs per request 20 (plan limits may apply)
Max indicators per construct 20
Caching None — computed fresh on every request

Error handling

Unlike POST /bulk (which embeds _error fields per construct and returns a 200), any structural failure in /bulk-candles — missing fields, insufficient candle count, invalid JSON — aborts the entire request and returns a global 400 Bad Request:

{
  "error": "Bad Request",
  "message": "Construct 'my_dataset' requires at least 20 candles for 'ema' with period 20."
}

Error codes

Status Cause
400 Bad Request Missing parameters, insufficient candles for the requested period, or invalid JSON structure
401 Unauthorized API key missing or invalid
429 Too Many Requests Rate limit exceeded — see Rate Limits

Next steps

Was this page helpful? Send us feedback or open a support ticket.