biquote API Reference
Real-time market data API for BIST, Forex, and Cryptocurrency — REST endpoints and live WebSocket streaming via SignalR.
Base URL & Authentication
All REST endpoints are prefixed with /api. The API is publicly accessible with no authentication required for read-only endpoints.
X-Api-Key header.Error Handling
The API uses standard HTTP status codes:
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request — missing or invalid parameters |
| 404 | Not Found — symbol or resource doesn't exist |
| 500 | Server Error |
{
"message": "No tick data available for 'INVALIDXYZ'"
}
Ticks
Access real-time and historical tick data (bid, ask, last price, volume) for any active symbol.
Returns the most recent tick data for the specified symbol.
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | required | Symbol name (e.g. EURUSD, GARAN, BTCUSD) |
curl https://biquote.io/api/EURUSD
const res = await fetch('https://biquote.io/api/EURUSD');
const tick = await res.json();
console.log(tick.bid, tick.ask);
import requests
tick = requests.get('https://biquote.io/api/ticks/EURUSD').json()
print(tick['bid'], tick['ask'])
{
"symbol": "EURUSD",
"description": "Euro vs US Dollar",
"bid": 1.08542,
"ask": 1.08558,
"last": 1.08550,
"volume": 12400,
"time": "2026-02-24T10:30:00Z",
"source": "MT5",
"type": "Forex"
}
Returns the latest tick for multiple symbols in a single request.
| Name | Type | Required | Description |
|---|---|---|---|
| symbols | string[] | required | One or more symbol names. Repeat parameter for multiple: ?symbols=EURUSD&symbols=GARAN |
curl "https://biquote.io/api/latest?symbols=EURUSD&symbols=GARAN&symbols=BTCUSD"
Returns historical tick records for a symbol, newest first.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | required | — | Symbol name |
| count | integer | optional | 100 | Number of ticks to return (1–1000) |
curl "https://biquote.io/api/EURUSD/history?count=50"
Returns all symbols that currently have live tick data, including metadata.
curl https://biquote.io/api/active
[
{
"name": "EURUSD",
"description": "Euro vs US Dollar",
"type": "Forex",
"exchange": "Forex",
"source": "MT5"
},
{
"name": "GARAN",
"description": "Garanti Bankası",
"type": "Stock",
"exchange": "BIST",
"source": "MTX"
}
]
Symbols
Query symbol metadata — name, description, type, exchange, and data source.
| Name | Type | Required | Description |
|---|---|---|---|
| source | string | optional | MT5 or MATRIKS |
| type | string | optional | Forex, Stock, Crypto, Index, Commodity |
| exchange | string | optional | Filter by exchange (e.g. BIST) |
# All BIST stocks
curl "https://biquote.io/api/symbols?type=Stock&exchange=BIST"
# All MT5 symbols
curl "https://biquote.io/api/symbols?source=MT5"
| Name | Type | Required | Description |
|---|---|---|---|
| q | string | required | Search query — matches name and description |
curl "https://biquote.io/api/symbols/search?q=garanti"
curl https://biquote.io/api/symbols/EURUSD
Market Statistics
Top gainers and losers across all asset classes with configurable time periods.
| Name | Type | Default | Description |
|---|---|---|---|
| type | string | — | Forex, Stock, Crypto, etc. |
| exchange | string | — | Filter by exchange |
| limit | integer | 10 | Number of results (1–100) |
| period | string | 1D | 1H, 4H, 1D, 1W |
# Top 5 BIST stock gainers today
curl "https://biquote.io/api/market/gainers?type=Stock&exchange=BIST&limit=5&period=1D"
{
"period": "1D",
"items": [
{
"symbol": "GARAN",
"description": "Garanti Bankası",
"lastPrice": 94.50,
"changePercent": 4.25,
"changeAmount": 3.85,
"volume": 28400000
}
]
}
Same parameters as /api/market/gainers — returns symbols sorted by largest percentage decline.
curl "https://biquote.io/api/market/losers?type=Crypto&limit=10&period=1H"
News
Financial news feed aggregated from multiple sources. Filter by symbol, language and country.
Returns market and finance related news. Optionally filter by stock symbol.
| Name | Type | Default | Description |
|---|---|---|---|
| symbol | string | — | Optional symbol to filter news (e.g. AAPL, GARAN) |
| language | string | en | Language code (en, tr, de…) |
| country | string | US | Country code (US, TR, GB…) |
| maxResults | integer | 10 | Number of articles (1–50) |
# All market news
curl "https://biquote.io/api/news/market"
# Filtered by symbol
curl "https://biquote.io/api/news/market?symbol=AAPL&maxResults=5"
const res = await fetch('https://biquote.io/api/news/market?symbol=GARAN&language=tr&country=TR');
const news = await res.json();
news.forEach(a => console.log(a.title, a.publishedAt));
import requests
news = requests.get(
'https://biquote.io/api/news/market',
params={'symbol': 'GARAN', 'language': 'tr', 'country': 'TR', 'maxResults': 10}
).json()
for a in news:
print(a['title'], a['publishedAt'])
[
{
"title": "Markets rally as Fed signals rate pause",
"description": "Wall Street surged on Wednesday after...",
"url": "https://example.com/article",
"source": "Reuters",
"publishedAt": "2026-02-24T09:15:00Z",
"imageUrl": null
}
]
OHLC / Candlestick
Retrieve OHLCV candlestick bars for any symbol. Data is sourced from Yahoo Finance (bootstrap), real-time tick aggregation, and MT5 historical feeds. Supports M1 through D1 timeframes with up to 2000 bars per series.
Returns OHLCV bars for the given symbol and timeframe. The most recent (open) bar is prepended with isOpen: true.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | required | — | Symbol name (e.g. EURUSD, BTCUSD, GARAN) |
| interval | string | optional | 1h |
Timeframe: 1m 5m 15m 30m 1h 4h 1d |
| limit | integer | optional | 100 |
Number of bars to return (1–1000) |
| from | ISO 8601 | optional | — | Start of range, e.g. 2026-01-01T00:00:00Z |
| to | ISO 8601 | optional | — | End of range |
# Latest 100 hourly bars
curl "https://biquote.io/api/EURUSD/ohlc?interval=1h&limit=100"
# Daily bars for a date range
curl "https://biquote.io/api/BTCUSD/ohlc?interval=1d&from=2026-01-01T00:00:00Z"
const res = await fetch('https://biquote.io/api/EURUSD/ohlc?interval=1h&limit=200');
const data = await res.json();
// data.bars → array of { openTime, open, high, low, close, volume, tickVolume, isOpen }
const closedBars = data.bars.filter(b => !b.isOpen);
console.log(`${data.symbol} ${data.interval}: ${closedBars.length} bars`);
import requests
import pandas as pd
r = requests.get('https://biquote.io/api/EURUSD/ohlc', params={'interval': '1h', 'limit': 500})
data = r.json()
df = pd.DataFrame(data['bars'])
df['openTime'] = pd.to_datetime(df['openTime'])
df = df.set_index('openTime')
print(df[['open','high','low','close']].tail())
{
"symbol": "EURUSD",
"interval": "1h",
"bars": [
{
"openTime": "2026-02-24T13:00:00Z",
"open": 1.08521,
"high": 1.08574,
"low": 1.08498,
"close": 1.08542,
"volume": 0,
"tickVolume": 340,
"isOpen": true
},
{
"openTime": "2026-02-24T12:00:00Z",
"open": 1.08480,
"high": 1.08530,
"low": 1.08440,
"close": 1.08521,
"volume": 0,
"tickVolume": 412,
"isOpen": false
}
]
}
isOpen: true) reflects live tick aggregation and is updated in real time.SignalR Hub — Real-time Streaming
Connect to the SignalR hub for live tick data. The hub pushes updates as market data arrives — no polling required.
npm install @microsoft/signalr or use the CDN: https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.0/signalr.min.jsClient → Server Methods
Subscribe to one or more symbols. You'll receive a ReceiveTick event for each update.
| Parameter | Type | Description |
|---|---|---|
| symbols | string[] | Array of symbol names |
await connection.invoke('Subscribe', ['EURUSD', 'GARAN', 'BTCUSD']);
await connection.invoke('Unsubscribe', ['EURUSD']);
const tick = await connection.invoke('GetLatestTick', 'EURUSD');
console.log(tick.bid, tick.ask);
Server → Client Events
Fired whenever a subscribed symbol receives new market data.
connection.on('ReceiveTick', (tick) => {
console.log(`${tick.symbol}: bid=${tick.bid} ask=${tick.ask}`);
});
Quick Start
Full example — connect, subscribe, and receive live prices in the browser.
import * as signalR from '@microsoft/signalr';
const connection = new signalR.HubConnectionBuilder()
.withUrl('https://biquote.io/hubs/tick')
.withAutomaticReconnect()
.build();
// Listen for live ticks
connection.on('ReceiveTick', (tick) => {
console.log(`[${tick.symbol}] bid: ${tick.bid} ask: ${tick.ask}`);
});
// Connect and subscribe
await connection.start();
await connection.invoke('Subscribe', ['EURUSD', 'GARAN', 'BTCUSD']);
import requests
# REST: Get latest tick
tick = requests.get('https://biquote.io/api/EURUSD').json()
print(f"EURUSD bid={tick['bid']} ask={tick['ask']}")
# REST: Top gainers today
gainers = requests.get(
'https://biquote.io/api/market/gainers',
params={'limit': 5, 'period': '1D'}
).json()
for item in gainers['items']:
print(f"{item['symbol']}: +{item['changePercent']:.2f}%")
// Install: dotnet add package Microsoft.AspNetCore.SignalR.Client
using Microsoft.AspNetCore.SignalR.Client;
var connection = new HubConnectionBuilder()
.WithUrl("https://biquote.io/hubs/tick")
.WithAutomaticReconnect()
.Build();
connection.On<object>("ReceiveTick", tick =>
{
Console.WriteLine($"Tick received: {tick}");
});
await connection.StartAsync();
await connection.InvokeAsync("Subscribe", new[] { "EURUSD", "GARAN" });
import requests
import pandas as pd
# Fetch 500 hourly EURUSD candles
r = requests.get('https://biquote.io/api/EURUSD/ohlc', params={'interval': '1h', 'limit': 500})
data = r.json()
df = pd.DataFrame(data['bars'])
df['openTime'] = pd.to_datetime(df['openTime'])
df = df.set_index('openTime').sort_index()
# Drop the still-open bar
df = df[~df['isOpen']]
print(df[['open','high','low','close','tickVolume']].tail(10))
# Example: simple moving average
df['sma20'] = df['close'].rolling(20).mean()
print(df[['close','sma20']].tail(5))
Data Models
Tick
- symbolstringSymbol name (e.g. EURUSD)
- descriptionstringHuman-readable name
- bidnumberBest bid price
- asknumberBest ask price
- lastnumberLast traded price
- volumenumberVolume at last price
- timestring (ISO 8601)Tick timestamp (UTC)
- sourcestringData source:
MT5orMTX - typestringAsset type:
Forex,Stock,Crypto, etc.
Symbol
- namestringSymbol ticker
- descriptionstringFull name
- typestring
Forex/Stock/Crypto/Index/Commodity - exchangestringExchange name (e.g.
BIST,Forex) - sourcestringData provider:
MT5orMATRIKS
OhlcBar
- openTimestring (ISO 8601)Bar open timestamp (UTC)
- opennumberOpening price
- highnumberHighest price in the bar
- lownumberLowest price in the bar
- closenumberClosing price (last tick if bar is open)
- volumeintegerReal volume (0 for Forex)
- tickVolumeintegerNumber of ticks in the bar
- isOpenboolean
truefor the current unfinished bar; updated on every tick