curl --request GET \
--url https://api.sportquanta.com/v1/kbo/teams/{id}/batting-stats \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sportquanta.com/v1/kbo/teams/{id}/batting-stats"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sportquanta.com/v1/kbo/teams/{id}/batting-stats', 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.sportquanta.com/v1/kbo/teams/{id}/batting-stats",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.sportquanta.com/v1/kbo/teams/{id}/batting-stats"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.sportquanta.com/v1/kbo/teams/{id}/batting-stats")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sportquanta.com/v1/kbo/teams/{id}/batting-stats")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"teamId": "<string>",
"season": 123,
"scopes": {}
},
"_meta": {
"request_id": "<string>",
"served_from": "live",
"cache_ttl_seconds": 123,
"provenance": {},
"availability": {}
}
}Team batting stats
KBO-only route. Returns measured all, home, away, l3, l7,
l10, and l20 rows that exist in team_batting_stats, keyed by scope.
Missing scopes are omitted and never synthesized.
Requires the stats entitlement (a paid plan). See Responses & Errors for the success envelope and availability rules.
curl --request GET \
--url https://api.sportquanta.com/v1/kbo/teams/{id}/batting-stats \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sportquanta.com/v1/kbo/teams/{id}/batting-stats"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sportquanta.com/v1/kbo/teams/{id}/batting-stats', 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.sportquanta.com/v1/kbo/teams/{id}/batting-stats",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.sportquanta.com/v1/kbo/teams/{id}/batting-stats"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.sportquanta.com/v1/kbo/teams/{id}/batting-stats")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sportquanta.com/v1/kbo/teams/{id}/batting-stats")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"teamId": "<string>",
"season": 123,
"scopes": {}
},
"_meta": {
"request_id": "<string>",
"served_from": "live",
"cache_ttl_seconds": 123,
"provenance": {},
"availability": {}
}
}Authorizations
Send a workspace API token in the Authorization: Bearer <token> header.
Path Parameters
Query Parameters
1920 <= x <= 2100Response
Team batting rows keyed by scope.
Hide child attributes
Hide child attributes
Published scopes only. Missing splits remain absent.
Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
all, home, away, l3, l7, l10, l20 all: walks + hit-by-pitch combined (Naver never splits these). Splits: the plain BB count (the per-game line has no HBP).
Split-source plain walk count; null on the official all row.
Split-source plate appearances ≈ AB + BB; null on the official all row.
Isolated power (SLG − AVG); computed since both arrive from source.
Strikeout rate = SO / PA. Emitted by the split derivation AND by the enriched all mapper (from Naver's so + bbHbp) so the All pill and the split pills are computed consistently.
Walk rate = BB / PA — same dual-source treatment as kPct.
BABIP — populated on the all scope only (split rows leave it null).
all-source season games (Naver gameCount).
Split-source contributing-game count; null on the official all row.
Runs scored — emitted by the split derivation's all row only.
Runs allowed = the same row's defenseR; the RA term for Pythagoras.
Pythagorean win pct (Bill James 1.83 exponent): RS^1.83 / (RS^1.83 + RA^1.83).
Actual win pct, KBO convention (ties excluded): W / (W + L).
actualWinPct − pythWinPct; positive = over-performing its run diff.
Hide child attributes
Hide child attributes
live, cache Response cache TTL; independent of source freshness. Omitted when zero.
Endpoint-specific availability context, including soccer roster coverage.