REST API REFERENCE

BAKO API Documentation

Integrate historical prices and ML-powered forecasts for 40,000+ stocks, ETFs, and cryptocurrencies via a simple REST API.

Base URL
https://api.bako.co/v1
Machine-readable specification: OpenAPI 3.0 Specification (JSON).
GETTING STARTED

Quick Start

Make your first call in under a minute. Symbol search is free and needs no API key.

1
Search for a symbol
Test the API immediately without an account:
cURL
curl "https://api.bako.co/v1/symbols?search=NVD&limit=5"
2
Get historical prices
Requires an API key (passed via the api-key header):
cURL
curl -H "api-key: YOUR_API_KEY" \
  "https://api.bako.co/v1/history?symbol=NVDA"
3
Get ML price predictions
Fetch 100-day forward predictions generated by our Vertex AI and TensorFlow models:
cURL
curl -H "api-key: YOUR_API_KEY" \
  "https://api.bako.co/v1/predictions?symbol=NVDA"
SECURITY

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);
Public endpoint: The /v1/symbols endpoint is free and does not require an API key or account.
API REFERENCE

Endpoints

GET /v1/symbols Free • No Key Needed

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

JSON 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" }
  ]
}
GET /v1/history API Key Required

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

JSON 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 /v1/predictions API Key Required

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

JSON 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
    },
    ...
  ]
}
DIAGNOSTICS

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)

JSON Response
{
  "error": "Invalid or missing API key. Include api-key header."
}

Example Error (429 Rate Limited)

JSON Response
{
  "error": "Rate limit exceeded. Upgrade your plan for more requests.",
  "todayUsage": 10001
}
QUOTAS

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.

TRANSPARENT PRICING

Pricing

Start free with no credit card. Upgrade when you need higher call volume and commercial integration.

Free

€0 /mo
  • Symbol search (unlimited, no key)
  • 100 API calls/day (history & predictions)
  • Community support
  • No credit card required
Explore Free

Enterprise

Custom
  • Everything in Pro
  • Unlimited API calls
  • Priority email & Slack support
  • Custom data integrations & SLA
  • Volume discounts
Contact Us
COMMON QUESTIONS

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.

RELEASES & STATUS

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).