curl --request GET \
--url https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks \
--header 'X-API-Key: <api-key>'import requests
url = "https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"statusCode": 200,
"data": {
"basis": "sector33",
"sector": {
"code": "3700",
"name": "Transportation Equipment"
},
"items": [
{
"symbol": "72670",
"code": "7267",
"name": "HONDA MOTOR CO.,LTD.",
"price": 1520.5,
"change": 12,
"changePercent": 0.7955,
"tradingDate": "2026-09-30",
"marketCap": 8235000000000
}
]
},
"meta": {
"source": [
"jquants:/v2/equities/bars/daily",
"jquants:/v2/equities/master"
],
"as_of": "2026-09-30",
"unit": "JPY",
"classification": "RAW+COMPUTED",
"formula_version": "price-change-v2",
"was_restated": false,
"served_from_cache": true,
"cache_expires_at": "2026-10-01T14:00:00.000Z",
"timestamp": "2026-10-01T08:00:00.000Z"
}
}{
"success": false,
"statusCode": 400,
"error": {
"code": "MARKET_NOT_SUPPORTED",
"message": "Thị trường \"us\" chưa được hỗ trợ — hiện chỉ có jp"
},
"meta": {
"error": "Bad Request",
"statusCode": 400,
"timestamp": "2026-10-01T08:00:00.000Z"
}
}{
"success": false,
"statusCode": 401,
"error": {
"code": "API_KEY_INVALID",
"message": "Invalid API key"
},
"meta": {
"timestamp": "2026-06-19T08:34:08.023Z"
}
}{
"success": false,
"statusCode": 403,
"error": {
"code": "FEATURE_NOT_IN_PLAN",
"message": "Your plan does not include this feature"
},
"meta": {
"timestamp": "2026-06-19T08:34:08.100Z"
}
}{
"success": false,
"statusCode": 404,
"error": {
"code": "EQUITY_NOT_FOUND",
"message": "Không tìm thấy mã cổ phiếu 99999"
},
"meta": {
"error": "Not Found",
"statusCode": 404,
"timestamp": "2026-10-01T08:00:00.000Z"
}
}{
"success": false,
"statusCode": 429,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded"
},
"meta": {
"timestamp": "2026-06-19T08:34:09.000Z"
}
}{
"success": false,
"statusCode": 500,
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error"
},
"meta": {
"timestamp": "2026-06-19T08:34:10.000Z"
}
}Japan related equities
Peers of the stock in the same TSE 33-sector — common shares on Prime, Standard
or Growth — ordered by market cap, largest first. When the sector has fewer
stocks than limit, peers from the same market segment fill the list and
basis becomes sector33_segment.
curl --request GET \
--url https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks \
--header 'X-API-Key: <api-key>'import requests
url = "https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-v2.hayinsights.com/openapi/v1/market/{market}/equities/{code}/related-stocks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"statusCode": 200,
"data": {
"basis": "sector33",
"sector": {
"code": "3700",
"name": "Transportation Equipment"
},
"items": [
{
"symbol": "72670",
"code": "7267",
"name": "HONDA MOTOR CO.,LTD.",
"price": 1520.5,
"change": 12,
"changePercent": 0.7955,
"tradingDate": "2026-09-30",
"marketCap": 8235000000000
}
]
},
"meta": {
"source": [
"jquants:/v2/equities/bars/daily",
"jquants:/v2/equities/master"
],
"as_of": "2026-09-30",
"unit": "JPY",
"classification": "RAW+COMPUTED",
"formula_version": "price-change-v2",
"was_restated": false,
"served_from_cache": true,
"cache_expires_at": "2026-10-01T14:00:00.000Z",
"timestamp": "2026-10-01T08:00:00.000Z"
}
}{
"success": false,
"statusCode": 400,
"error": {
"code": "MARKET_NOT_SUPPORTED",
"message": "Thị trường \"us\" chưa được hỗ trợ — hiện chỉ có jp"
},
"meta": {
"error": "Bad Request",
"statusCode": 400,
"timestamp": "2026-10-01T08:00:00.000Z"
}
}{
"success": false,
"statusCode": 401,
"error": {
"code": "API_KEY_INVALID",
"message": "Invalid API key"
},
"meta": {
"timestamp": "2026-06-19T08:34:08.023Z"
}
}{
"success": false,
"statusCode": 403,
"error": {
"code": "FEATURE_NOT_IN_PLAN",
"message": "Your plan does not include this feature"
},
"meta": {
"timestamp": "2026-06-19T08:34:08.100Z"
}
}{
"success": false,
"statusCode": 404,
"error": {
"code": "EQUITY_NOT_FOUND",
"message": "Không tìm thấy mã cổ phiếu 99999"
},
"meta": {
"error": "Not Found",
"statusCode": 404,
"timestamp": "2026-10-01T08:00:00.000Z"
}
}{
"success": false,
"statusCode": 429,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded"
},
"meta": {
"timestamp": "2026-06-19T08:34:09.000Z"
}
}{
"success": false,
"statusCode": 500,
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error"
},
"meta": {
"timestamp": "2026-06-19T08:34:10.000Z"
}
}Authorizations
Your HayInsights API key (prefixed apk_). Create and manage keys in the
HayInsights dashboard (Account → API keys).
Send it in the X-API-Key header on every request to /openapi/v1/*.
Which data domains you may access and your request quota are both governed by
the subscription plan attached to the key — see the Plans & features and
Rate limits guides.
Path Parameters
Market code. Only jp (Tokyo Stock Exchange) is supported for now.
jp "jp"
Stock code — the 4-character ticker (7203) or the 5-character J-Quants code (72030).
"7203"
Query Parameters
Maximum number of peers to return.
1 <= x <= 12Response
Peers of the requested stock.
Standard success envelope shared by every endpoint. Each operation's response
wrapper extends this (via allOf) and adds a typed data property.
Always true for a successful response.
true
Mirrors the HTTP status code.
200
Peers in the same TSE 33-sector (common shares on Prime / Standard / Growth),
largest market cap first. When the sector has fewer stocks than limit, peers
from the same market segment fill the list and basis becomes sector33_segment.
Show child attributes
Show child attributes
Response metadata for the Equities domain. On top of timestamp, every equities
response says where the numbers came from and how fresh they are.
Show child attributes
Show child attributes