wss://api.replaypulse.io/aggs Streams OHLCV aggregate bars for stocks and selected options. Bars sharing a timestamp are fanned out in parallel, one bar per WebSocket frame, just like a live feed. Timestamps are milliseconds.
ReplayPulse lets teams replay historical bars, trades, quotes, and options through WebSockets, so strategy systems can be developed and tested the same way they run during market hours.
Use the simulation engine instead of building custom fake live-data infrastructure, and still download organized datasets when research calls for files instead of a running replay.
API surface
wss://api.replaypulse.io/aggs Streams OHLCV aggregate bars for stocks and selected options. Bars sharing a timestamp are fanned out in parallel, one bar per WebSocket frame, just like a live feed. Timestamps are milliseconds.
wss://api.replaypulse.io/tape Streams historical trades, quotes, or both for stocks and selected options. Ticks sharing a timestamp are fanned out in parallel, one event per WebSocket frame, just like a live feed. Timestamps are SIP nanoseconds.
https://api.replaypulse.io/data/aggs Creates an in-memory aggregate dataset and returns the first page. Follow nextUrl to download the rest.
https://api.replaypulse.io/data/tape Creates an in-memory trades/quotes dataset and returns paginated timestamp buckets.
Session lifecycle
Open /aggs for bars or /tape for trades and quotes.
Send the replay window, tickers, speed, and option filters.
The server loads data and reports the timestamp count.
Pause, resume, or replay the same loaded timeline. Ticks and bars sharing a timestamp are sent in parallel as separate messages, so consumers must fan out the same way a live market feed would.
{ "action": "play" }
{ "action": "pause" }
{ "action": "play" }HTTP exports
config and an optional limit. The service keeps the dataset in memory,
returns nextUrl, deletes it after the final page, and expires it after 10 minutes.GET /data/aggs?limit=2&config={urlEncodedConfig}
GET /data/tape?limit=100&config={urlEncodedConfig}{
"datasetId": "2d01fce5c9a841f5ad41be58a44b3a92",
"kind": "aggs",
"limit": 2,
"count": 2,
"remaining": 14,
"expiresAt": "2026-05-24T12:42:31Z",
"nextUrl": "https://api.replaypulse.io/data/aggs/pages/2d01fce5c9a841f5ad41be58a44b3a92?limit=2",
"data": [
{
"t": 1779163200000,
"items": [
{ "ticker": "AAPL", "t": 1779163200000, "c": 298.97 }
]
}
]
}Examples
{
"action": "configure",
"config": {
"startDate": "2025-11-03T00:00:00Z",
"endDate": "2025-11-04T00:00:00Z",
"tickers": ["SPY", "AAPL"],
"multiplier": 1,
"timespan": "minute",
"speed": 3600,
"rthOnly": true,
"includeOptions": false
}
}{
"action": "configure",
"config": {
"startDate": "2026-05-18T00:00:00Z",
"endDate": "2026-05-22T00:00:00Z",
"tickers": ["AAPL"],
"multiplier": 1,
"timespan": "day",
"speed": 86400,
"rthOnly": false,
"includeOptions": true,
"optionFilters": {
"expirations": ["ALL"],
"strikesToInclude": 2
}
}
}{
"action": "configure",
"config": {
"startDate": "2025-11-03T14:30:00Z",
"endDate": "2025-11-03T14:35:00Z",
"tickers": ["SPY"],
"speed": 1000000000,
"rthOnly": true,
"includeOptions": true,
"optionFilters": {
"expirations": ["2025-12-19"],
"strikesToInclude": 1
},
"includeTrades": true,
"includeQuotes": true
}
}{
"event": "ready",
"bars": 4
}{
"event": "ready",
"timestamps": 237
}{
"ticker": "AAPL",
"t": 1779163200000,
"o": 296.97,
"h": 300.51,
"l": 296.35,
"c": 298.97,
"v": 42243633.01,
"vw": 298.3829,
"n": 640857
}{
"type": "trade",
"assetClass": "stock",
"ticker": "SPY",
"t": 1762180200123456789,
"data": {
"sip_timestamp": 1762180200123456789,
"participant_timestamp": 1762180200123000000,
"price": 685.42,
"size": 100,
"exchange": 11,
"sequence_number": 721904
}
}Configuration
startDate ISO timestampReplay window start.
endDate ISO timestampReplay window end. Must be after startDate.
tickers string[]Underlying stock tickers. All symbols are merged into one timestamp stream.
multiplier numberAggregate bar multiplier.
timespan stringsecond, minute, hour, day, week, month, quarter, or year.
speed numberPlayback speed. Higher values compress historical gaps between timestamps.
rthOnly booleanFor intraday bars, true keeps only regular market hours.
includeOptions booleanWhen true, option aggregate bars are discovered and merged into the same timestamp buckets.
startDate ISO timestampTick replay window start. The provider receives a nanosecond timestamp lower bound.
endDate ISO timestampTick replay window end. The provider receives a nanosecond timestamp upper bound.
tickers string[]Underlying stock tickers to load from stock trades and quotes endpoints.
speed numberPlayback speed for nanosecond SIP timestamp gaps.
rthOnly booleanWhen true, keeps only events inside regular market hours.
includeTrades booleanLoads stock and option trade history when enabled.
includeQuotes booleanLoads stock and option quote history when enabled. At least one of trades or quotes must be true.
Options
optionFilters.expirations string[]Expiration dates as YYYY-MM-DD. Use ["ALL"] by itself to consider every active or expired expiration.
optionFilters.strikesToInclude numberNearby strike levels below and above the underlying price per expiration. Calls and puts at selected strikes are included.