What the stock news API rate limit counts
Paid Pro has no daily cap. The limit you actually hit is 20 requests per second, shared with MCP.

The stock news API rate limit people trip over is a burst, not a monthly quota. Every account can send 20 requests per second. That budget is shared by every key on the account and by MCP tool calls. Go past it and the API returns HTTP 429 with a Retry-After header. Wait that long, then send the request again. Do not retry in a tight loop.
There is no monthly call pack on MarketNewsAPI, and paid Pro has no daily REST cap. The numbers that do exist are the burst, the Free daily cap, and the trial daily cap. WebSocket messages are not REST calls. A stream that stays open all day does not spend the 20-per-second budget, and it does not spend a daily cap.
Three different caps
Free is 100 REST requests per UTC day. Headlines are delayed 15 minutes. History is the last year. There is no WebSocket and no MCP. When the hundredth counted call is behind you, further counted calls return HTTP 429 with the code daily_limit_reached until 00:00 UTC. The key is not disabled, and nothing is charged.
The 7-day Pro trial is 1,000 REST requests per UTC day. A card is required. Nothing is charged during the trial. The trial includes real-time REST, the WebSocket, MCP, and the full archive. The same 429 and the same UTC reset apply when that thousand is used up. Unless you cancel, the card is billed for Pro when the trial ends. Canceling during the trial returns the account to Free and nothing is billed.
Paid Pro removes the daily cap. Pro is $15 a month, or $162 a year. It is real time, it includes the full archive, and it includes 3 WebSocket connections. The burst of 20 requests per second still applies. A fourth WebSocket connection closes with code 4008. Unlimited WebSocket messages means the messages are not metered. It does not mean you can open more than 3 connections.
Calls to GET /v1/usage and GET /v1/status do not count toward the Free daily cap or the trial daily cap. Use them from a health check. Do not point the health check at GET /v1/news once a second. The response headers on a counted call include X-Plan, X-Daily-Limit, and X-Daily-Remaining. On paid Pro the daily remaining figure is not a quota you are about to exhaust.
One request, then read the header
Send one search. This asks for recent NVDA news, twenty rows, newest first. The key stays in the environment. Do not put it in a browser.
curl -sS -D - "https://api.marketnewsapi.com/v1/news?tickers=NVDA&limit=20" \
-H "Authorization: Bearer $MARKETNEWSAPI_KEY" -o /tmp/nvda.json
echo
python3 -c "import json; d=json.load(open('/tmp/nvda.json')); print(d['data'][0]['title'], d['meta'].get('next_cursor'))"
Look at X-Daily-Remaining and at the status code before you send the next page. If the status is 429, sleep for Retry-After seconds. If meta.next_cursor is present and you are paging, repeat the same filters and add cursor. Changing filters mid-walk starts a different result set. limit can be 1 to 100. A backfill does not need to run at 20 requests per second. One page, then the next cursor, leaves room for the rest of the account. The paging rules are on the pagination page, and the headers are on the rate limit page.
Try it for 7 days. Signup starts Pro. A card is required. Real-time REST, WebSocket, and MCP, with 1,000 REST requests a day. Paid Pro removes the cap. After that it's $15/month, or Free if you stop.
The burst is shared
Two services with two keys on the same account still share one burst. A notebook and a production poller can push each other into 429 if both run flat out. Give the poller its own pace. Ten requests a second is already a lot for news search. The cap is there so one loop cannot pin the process.
MCP counts too. A Cursor or Claude session that calls search_news in a loop spends the same 20 per second. WebSocket messages do not. If the product is "tell me when there is news", open wss://ws.marketnewsapi.com/v1/stream on Pro and subscribe to ticker:NVDA or type:press_release. That is one connection, not a poll. The immediate socket can deliver a row whose summary is still null. The summaries socket waits. Either way the message is not a REST call. Channel rules are in the WebSocket docs.
A 429 from the burst and a 429 from the daily cap are different problems. The burst one clears in a second or two, which is what Retry-After is for. The daily one clears at 00:00 UTC, or when you move the account to paid Pro. Subscribing lifts the daily cap immediately. It does not lift the burst. The usage page shows what the key has done today. GET /v1/usage returns the same idea to a program, and that call itself is not counted.
What this cap leaves alone
The $15 plan cannot be used commercially. A higher burst, a product you sell, client work, or redistribution of the feed is a separate conversation. Email [email protected]. Do not assume a commercial license is a larger number on the same checkout. There is no public self-serve price for it.
The limit is also not a promise about freshness. Pro, including the trial, receives articles as they are ingested. Free is delayed 15 minutes. Sources are polled every second, including nights and weekends. That polling is on our side. Your client should not poll every second to imitate it. Signup is at signup. The plan table is on pricing.