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
candlesarray must contain enough periods to satisfy the indicator’s lookback window (e.g. RSI withperiod: 14requires 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
- Market Data — Fetch live exchange candles to use as your input array
- Integration Guide — Live exchange indicator calculations via GET and POST
- Indicators Reference — All supported indicators and their accepted parameters
Was this page helpful? Send us feedback or open a support ticket.