Examples · market data

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



  
This page is history only. For the latest price use 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

IntervalWhere it is builtqualityDefault range · cap
1mStored per minute from the feed; OHLC is estimated from observed prices, not every exchange printestimated7 days · 5000 bars
5m 15m 30m 1hRolled up from 1m on each request (date_bin): first open, max high, min low, last close, summed volumeprovisional7 days · 5000 bars
1dStored per session from the source's cumulative session fieldsfinal after the session30 days · 5000 bars
Timestamps are RFC 3339 UTC instants — the chart above converts them to 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.

Intraday bars are never adjusted. A split does not rewrite past minutes; it only changes the factor on daily bars.