SG SATGAS crypto desk

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