Developer guide › Guides
One check for your integration: skip the candle that's still forming
The newest candle can still change. Here's how to tell, and the two lines that handle it.
The issue
When you ask for recent candles, the last one is usually the current
period, still in progress. Its high, low and close keep moving until the period ends. TickFeed marks it with
"complete": false:
Sample response to GET /v1/candles/XAUUSD?timeframe=H1&limit=24, captured from the live API on 02 November 2026 at 13:49 UTC. It's a real past response, not live data: prices have moved since.
{
"symbol": "XAUUSD",
"timeframe": "H1",
"source": "live",
"count": 24,
"truncated": false,
"next_start_time": null,
"candles": [
{
"time": "2026-11-02T12:00:00Z",
"open": 3901.37,
"high": 3906.93,
"low": 3898.62,
"close": 3901.11,
"tick_volume": 23638,
"spread_points": 5,
"complete": true
},
{
"time": "2026-11-02T13:00:00Z",
"open": 3901.12,
"high": 3950.7,
"low": 3896.3,
"close": 3943.03,
"tick_volume": 56414,
"spread_points": 5,
"complete": false
}
],
"notes": [
"The last candle is still forming (complete=false); its values may change."
],
"note": "(trimmed to the last 2 of 24 candles for this page)"
}The fix
bars = tf.candles("XAUUSD", "H1", limit=50)["candles"]
closed = [b for b in bars if b["complete"]] # only finished hours
last_closed = closed[-1]
Use closed for anything that should not change after the fact (signals, averages, stored history), and
the forming bar only for display. Remember that time is the bar's open time in UTC.
Cost: up to 100 candles: 1 unit. One unit is $0.002 / £0.002 / €0.002 (in your account's currency), taken from your prepaid balance only when the request succeeds. Full prices.