Every EODHD account is governed by three independent limits: how many requests you may send per minute, how many API calls you may spend per day, and — if you subscribe to one — a separate quota for each Marketplace product. Requests and calls are not the same thing, and mixing them up is the most common reason a limit appears to be hit “too early”.
| Limit | What it counts | Default | When it resets |
|---|---|---|---|
| Minute request limit | HTTP requests, regardless of their cost | 1,000 requests per minute | Every minute |
| Daily call limit | API calls — the “currency” a request spends | 20 on the Free plan, from 100,000 on paid plans | Midnight GMT |
| Marketplace quota | API calls, counted separately per product | 100,000 per product | 24 hours after that product’s first request |
Every example on this page runs as-is: the demo key works on the usage endpoint, so you can check the numbers yourself before you sign up.
You can check the current status of the EODHD service on our uptime page.
API Calls vs API Requests
An API request is one HTTP call you make to our servers. An API call is the unit of account we charge that request in — think of it as a currency. One request may cost 1 call or 100 calls, depending on which endpoint it hits and how much data it returns.
The two limits count different things, and this is the part worth remembering:
- The minute limit counts requests. A single request for the whole US exchange counts as one request against it, even though it costs 100 API calls.
- The daily limit counts calls. That same request spends 100 of your daily calls.
Daily API Call Limit
Your daily allowance depends on your plan:
- Free plan — 20 API calls per day. Enough to try the endpoints out, not to run an application.
- Paid plans — from 100,000 API calls per day. Every subscription plan starts at 100,000, and the limit can be raised — see Increasing Your Daily Limit.
- Marketplace products — 100,000 API calls per product, counted separately. See Marketplace Products below.
The exact allowance attached to your own key is always available from the usage endpoint described in Checking Your Consumption. Full plan comparison is on the pricing page.
When the daily limit resets
For subscription plans the daily limit resets at midnight GMT. The counter itself is reset lazily: it is zeroed by your first request after midnight, not by a scheduled job. Until you make that first request, the dashboard and the usage endpoint keep showing the total from your last active day. This is expected behaviour, not a stale reading.
What happens when you run out
Once the daily limit is spent, we first draw on your extra API calls if you have any. When those are gone too, requests are refused with HTTP 402 and this message:
API Rate Limit Exceeded. Please, contact our support team: support@eodhistoricaldata.com
A refused request does not consume anything — it is rejected before the counter is incremented. The charge is also all-or-nothing: if you have 5 calls left and send a Fundamental data request that costs 10, the whole request is refused, but five 1-call requests would still go through.
API Call Cost by Endpoint
The table below lists the cost of a single request to each API. Where an endpoint accepts several symbols in one request, the cost is multiplied by the number of symbols.
| API | Cost per request |
|---|---|
| End-of-Day, Splits and Dividends | 1 |
| Live (Delayed) API, per symbol | 1 |
| Search, Exchanges List, Exchange Symbol List, Calendar | 1 |
| Intraday API | 5 |
| Technical API | 5 |
| News API | 5 |
| Screener API | 5 |
| Fundamental Data API | 10 |
| Options API | 10 |
| Bond Fundamentals API | 10 |
| Macroeconomics API | 10 |
| Insider Transactions API | 10 |
| Each Marketplace product, against its own quota | 10 |
| Bulk API, whole exchange | 100 |
| Bulk API with the symbols parameter | 100 + N, where N is the number of symbols |
| Usage endpoint, /api/user | 0 |
Where an API is not listed, the cost is stated on that API’s own documentation page. A few details that catch people out:
- Multiple tickers multiply the cost. A Live API request for 10 symbols costs 10 API calls, not 1. The same rule applies to every endpoint that accepts several symbols in one request.
- The filter parameter does not reduce the cost. A Fundamental data request narrowed down to a single field still costs 10 API calls — you are charged for the query, not the size of the response.
- Failed lookups are charged. A request for a ticker that does not exist returns HTTP 404 and still costs its normal price. Validate symbols against the Exchange Symbol List, which costs 1 call for a whole exchange, rather than probing them one by one.
Minute Request Limit
Separately from the daily budget, the API accepts no more than 1,000 requests per minute. This limit counts requests, not API calls — an expensive request and a cheap one weigh the same against it.
Every successful response carries the current state of that budget in its headers, so you never have to guess or hard-code the number:
X-RateLimit-Limit: <the limit applied to your key>
X-RateLimit-Remaining: <requests left in the current minute>
X-RateLimit-Limit is the ceiling currently applied to your key and X-RateLimit-Remaining is how much of it is left in the current minute. Read them from the response rather than assuming a fixed value, and back off when the remaining count approaches zero.
Exceeding the limit returns HTTP 429 Too Many Requests with a Retry-After header telling you how many seconds to wait. Spread requests evenly across the minute rather than firing them all at once, and honour Retry-After instead of retrying immediately.
Requests that fail still count against the minute budget — a 404 consumes it exactly like a successful request. Requests rejected for an invalid API token do not: they are refused before the rate limiter and carry no rate-limit headers at all.
Checking Your Consumption
There are two ways to see how much of your daily limit you have spent.
From the API
The usage endpoint reports your consumption programmatically, and it does not cost an API call — you can poll it safely from your own monitoring:
https://eodhd.com/api/user?api_token=demo&fmt=json
curl --location "https://eodhd.com/api/user?api_token=demo&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/user?api_token=demo&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/user?api_token=demo&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/user?api_token=demo&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
The demo key above belongs to a demonstration account, so the numbers it returns are not typical — run the same request with your own key to see your account. The fields that matter for limits are:
apiRequests
string
optional
apiRequestsDate
string
optional
dailyRateLimit
string
optional
extraLimit
string
optional
From the dashboard
Your current consumption is shown on the dashboard, and a chart of historical usage is available at https://eodhd.com/cp/api, where you can filter by period and by type of request.
Note that the chart counts requests, not API calls. To see the effect on your daily limit, multiply each bar by the cost of that endpoint from the table above — 500 Intraday requests, for example, are 2,500 API calls.

