curl --request GET \
--url https://api.numi.sh/v1/companies/{ref}/segments \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.numi.sh/v1/companies/{ref}/segments"
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.numi.sh/v1/companies/{ref}/segments', 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.numi.sh/v1/companies/{ref}/segments",
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.numi.sh/v1/companies/{ref}/segments"
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.numi.sh/v1/companies/{ref}/segments")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.numi.sh/v1/companies/{ref}/segments")
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{
"data": {
"company": {
"cik": "0000789019",
"ticker": "MSFT",
"tickers": [
"<string>"
],
"name": "MICROSOFT CORPORATION",
"exchange": "Nasdaq"
},
"filing": {
"id": 123,
"form_type": "10-K",
"filing_date": "2023-12-25",
"period_end": "2023-12-25",
"fiscal_year": 123,
"fiscal_period": "FY",
"period_type": "annual",
"is_amendment": true,
"has_segments": true,
"has_note": true
},
"axes": [
{
"axis": "business",
"axis_qname": "srt:ProductOrServiceAxis",
"period_start": "2023-12-25",
"period_end": "2023-12-25",
"currency": "USD",
"revenue_concept": "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax",
"revenue_total": 123,
"segment_revenue_sum": 123,
"reconciling_revenue_sum": 123,
"coverage_ratio": 123,
"reconciliation": "reconciled",
"segments": [
{
"member": "msft:IntelligentCloudMember",
"label": "Intelligent Cloud",
"kind": "segment",
"revenue": 123,
"operating_income": 123,
"total_assets": 123,
"depreciation_amortization": 123,
"revenue_share": 123
}
]
}
]
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA",
"as_of": "2026-10-19T12:34:56.789Z"
}
}{
"error": {
"code": "bad_request",
"message": "limit: must be from 1 to 50"
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}{
"error": {
"code": "unauthorized",
"message": "The request has no API key. Send a numi API key in the X-API-Key header."
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}{
"error": {
"code": "sandbox_restricted",
"message": "TSLA is not in the sandbox. With a sandbox key, you can read 10 companies: MSFT, AAPL, NVDA, AMZN, GOOGL, META, NFLX, CVX, JPM and SONY. To read every company, upgrade to the Builder plan at https://numi.sh/account.",
"sandbox_companies": [
"MSFT",
"AAPL",
"NVDA",
"AMZN",
"GOOGL",
"META",
"NFLX",
"CVX",
"JPM",
"SONY"
]
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}{
"error": {
"code": "not_found",
"message": "The API has no route for GET /v1/nothing. Find the routes of the API at https://docs.numi.sh."
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "The sandbox plan has a limit of 20 requests a minute. Retry in 12 seconds.",
"retry_after": 12,
"scope": "minute"
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}Get the segments of a filing by axis
Returns the segment breakdowns of one filing, one per XBRL axis: business, product or geography. Each axis has its rows, and coverage_ratio and reconciliation for how their revenue compares with the revenue that the filing reports.
With filing_id, the response has the axes of that filing. Without filing_id, the response comes from the newest filing of period_type that has the axis in axis, or any axis when axis is not set. So when you set axis and the newest filing does not have that axis, you get the axis from the newest filing that has it.
curl --request GET \
--url https://api.numi.sh/v1/companies/{ref}/segments \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.numi.sh/v1/companies/{ref}/segments"
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.numi.sh/v1/companies/{ref}/segments', 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.numi.sh/v1/companies/{ref}/segments",
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.numi.sh/v1/companies/{ref}/segments"
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.numi.sh/v1/companies/{ref}/segments")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.numi.sh/v1/companies/{ref}/segments")
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{
"data": {
"company": {
"cik": "0000789019",
"ticker": "MSFT",
"tickers": [
"<string>"
],
"name": "MICROSOFT CORPORATION",
"exchange": "Nasdaq"
},
"filing": {
"id": 123,
"form_type": "10-K",
"filing_date": "2023-12-25",
"period_end": "2023-12-25",
"fiscal_year": 123,
"fiscal_period": "FY",
"period_type": "annual",
"is_amendment": true,
"has_segments": true,
"has_note": true
},
"axes": [
{
"axis": "business",
"axis_qname": "srt:ProductOrServiceAxis",
"period_start": "2023-12-25",
"period_end": "2023-12-25",
"currency": "USD",
"revenue_concept": "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax",
"revenue_total": 123,
"segment_revenue_sum": 123,
"reconciling_revenue_sum": 123,
"coverage_ratio": 123,
"reconciliation": "reconciled",
"segments": [
{
"member": "msft:IntelligentCloudMember",
"label": "Intelligent Cloud",
"kind": "segment",
"revenue": 123,
"operating_income": 123,
"total_assets": 123,
"depreciation_amortization": 123,
"revenue_share": 123
}
]
}
]
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA",
"as_of": "2026-10-19T12:34:56.789Z"
}
}{
"error": {
"code": "bad_request",
"message": "limit: must be from 1 to 50"
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}{
"error": {
"code": "unauthorized",
"message": "The request has no API key. Send a numi API key in the X-API-Key header."
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}{
"error": {
"code": "sandbox_restricted",
"message": "TSLA is not in the sandbox. With a sandbox key, you can read 10 companies: MSFT, AAPL, NVDA, AMZN, GOOGL, META, NFLX, CVX, JPM and SONY. To read every company, upgrade to the Builder plan at https://numi.sh/account.",
"sandbox_companies": [
"MSFT",
"AAPL",
"NVDA",
"AMZN",
"GOOGL",
"META",
"NFLX",
"CVX",
"JPM",
"SONY"
]
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}{
"error": {
"code": "not_found",
"message": "The API has no route for GET /v1/nothing. Find the routes of the API at https://docs.numi.sh."
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "The sandbox plan has a limit of 20 requests a minute. Retry in 12 seconds.",
"retry_after": 12,
"scope": "minute"
},
"meta": {
"request_id": "req_Qm3xYb9Kd2LpR7wA"
}
}Authorizations
A numi API key, sent in the X-API-Key header.
Path Parameters
The company, as a ticker such as MSFT or BRK.B, or as cik: and the digits of its CIK (the SEC's Central Index Key), such as cik:789019. A ticker matches in upper or lower case, and . and - match each other, so BRK.B and BRK-B are the same company.
^([Cc][Ii][Kk]:[0-9]{1,10}|[A-Za-z0-9.-]{1,16})$"MSFT"
Query Parameters
Returns this axis only. Without axis, the response has every axis of the filing.
The XBRL axis of a breakdown. business is the operating segments, product is the products and services, and geography is the regions.
business, product, geography Annual filings (10-K, 20-F, 40-F) or quarterly ones (10-Q).
annual, quarterly The id of one filing of the company, from filings in the response of GET /companies/{ref}. Without filing_id, the response comes from the newest filing of period_type that has the data asked for.
1 <= x <= 2147483647