BAKO API Documentation
Integrate historical prices and ML-powered forecasts for 40,000+ stocks, ETFs, and cryptocurrencies via a simple REST API.
Quick Start
Make your first call in under a minute. Symbol search is free and needs no API key.
curl "https://api.bako.co/v1/symbols?search=NVD&limit=5"
api-key header):curl -H "api-key: YOUR_API_KEY" \
"https://api.bako.co/v1/history?symbol=NVDA"
curl -H "api-key: YOUR_API_KEY" \
"https://api.bako.co/v1/predictions?symbol=NVDA"
Authentication
Paid endpoints require an API key, passed in the api-key HTTP header. Get your key by signing up and subscribing to a Pro or Enterprise plan.
curl -H "api-key: YOUR_API_KEY" \
"https://api.bako.co/v1/history?symbol=NVDA"
import requests
headers = {"api-key": "YOUR_API_KEY"}
r = requests.get(
"https://api.bako.co/v1/history?symbol=NVDA",
headers=headers
)
print(r.json())
const res = await fetch(
"https://api.bako.co/v1/history?symbol=NVDA",
{ headers: { "api-key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data);
/v1/symbols endpoint is free and does not require an API key or account.
Endpoints
Search and browse all available symbols. Returns stocks, ETFs, and cryptocurrencies with pagination.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| type | string optional | Filter by asset type: stock, etf, or crypto. Omit for all types. |
| search | string optional | Partial ticker match (case-insensitive, e.g. NVD matches NVDA and NVDL). |
| limit | integer optional | Results per page. Default: 100, maximum: 1000. |
| offset | integer optional | Pagination offset. Default: 0. |
Code Example
curl "https://api.bako.co/v1/symbols?search=NVD&limit=2"
import requests
r = requests.get(
"https://api.bako.co/v1/symbols",
params={"search": "NVD", "limit": 2}
)
print(r.json())
const res = await fetch("https://api.bako.co/v1/symbols?search=NVD&limit=2");
const data = await res.json();
console.log(data);
Example Response
{
"total": 40225,
"limit": 2,
"offset": 0,
"count": 2,
"data": [
{ "symbol": "NVDA", "type": "Stock", "exchange": "NASDAQ", "startDate": "1999-01-22", "endDate": "2026-10-13" },
{ "symbol": "NVDL", "type": "ETF", "exchange": "NASDAQ", "startDate": "2022-12-13", "endDate": "2026-10-13" }
]
}
Retrieve historical daily close prices for any supported symbol, from first trading date to today.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| symbol | string required | Ticker symbol (e.g., NVDA, AAPL, btcusd). |
| type | string optional | Asset category (stock or crypto). Disambiguates symbols shared across asset classes. |
| startDate | string optional | Earliest price date in YYYY-MM-DD format. |
| endDate | string optional | Latest price date in YYYY-MM-DD format. |
Code Example
curl -H "api-key: YOUR_API_KEY" \
"https://api.bako.co/v1/history?symbol=NVDA&startDate=2024-01-02"
import requests
headers = {"api-key": "YOUR_API_KEY"}
r = requests.get(
"https://api.bako.co/v1/history",
headers=headers,
params={"symbol": "NVDA", "startDate": "2024-01-02"}
)
print(r.json())
const res = await fetch(
"https://api.bako.co/v1/history?symbol=NVDA&startDate=2024-01-02",
{ headers: { "api-key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data);
Example Response
{
"symbol": "NVDA",
"count": 500,
"data": [
{
"date": "2024-01-02",
"price": 48.16
},
{
"date": "2024-01-03",
"price": 47.56
},
{
"date": "2024-01-04",
"price": 47.99
},
...
]
}
Get ML-powered price predictions for up to 100 days into the future. Forecasts are generated daily using Vertex AI (TimesFM) and TensorFlow.js models, enhanced with real-time news sentiment.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| symbol | string required | Ticker symbol (e.g., NVDA, btcusd). |
| type | string optional | Asset category (stock or crypto). |
| predictionDate | string optional | Prediction run version in YYYY-MM-DD format. Defaults to latest available forecast. |
| startDate | string optional | Filters returned forecast window to dates on or after YYYY-MM-DD. |
| endDate | string optional | Filters returned forecast window to dates on or before YYYY-MM-DD. |
Code Example
curl -H "api-key: YOUR_API_KEY" \
"https://api.bako.co/v1/predictions?symbol=NVDA"
import requests
headers = {"api-key": "YOUR_API_KEY"}
r = requests.get(
"https://api.bako.co/v1/predictions",
headers=headers,
params={"symbol": "NVDA"}
)
print(r.json())
const res = await fetch(
"https://api.bako.co/v1/predictions?symbol=NVDA",
{ headers: { "api-key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data);
Example Response
{
"symbol": "NVDA",
"predictionDate": "2026-10-13",
"horizon": 100,
"count": 100,
"data": [
{
"date": "2026-10-14",
"price": 134.20
},
{
"date": "2026-10-15",
"price": 135.10
},
...
]
}
Error Handling
BAKO API uses conventional HTTP status codes to indicate request success or failure. Error responses return structured JSON with an explanatory error message.
| HTTP Code | Status | Meaning |
|---|---|---|
| 200 | OK | Request succeeded and results returned. |
| 400 | Bad Request | Missing required parameters (e.g. symbol) or invalid format. |
| 401 | Unauthorized | API key missing or invalid in the api-key request header. |
| 404 | Not Found | The requested symbol or prediction dataset could not be found. |
| 405 | Method Not Allowed | Only HTTP GET requests are supported. |
| 429 | Rate Limited | Daily request limit exceeded. Resets at midnight UTC. |
| 500 | Internal Error | Server error. Check service updates or contact support. |
Example Error (401 Unauthorized)
{
"error": "Invalid or missing API key. Include api-key header."
}
Example Error (429 Rate Limited)
{
"error": "Rate limit exceeded. Upgrade your plan for more requests.",
"todayUsage": 10001
}
Rate Limiting
API requests are counted against your daily plan quota. Quotas reset automatically every day at 00:00 UTC. If you exceed your quota, requests return an HTTP 429 status code.
| Plan | Daily Quota | Reset Window | Endpoints Included |
|---|---|---|---|
| Free | 100 API calls/day | Midnight UTC | /v1/symbols (unlimited), /v1/history & /v1/predictions (100 calls/day) |
| Pro | 10,000 calls / day | Midnight UTC | All endpoints (/v1/symbols, /v1/history, /v1/predictions) |
| Enterprise | Unlimited | Custom SLA | All endpoints + custom integrations & priority throughput |
To upgrade your plan or request higher throughput, see Pricing below or email api@bako.co.
Pricing
Start free with no credit card. Upgrade when you need higher call volume and commercial integration.
Free
- Symbol search (unlimited, no key)
- 100 API calls/day (history & predictions)
- Community support
- No credit card required
Pro
- Everything in Free
- 10,000 API calls/day
- Historical prices API
- ML Predictions API (100 days)
- Commercial use allowed
Enterprise
- Everything in Pro
- Unlimited API calls
- Priority email & Slack support
- Custom data integrations & SLA
- Volume discounts
Frequently Asked Questions
How do I get an API key?
Sign up for a free BAKO account to receive a free API key with 100 API calls/day (history & predictions), or upgrade to Pro for 10,000 calls/day. Your API key is generated in your dashboard immediately upon signing in. See Authentication for integration details.
Which endpoint is free?
The GET /v1/symbols endpoint is completely free and requires no API key. Additionally, registered free accounts receive 100 API calls/day (history & predictions). See GET /v1/symbols.
How far ahead do predictions go?
Predictions provide daily price forecasts for up to 100 days into the future. Forecasts are updated daily using Vertex AI (TimesFM) and TensorFlow.js models. See GET /v1/predictions.
What happens if I exceed my quota?
Requests beyond your daily quota will receive an HTTP 429 Rate Limited response with a message indicating your current usage. Daily quotas reset automatically at midnight UTC. See Rate Limiting.
Can I use BAKO API for commercial projects?
Yes. Both Pro and Enterprise plans allow commercial use in your own applications, customer-facing platforms, dashboards, and internal tooling.
Changelog
All notable API updates, model improvements, and service status notes. All API endpoints are currently operational.
v1.3 — October 2026
Expanded symbol coverage past 40,000 assets (stocks, ETFs, and 6,800+ cryptocurrencies). Added instant Free-tier API key provisioning (100 API calls/day for history & predictions) and published the machine-readable OpenAPI 3.0 specification.
v1.2 — July 2026
Upgraded the forecasting pipeline to combine Google Cloud Vertex AI (TimesFM) and TensorFlow.js models with real-time market news sentiment adjustments. Added optional type and predictionDate parameters to /v1/history and /v1/predictions.
v1.1 — June 2026
Launched daily public accuracy tracking (yesterday's, 30-day rolling, and all-time accuracy across top-tier symbols) and the keyless public GET /v1/symbols search endpoint.
v1.0 — March 2026
Initial public release of the BAKO REST API with daily historical close prices (GET /v1/history) and 100-day forward price predictions (GET /v1/predictions).
BAKO
API