One endpoint, six intervals
Every candlestick below is a real TASI API response for a Saudi listed symbol. Pick an interval, read the request that produced it, and copy the client code. No SDK, no websocket, no charting library.
Times are Asia/Riyadh (UTC+3) — the trading session runs 10:00 to 15:20 local. The API returns RFC 3339 UTC instants; convert on the client so a reader never has to subtract three hours in their head.
The request behind this chart
One route answers every interval on this page. The bars are the same shape regardless of the step, so a client parses one structure:
curl
JavaScript — server side only
A key in browser JavaScript is visible to every visitor. Call the API from your server, or proxy it, and never ship the key to the client.
Python
Response
GET /quotes?symbols=1120; for a pushing feed use the WebSocket at wss://api.tasi-api.com/api/v1/ws. Both are documented under What else you can call.What changes with the interval
| Interval | Where it is built | quality | Default range · cap |
|---|---|---|---|
1m | Stored per minute from the feed; OHLC is estimated from observed prices, not every exchange print | estimated | 7 days · 5000 bars |
5m 15m 30m 1h | Rolled up from 1m on each request (date_bin): first open, max high, min low, last close, summed volume | provisional | 7 days · 5000 bars |
1d | Stored per session from the source's cumulative session fields | final after the session | 30 days · 5000 bars |
Asia/Riyadh before drawing. A Saudi session runs 10:00 to 15:20 local, so the first morning bar is 07:00Z. Sort by t; the array is ascending, and count is exact.Daily prices are as traded
The daily series stores the price that changed hands, so a chart spanning a bonus issue or a split shows the real gap — not a smoothed one. Each daily bar carries adjust_factor, the cumulative product of every split or bonus whose ex-date is after that bar:
adjusted close = close / adjust_factor adjusted volume = volume * adjust_factor
For Al Rajhi a 1.26 factor applies to every bar before 2026-09-22, so a 52.42 close in the adjusted view is a 66.05 close in the traded view. If you want a continuous series, divide — do not re-fetch, and do not compare a traded close with an adjusted one.