Open-access REST API, SignalR Hub & JSON WebSocket running on your custom domain.
| Endpoint | Purpose |
|---|---|
| GET /api/latest?symbols=EURUSD,XAUUSD | Batch latest quotes (supports both repeated symbols= and comma-separated list) |
| GET /api/{symbol} | Single instrument quote with marketState, mid, bid, ask |
| GET /api/{symbol}/ohlc?interval=1h&limit=50 | OHLCV candlestick bars (1m, 5m, 15m, 30m, 1h, 4h, 1d) |
| GET /api/symbols?quotedWithinDays=7 | Active instrument catalogue resilient across weekends |
| GET /api/calendar?importance=high | Economic calendar releases with actual, forecast & previous values |
| GET /api/market/summary | Market movers, gainers, losers & active count |
https://api.upirecharge.online/hubs/tick |
ASP.NET SignalR real-time hub (Subscribe, ReceiveTick) |
wss://api.upirecharge.online/ws?symbols=EURUSD,XAUUSD |
Lightweight native JSON WebSocket stream (no SDK needed) |
1. JavaScript (REST Seed + SignalR Stream)
import * as signalR from '@microsoft/signalr';
const BASE = 'https://api.upirecharge.online';
const SYMBOLS = ['EURUSD', 'XAUUSD', 'BTCUSD'];
const seed = await fetch(
`${BASE}/api/latest?symbols=${SYMBOLS.join(',')}`
).then(r => r.json());
const conn = new signalR.HubConnectionBuilder()
.withUrl(`${BASE}/hubs/tick`)
.withAutomaticReconnect()
.build();
conn.on('ReceiveTick', (tick) => {
console.log(tick.symbol, tick.mid);
});
await conn.start();
await conn.invoke('Subscribe', SYMBOLS);
2. Plain WebSocket (Zero Dependencies — Web / Flutter / Python)
const ws = new WebSocket(
'wss://api.upirecharge.online/ws?symbols=EURUSD,XAUUSD,BTCUSD'
);
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === 'tick') {
console.log(msg.data.symbol, msg.data.mid);
}
};