Market data that is
already there when you ask.
Cryptocurrency, foreign exchange, global equities and commodities — one endpoint, one response shape, priced in milliseconds rather than seconds. Built for products where a stale number is a real problem.
From $19 per month. No contracts, no sales call.
That is the whole integration. No SDK, no install, one header.
4 asset classes. One response shape.
Ask for everything, narrow to a single market, or name the handful of instruments you care about. The structure of the response never changes, so the integration you write today keeps working.
Cryptocurrency
Major pairs and the long tail, around the clock, including crypto-to-crypto crosses.
Foreign exchange
Majors, minors and crosses, quoted to the precision the market actually trades at.
Equities
Listed shares with session open, high, low and running volume on every quote.
Commodities
Metals, energy and agricultural benchmarks, quoted against the dollar.
Broad coverage in every market we serve, extended continuously. Need something we do not carry yet? Ask us.
One header. One endpoint. Whatever you write in.
There is nothing to install, no SDK to keep current and no handshake to negotiate. Create an account, copy your key, make a GET request — in any language that can speak HTTP.
# Everything your plan allows
curl -H "X-API-Key: $ANOMUS_KEY" \
"https://api.anomusdata.com/v1/prices"
# One market
curl -H "X-API-Key: $ANOMUS_KEY" \
"https://api.anomusdata.com/v1/prices?type=forex"
# A named handful
curl -H "X-API-Key: $ANOMUS_KEY" \
"https://api.anomusdata.com/v1/prices?symbols=BTC/USDT,AAPL"
const res = await fetch(
"https://api.anomusdata.com/v1/prices?symbols=BTC/USDT,EUR/USD",
{ headers: { "X-API-Key": process.env.ANOMUS_KEY } },
)
const { data } = await res.json()
for (const quote of data) {
console.log(quote.symbol, quote.price, quote.changePct)
}
import os
import requests
res = requests.get(
"https://api.anomusdata.com/v1/prices",
params={"type": "forex"},
headers={"X-API-Key": os.environ["ANOMUS_KEY"]},
timeout=5,
)
for quote in res.json()["data"]:
print(quote["symbol"], quote["price"])
$res = Http::withHeaders(["X-API-Key" => config("services.anomus.key")])
->get("https://api.anomusdata.com/v1/prices", ["type" => "stocks"]);
foreach ($res->json("data") as $quote) {
echo $quote["symbol"], " ", $quote["price"], PHP_EOL;
}
req, _ := http.NewRequest("GET",
"https://api.anomusdata.com/v1/prices?type=commodity", nil)
req.Header.Set("X-API-Key", os.Getenv("ANOMUS_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
var body struct{ Data []Quote }
json.NewDecoder(res.Body).Decode(&body)
uri = URI("https://api.anomusdata.com/v1/prices?type=crypto")
req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = ENV.fetch("ANOMUS_KEY")
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
http.request(req)
end
JSON.parse(res.body)["data"].each do |quote|
puts [quote["symbol"], quote["price"]].join(" ")
end
{
"status": "ok",
"generatedAt": "2026-08-30T09:14:02.118Z",
"data": [
{
"symbol": "BTC/USDT",
"type": "crypto",
"price": 63884.21,
"change": 271.44,
"changePct": 0.43,
"high": 64102.00,
"low": 63120.55,
"ts": 1788084842118
}
]
}
Engineered to be boring.
The interesting part of market data infrastructure is the part you never notice. Ours is built so that the price is already computed and waiting before your request arrives.
Answered in milliseconds
Responses are assembled continuously in memory, not built per request. Your call is a lookup, not a computation.
Continuously reconciled
Connections are monitored and re-established automatically. A dropped link is measured in seconds, not in support tickets.
Redundant by design
Coverage is spread across independent parallel connections, so a fault in one never takes the whole feed with it.
A stable contract
One response shape across every market. Add an instrument, add a market — your parsing code does not change.
Predictable limits
Clear per-minute allowances with headers on every response. No surprise throttling and no overage billing.
Honest freshness
Every response carries the moment it was generated, so you always know exactly how old a number is.
Brokers do not forgive a wrong price.
The people below run trading desks, retail platforms and terminals across five continents, where a number being late is a support ticket and a number being wrong is a refund.
We replaced three separate vendors with one endpoint. What convinced our risk desk was not the latency — it was that every response says exactly when it was generated, so a stale tick can never quietly reach a client terminal.
Priya Raghunathan
Head of Trading Technology, Northgate Markets
Singapore
Our retail app refreshes quotes for a very large number of open sessions at once. Since we integrated, we have not written a single line of code to handle the response shape changing on us. That is the whole review.
Tomás Ferreira
Chief Technology Officer, Almeida Corretora
São Paulo, Brazil
Connectivity here punishes anything chatty. One call returns every instrument our clients watch across forex and commodities, which cut our mobile payload sharply and made the app usable on a bad connection.
Adaeze Okonkwo
Platform Lead, Kestrel Capital Markets
Lagos, Nigeria
The rate-limit headers are on every single response, so our backoff logic is four lines and we have never been surprised by a throttle. A small thing that has prevented more incidents than anything else we run.
Rania Al-Mansouri
Head of Product, Helio Trading
Dubai, United Arab Emirates
I integrated it on a Sunday afternoon. No sales call, no contract, no approval queue — the key worked immediately. For a two-person shop that mattered more than any feature on the page.
Jonas Lindqvist
Founder, Meridian FX
Stockholm, Sweden
We alert on feed freshness ourselves rather than take anyone at their word. Running that alert against this feed, the times it has fired were our own network — not theirs.
Marcus Chen
Lead Engineer, Terrace Markets
Toronto, Canada
Pay for the pace you need.
Every tier reaches every market. The difference is how often you may ask and how many instruments come back at once.
Starter
A steady heartbeat for dashboards and widgets.
- 1 request per minute
- 25,000 requests per month
- Up to 50 instruments per response
- Crypto and Forex only
- Usage reporting
Professional
RecommendedFast enough to drive a live trading view.
- 30 requests per minute
- 750,000 requests per month
- Up to 150 instruments per response
- All four markets
- Usage reporting and history
- Priority support
Enterprise
Every instrument we carry, once a second.
- 100 requests per minute
- 3,000,000 requests per month
- Up to 500 instruments per response
- All four markets
- Usage reporting and history
- Priority support
Unlimited
No rate limit, no monthly ceiling, no counting.
- Unlimited requests per minute
- Unlimited requests per month
- All instruments per response
- All four markets
- Usage reporting and history
- Priority support
Put a live price in front of your users today.
Create an account and your key is issued immediately. No approval queue, no onboarding call, no minimum term.