StockDrifts

Rated 13F funds with average buy prices, company KPIs, Japan investor ratings, Korea insider buys.

Hosted MCP Server

npx add-mcp 'https://mcp.stockdrifts.io/mcp/'

Installs into Claude Code, Codex, Cursor and more

Documentation

Quick start

The StockDrifts Data API is HTTPS-only with JSON in and out. It covers data StockDrifts owns or derives from public record — Korean insider filings, Japanese 5%-rule shareholding reports, US 13F holdings, and normalized company KPIs. Every request is authenticated with a bearer token.

Base URL

https://api2.stockdrifts.io

Authenticate

Pass your key as a bearer token on every request. Keys are issued from the dashboard and look like sd_live_….

Response

1curl "https://api2.stockdrifts.io/v1/kr/insiders/top-buys?days=30" \
2-H "Authorization: Bearer sd_live_..."

Want your own API key?

Book a 30-minute demo and we'll get you set up, or email hk@stockdrifts.io.

Pagination

Endpoints marked paginated take ?page=&limit= (page is 0-indexed). A page shorter than limit means there are no more rows. Every list returns a plain array — no envelope, no total count.

Rate limits

Enforced per key in fixed one-minute windows. Responses carry X-RateLimit-Limit, -Remaining, and -Reset; a 429 adds Retry-After.

Fields & currency

Responses are snake_case JSON. Value fields are suffixed with their currency (value_usd, value_krw, value_jpy), so nothing is silently FX-converted.

Periods

13F period values are ISO quarter-end dates (2026-03-31), not 2026-Q1. Omit it to get the latest quarter on file.

Errors

Every error uses one shape, with an optional hint. The code maps to the HTTP status: bad_request (400), unauthorized (401), forbidden (403), not_found (404), validation_error (422), rate_limited (429), upstream_error (502), and internal_error (500, which carries a request_id to quote when reporting it).

Response

1{
2"error": {
3"code": "forbidden",
4"message": "Your plan does not include the 'holdings' endpoints",
5"hint": "See stockdrifts.io/pricing for plans that include it."
6}
7}

Out-of-range parameters fail the same way, naming the offending field:

Response

1{
2"error": {
3"code": "validation_error",
4"message": "limit: Input should be less than or equal to 500"
5}
6}