Extra API Calls
You can buy additional API calls as a buffer. They are spent only once your daily limit is exhausted, they never expire, and they accumulate if you buy more. To purchase them, use the “Buy Extra API Calls” form on your dashboard page.

Extra API calls are a buffer, not an increase — they do not raise your daily limit. To raise the limit itself, see Increasing Your Daily Limit. If you subscribed through PayPal, you can buy a second subscription of the same type and let us know, and we will increase your limit.
Increasing Your Daily Limit
To raise the daily limit on a subscription plan above the default 100,000, open the “Daily Usage” section of the dashboard and choose “Increase Daily Limit”. You will see the price of the upgrade and can send the order to our support team:

We do not currently offer self-service limit increases for Marketplace products. If you need one, write to support@eodhistoricaldata.com and describe your case.
Marketplace Products
Marketplace products are metered separately from your subscription. Each product has its own quota of 100,000 API calls, and a request to a Marketplace endpoint costs 10 API calls against that product’s quota — it does not draw on your subscription’s daily calls at all. Some products state a different cost on their own documentation page.
The window is also different. Instead of resetting at midnight GMT, a Marketplace quota runs for 24 hours from that product’s first request: the first request opens the window, and the quota applies until it closes.
Limit-Related Responses
| Status | Meaning | What to do |
|---|---|---|
| 402 | Daily API call limit exhausted, and no extra calls left | Wait for midnight GMT, buy extra API calls, or raise your daily limit |
| 429 | Too many requests in the current minute | Wait the number of seconds given in the Retry-After header, then retry |
| 401 | Missing or invalid API token — not a limit at all | Check the token; these requests are refused before the rate limiter |
If something here does not match what you are seeing, write to support@eodhistoricaldata.com — include your account email and the response headers and we will look into it.