OHLCV Data
Daily price bars for US-listed companies in Daloopa coverage
Daily price bars for US-listed companies in Daloopa coverage. Each bar is one company on one US trading day: opening price, intraday high and low, closing price, and total traded volume. There is exactly one row per company per trading day, and rows always come back sorted by date, oldest first.
Endpoint
| Endpoint | Purpose |
|---|---|
GET /api/v3/companies/{company_id}/stock-prices | Returns daily OHLCV bars for one company, raw by default, adjusted on request |
Authenticate with Authorization: Basic base64(email:apiKey). The endpoint requires the market_data endpoint group on your API key (or full_access) and is rate limited to 120 requests per minute per key.
The company_id is the same id you use everywhere else in the Daloopa API. If you only have a ticker, resolve it to a company id first with the company search endpoint.
Parameters
| Parameter | Type | Required | Notes |
|---|---|---|---|
dates | date, repeatable | One of dates or start_date | Specific trading dates, YYYY-MM-DD, up to 100 per request. Cannot be combined with start_date/end_date |
start_date | date | One of dates or start_date | Start of a date range, inclusive |
end_date | date | No | End of the range, inclusive. Must not be before start_date |
adjusted | boolean | No | Default false. Set true for split- and dividend-adjusted values |
limit | integer | No | Rows per page, default and maximum 500 |
offset | integer | No | Pagination offset |
Response
Responses are paginated with the standard count, next, previous, results envelope. Each row in results has:
| Field | Type | Description |
|---|---|---|
date | date | Trading date for the returned datapoint |
open | number | Opening price on the trading date |
high | number | Highest price reached during the trading date |
low | number | Lowest price reached during the trading date |
close | number | Closing price on the trading date |
volume | integer | Total traded volume for the trading date, in shares |
adjusted | boolean | Echo of the request's adjusted flag |
Prices carry up to 6 decimal places. All covered listings trade on US exchanges, so prices are in US dollars.
Example
Fetch Apple's bars for two specific dates:
curl "https://app.daloopa.com/api/v3/companies/2/stock-prices?dates=2024-01-02&dates=2024-01-03" \
-H "Authorization: Basic <base64 of email:apiKey>"
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"date": "2024-01-02",
"open": 190.18,
"high": 190.25,
"low": 183.89,
"close": 185.32,
"volume": 22964749,
"adjusted": false
},
{
"date": "2024-01-03",
"open": 185.08,
"high": 185.87,
"low": 183.435,
"close": 184.2,
"volume": 16177208,
"adjusted": false
}
]
}Raw by default, adjusted on request
By default you get prices exactly as the exchanges reported them on the day. A 10-for-1 split shows up as the price dropping to a tenth overnight, because that is what happened on the tape.
Add ?adjusted=true and the API adjusts every bar at read time, using the standard forward-adjustment convention:
- Open, high, low, and close are multiplied by the combined factor of every split, cash dividend (specials included), and spinoff whose ex-date falls after the bar's date. A factor never applies to its own ex-date, since bars from the ex-date on are already in post-event terms.
- Volume is divided only by split factors, since only splits change the share count, and is rounded to whole shares.
The most recent bars are always unchanged. Adjustment only rewrites history so that returns computed across an event come out right. Two things the adjusted series deliberately does not do: it does not value spun-off entities, and it is not a reconstructed total-return series.
If you want to verify the adjustment or apply your own convention, every underlying event is available through the Adjustment Factors endpoint.
Reading gaps
- Non-trading days have no rows. Weekends, market holidays, and halted days are simply absent. There is no fill-forward.
- A request for specific
datesreturns rows only for the dates that have bars. - A
company_idwith no price coverage returns an empty list with HTTP 200, not an error. - Newly listed companies have bars from their listing date. Established coverage goes back to January 2019.
Full request and response schemas are in the API reference.
Updated about 1 hour ago