Each tick includes an exchange timestamp, which reflects when the trade or quote actually occurred at the exchange. For any time-based aggregation like candles, this timestamp is the correct reference, rather than the local system time when the tick is received.
On our end, ticks are forwarded immediately as we receive them, without any intentional delay, batching, or buffering. However, once the data is sent to your system over WebSocket, it travels across the internet. During this stage, small delays can occur due to network conditions, routing paths, and other factors outside the control of any single participant.
So while the data itself remains accurate, the arrival time at your system can be slightly later than the exchange timestamp.
To handle this reliably, you may consider event-driven bar completion logic instead of strict wall-clock cutoffs, so late-arriving ticks are included in the correct interval.