StockDrifts LogoStockDrifts

Getting started

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_..."

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}