Quickstart · no key · JSON over HTTPS
Crypto price API without an API key
Four endpoints, flat JSON, 12 major coins. Copy a snippet, run it, get data. No signup, no key, no card: the free tier answers anonymous calls at 10 requests per minute per IP.
curl
# one coin
curl https://satgas.ai.id/api/v1/coin/BTC
# fear & greed index
curl https://satgas.ai.id/api/v1/fear-greed
# everything, with freshness metadata
curl https://satgas.ai.id/api/v1/market
Python (standard library, no dependencies)
import json, urllib.request
req = urllib.request.Request(
"https://satgas.ai.id/api/v1/market",
headers={"User-Agent": "satgas-api-client/1.0"}, # see note below
)
d = json.load(urllib.request.urlopen(req, timeout=15))
age = d["_meta"]["age_seconds"]
if age > 900: # older than one refresh cycle
raise RuntimeError(f"stale snapshot: {age}s")
btc = next(c for c in d["coins"] if c["sym"] == "BTC")
print(btc["price"], btc["chg24"], btc["mcap"])
print("total market cap:", d["global"]["total_market_cap"]["usd"])
Set a User-Agent. Always send a descriptive User-Agent for your app (for example satgas-api-client/1.0). The bare default Python-urllib/3.x string is rejected by the edge with HTTP 403 (Cloudflare error 1010), so a copy-paste without a UA header will fail.
Python (requests)
import requests
d = requests.get("https://satgas.ai.id/api/v1/market", timeout=15).json()
btc = next(c for c in d["coins"] if c["sym"] == "BTC")
print(btc["price"], d["fear_greed"]["label"])
Node.js (18+, built-in fetch)
const r = await fetch("https://satgas.ai.id/api/v1/coin/ETH");
const c = await r.json();
console.log(c.sym, c.price, c.chg24, c.mcap);
// note: this must run server-side. The API sends no CORS headers,
// so a browser fetch from another origin will be blocked.
Go
resp, err := http.Get("https://satgas.ai.id/api/v1/fear-greed")
if err != nil { log.Fatal(err) }
defer resp.Body.Close()
var fng struct{ Value int `json:"value"`; Label string `json:"label"` }
json.NewDecoder(resp.Body).Decode(&fng)
fmt.Println(fng.Value, fng.Label) // e.g. 48 Neutral
What you get back
$ curl https://satgas.ai.id/api/v1/coin/BTC
{"sym":"BTC","name":"Bitcoin","price":80228.04,"chg24":0.06,
"chg7d":-1.9129,"mcap":1611263950717.0,"vol":1229003803.31}
Field names are short on purpose: chg24 is the 24h change in percent, chg7d the 7d change, mcap market cap in USD (may be null for a migrated or thin token), vol 24h quote volume.
Keep the dashboard honest
The snapshot rebuilds every 15 minutes and every /v1/market payload carries its own age. Store the age, show it, and refuse to act on data older than your threshold. A stale feed looks exactly like a quiet market, which is how backtests get poisoned.
"_meta": {"source":"satgas.ai.id/crypto","age_seconds":142,
"updated":"2026-10-27T07:02:29+07:00"}
FAQ
Do I need an API key?
No. The free tier is keyless: 10 requests per minute per IP. Paid tiers (100 and 500 req/min) use an X-API-Key header and are issued by request.
How fresh is the data?
Rebuilt every 15 minutes; older than 30 minutes returns 503 instead of stale prices.
Can I call it from a browser?
No, CORS is not enabled. Use a backend, script, cron job or agent tool.
Historical candles or OHLCV?
Not included. Current snapshot only: price, 24h/7d change, volume, market cap, fear & greed, sentiment digest.
Which coins?
BTC, ETH, BNB, SOL, XRP, ADA, DOGE, AVAX, LINK, DOT, TRX, LTC.
Next
- Endpoint reference and limits: Crypto Data API
- Import-ready spec: OpenAPI 3.0.3 · OpenAPI 3.0.1 for marketplace import
- Postman Collection v2.1: postman_collection.json
- Docs mirror and client example: github.com/FatihKawakib04/satgas-hard-corners/api