Crypto technical indicators
POST /api/crypto-indicatorsTechnical indicators for one perpetual computed deterministically from Hyperliquid candles: RSI(14), MACD(12,26,9) with signal and histogram, EMA 20/50/200, SMA 20/50, Bollinger(20,2) with bandwidth and %B, ATR(14) and window VWAP. Send POST /api/crypto-indicators with the required field coin and pay $0.002 per call over x402 or MPP (there is no free tier). It returns a JSON object with source, coin, interval, candles, window and 4 more.
Returns the latest close, the latest value of each, the last N series points (points, max 100), and a plain summary (trend vs EMA50, RSI zone, MACD cross on the latest bar). Set ohlcv to also get the last N OHLCV candles (open, high, low, close, volume) in the same call. interval 1m to 1M, limit = candles used (default 200, max 500). Choose a subset with indicators. No key, no LLM.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
coin | string | yes | Perp ticker, e.g. BTC, ETH, SOL. Also accepted as symbol, id, ticker, asset, currency. |
interval | string | no | Candle interval (default 1h): 1m 3m 5m 15m 30m 1h 2h 4h 8h 12h 1d 3d 1w 1M. |
limit | number | no | Candles to compute over (default 200, max 500). EMA200 needs 200, MACD 34, RSI/ATR 15, SMA/Bollinger 20. |
indicators | array of string | no | Optional subset of: rsi, macd, ema, sma, bollinger, atr, vwap (default all). |
points | number | no | Series points to return per indicator, newest last (default 20, max 100). |
ohlcv | number | no | Also return the last N OHLCV candles, newest last (default 0 = none, max 100). |
Example request
curl -i -X POST https://agent402.tools/api/crypto-indicators \
-H "Content-Type: application/json" \
-d '{"coin":"BTC","interval":"1h","limit":200,"points":5}'
Without payment this returns HTTP 402 Payment Required with the exact price for crypto-indicators; any x402 v2 or MPP client pays it and retries.
Example response
{
"source": "hyperliquid",
"coin": "BTC",
"interval": "1h",
"candles": 200,
"window": {
"from": "2026-08-14T05:00:00.000Z",
"to": "2026-08-22T12:00:00.000Z"
},
"lastClose": 77244,
"indicators": {
"rsi": {
"period": 14,
"value": 56.21,
"series": [
{
"t": "2026-08-22T12:00:00.000Z",
"v": 56.21
}
]
},
"macd": {
"fast": 12,
"slow": 26,
"signal": 9,
"value": 120.5,
"signalValue": 98.2,
"histogram": 22.3,
"series": [
{
"t": "2026-08-22T12:00:00.000Z",
"macd": 120.5,
"signal": 98.2,
"histogram": 22.3
}
]
},
"ema": {
"ema20": 77100.2,
"ema50": 76800.4,
"ema200": 75900.1,
"series": [
{
"t": "2026-08-22T12:00:00.000Z",
"ema20": 77100.2,
"ema50": 76800.4,
"ema200": 75900.1
}
]
},
"sma": {
"sma20": 77050.3,
"sma50": 76750.9,
"series": [
{
"t": "2026-08-22T12:00:00.000Z",
"sma20": 77050.3,
"sma50": 76750.9
}
]
},
"bollinger": {
"period": 20,
"mult": 2,
"upper": 77900.1,
"middle": 77050.3,
"lower": 76200.5,
"bandwidthPct": 2.2,
"percentB": 0.61,
"series": [
{
"t": "2026-08-22T12:00:00.000Z",
"upper": 77900.1,
"middle": 77050.3,
"lower": 76200.5
}
]
},
"atr": {
"period": 14,
"value": 410.2,
"pctOfClose": 0.53,
"series": [
{
"t": "2026-08-22T12:00:00.000Z",
"v": 410.2
}
]
},
"vwap": {
"value": 76990.7,
"series": [
{
"t": "2026-08-22T12:00:00.000Z",
"v": 76990.7
}
]
}
},
"summary": {
"trend": "above",
"rsiZone": "neutral",
"macdCross": "none",
"macdHistogram": "positive",
"text": "BTC 1h: close above EMA50, RSI 56.2 (neutral), MACD histogram positive, no cross on the latest bar."
},
"fetchedAt": "2026-08-22T12:05:00.000Z"
}
| Field | Type | Always present | In the example |
|---|---|---|---|
source | string | yes | hyperliquid |
coin | string | yes | BTC |
interval | string | yes | 1h |
candles | number | yes | 200 |
window | object | yes | 2 fields: from, to |
lastClose | number | yes | 77244 |
indicators | object | yes | 7 fields: rsi, macd, ema, sma, bollinger, atr |
summary | object | yes | 5 fields: trend, rsiZone, macdCross, macdHistogram, text |
fetchedAt | string | yes | 2026-08-22T12:05:00.000Z |
From an MCP client
catalog.call {
"slug": "crypto-indicators",
"params": {
"coin": "BTC",
"interval": "1h",
"limit": 200,
"points": 5
}
}
The hosted connector at https://agent402.tools/mcp needs a payment for crypto-indicators; the stdio package pays it from a wallet or from AGENT402_CREDITS_KEY. Local install: npx -y agent402-mcp.
Errors and behavior
coinis required. An input the tool rejects returns an HTTP 4xx whose body carrieserror,tool,expected,requiredandexample, so the caller can correct it.- A paid call that ends in any status of 400 or above is not charged over x402, MPP or a prepaid credits key: settlement is cancelled when the tool fails. The exception is a Tempo push credential, a transfer the buyer sent before the call: it settles before the tool runs, so if the tool then fails the payment is recorded as a refund owed to the paying wallet.
- Wallet-only: this tool reaches the network or stored state, so it has no proof-of-work tier. A prepaid card-credits key (
Authorization: Bearer a402_...) also pays it. - A
GETorHEADto /api/crypto-indicators returns the same 402 quote, so the price can be read without a body. - An
Idempotency-Keyheader makes a retried paid call replay the first 200 instead of charging again (an answer larger than 1 MB is not replayed).
Paid call (JavaScript agent)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
client.setSpendControls?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/crypto-indicators", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"coin": "BTC",
"interval": "1h",
"limit": 200,
"points": 5
}),
});
Related tools
Crypto price
GET /api/crypto-priceLive crypto prices for one or many coins in any vs_currency (usd, eur, btc, eth, etc). Returns last price, 24h change %,…
Crypto news headlines
POST /api/crypto-newsLatest crypto headlines aggregated from the public RSS/Atom feeds of 8 major outlets (coindesk, cointelegraph, decrypt, …
Perp candles (OHLCV)
POST /api/perp-klinesOHLCV candles for one perpetual at intervals from 1m to 1M (1m 3m 5m 15m 30m 1h 2h 4h 8h 12h 1d 3d 1w 1M), newest last, …
Coin OHLC candles
GET /api/coin-ohlcOHLC candles for a coin: days 1 (30-min candles), 7 or 14 (4-hour), 30 / 90 / 180 / 365 (daily), in any vs currency. Ret…
Crypto market pulse
POST /api/crypto-market-pulseOne-call market snapshot across every perpetual listed on Hyperliquid: breadth (advancers, decliners, unchanged, mean/me…
Options chain by expiry
POST /api/crypto-options-chainOptions chain for a currency and expiry on Deribit, sorted by strike: instrument, strike, call/put, bid, ask, mark, mark…