MCP Server For Financial Data by EODHD Learn more

API Limits: Daily Calls, Rate Limits and Costs

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”.

LimitWhat it countsDefaultWhen it resets
Minute request limitHTTP requests, regardless of their cost1,000 requests per minuteEvery minute
Daily call limitAPI calls — the “currency” a request spends20 on the Free plan, from 100,000 on paid plansMidnight GMT
Marketplace quotaAPI calls, counted separately per product100,000 per product24 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.

Sign up & Get Data

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.

APICost per request
End-of-Day, Splits and Dividends1
Live (Delayed) API, per symbol1
Search, Exchanges List, Exchange Symbol List, Calendar1
Intraday API5
Technical API5
News API5
Screener API5
Fundamental Data API10
Options API10
Bond Fundamentals API10
Macroeconomics API10
Insider Transactions API10
Each Marketplace product, against its own quota10
Bulk API, whole exchange100
Bulk API with the symbols parameter100 + N, where N is the number of symbols
Usage endpoint, /api/user0

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
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/user?api_token=demo&fmt=json"
(Sign up for free to get an API token)
$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();
}
(Sign up for free to get an API token)
import requests

url = f'https://eodhd.com/api/user?api_token=demo&fmt=json'
data = requests.get(url).json()

print(data)
(Sign up for free to get an API token)
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")
}
(Sign up for free to get an API token)
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

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
API calls spent so far on the day given by apiRequestsDate. Despite the name, this is measured in API calls, not requests
apiRequestsDate string optional
The day the counter belongs to. If it is not today, your counter has not been reset yet because you have not made a request since midnight GMT
dailyRateLimit string optional
Your account’s daily allowance in API calls
extraLimit string optional
Your remaining balance of extra API calls, used automatically once the daily limit is exhausted

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.

EODHD dashboard chart of API requests over time

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.

Buy Extra API Calls form on the EODHD dashboard

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:

Increase Daily Limit form in the EODHD dashboard

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.

StatusMeaningWhat to do
402Daily API call limit exhausted, and no extra calls leftWait for midnight GMT, buy extra API calls, or raise your daily limit
429Too many requests in the current minuteWait the number of seconds given in the Retry-After header, then retry
401Missing or invalid API token — not a limit at allCheck 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.

Chat