curl --request POST \
--url https://api.reportify.cn/v2/search/earnings-pack \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"symbols": [
"<string>"
],
"query": "<string>",
"num": 10,
"start_datetime": "<string>",
"end_datetime": "<string>",
"fiscal_year": "<string>",
"fiscal_quarter": "<string>",
"sort_by": "date_desc"
}
'import requests
url = "https://api.reportify.cn/v2/search/earnings-pack"
payload = {
"symbols": ["<string>"],
"query": "<string>",
"num": 10,
"start_datetime": "<string>",
"end_datetime": "<string>",
"fiscal_year": "<string>",
"fiscal_quarter": "<string>",
"sort_by": "date_desc"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
symbols: ['<string>'],
query: '<string>',
num: 10,
start_datetime: '<string>',
end_datetime: '<string>',
fiscal_year: '<string>',
fiscal_quarter: '<string>',
sort_by: 'date_desc'
})
};
fetch('https://api.reportify.cn/v2/search/earnings-pack', 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.reportify.cn/v2/search/earnings-pack",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'symbols' => [
'<string>'
],
'query' => '<string>',
'num' => 10,
'start_datetime' => '<string>',
'end_datetime' => '<string>',
'fiscal_year' => '<string>',
'fiscal_quarter' => '<string>',
'sort_by' => 'date_desc'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.reportify.cn/v2/search/earnings-pack"
payload := strings.NewReader("{\n \"symbols\": [\n \"<string>\"\n ],\n \"query\": \"<string>\",\n \"num\": 10,\n \"start_datetime\": \"<string>\",\n \"end_datetime\": \"<string>\",\n \"fiscal_year\": \"<string>\",\n \"fiscal_quarter\": \"<string>\",\n \"sort_by\": \"date_desc\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.reportify.cn/v2/search/earnings-pack")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"symbols\": [\n \"<string>\"\n ],\n \"query\": \"<string>\",\n \"num\": 10,\n \"start_datetime\": \"<string>\",\n \"end_datetime\": \"<string>\",\n \"fiscal_year\": \"<string>\",\n \"fiscal_quarter\": \"<string>\",\n \"sort_by\": \"date_desc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reportify.cn/v2/search/earnings-pack")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"symbols\": [\n \"<string>\"\n ],\n \"query\": \"<string>\",\n \"num\": 10,\n \"start_datetime\": \"<string>\",\n \"end_datetime\": \"<string>\",\n \"fiscal_year\": \"<string>\",\n \"fiscal_quarter\": \"<string>\",\n \"sort_by\": \"date_desc\"\n}"
response = http.request(request)
puts response.read_body{
"docs": [
{
"doc_id": "<string>",
"title": "<string>",
"url": "<string>",
"summary": "<string>",
"category": "<string>",
"published_at": 123,
"companies": [
{
"name": "<string>",
"logo": "<string>",
"stocks": [
{
"symbol": "<string>",
"market": "<string>",
"code": "<string>"
}
]
}
],
"metadata": {},
"score": 123
}
],
"chunks": [],
"total_count": 0,
"took_ms": 0
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Earnings Pack Search
Search for earnings-related documents submitted to exchanges, including quarterly reports, semi-annual reports, and annual reports. Query is optional - if not provided, returns documents in reverse chronological order; if provided, sorts by relevance (note sort_by parameter).
curl --request POST \
--url https://api.reportify.cn/v2/search/earnings-pack \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"symbols": [
"<string>"
],
"query": "<string>",
"num": 10,
"start_datetime": "<string>",
"end_datetime": "<string>",
"fiscal_year": "<string>",
"fiscal_quarter": "<string>",
"sort_by": "date_desc"
}
'import requests
url = "https://api.reportify.cn/v2/search/earnings-pack"
payload = {
"symbols": ["<string>"],
"query": "<string>",
"num": 10,
"start_datetime": "<string>",
"end_datetime": "<string>",
"fiscal_year": "<string>",
"fiscal_quarter": "<string>",
"sort_by": "date_desc"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
symbols: ['<string>'],
query: '<string>',
num: 10,
start_datetime: '<string>',
end_datetime: '<string>',
fiscal_year: '<string>',
fiscal_quarter: '<string>',
sort_by: 'date_desc'
})
};
fetch('https://api.reportify.cn/v2/search/earnings-pack', 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.reportify.cn/v2/search/earnings-pack",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'symbols' => [
'<string>'
],
'query' => '<string>',
'num' => 10,
'start_datetime' => '<string>',
'end_datetime' => '<string>',
'fiscal_year' => '<string>',
'fiscal_quarter' => '<string>',
'sort_by' => 'date_desc'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.reportify.cn/v2/search/earnings-pack"
payload := strings.NewReader("{\n \"symbols\": [\n \"<string>\"\n ],\n \"query\": \"<string>\",\n \"num\": 10,\n \"start_datetime\": \"<string>\",\n \"end_datetime\": \"<string>\",\n \"fiscal_year\": \"<string>\",\n \"fiscal_quarter\": \"<string>\",\n \"sort_by\": \"date_desc\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.reportify.cn/v2/search/earnings-pack")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"symbols\": [\n \"<string>\"\n ],\n \"query\": \"<string>\",\n \"num\": 10,\n \"start_datetime\": \"<string>\",\n \"end_datetime\": \"<string>\",\n \"fiscal_year\": \"<string>\",\n \"fiscal_quarter\": \"<string>\",\n \"sort_by\": \"date_desc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reportify.cn/v2/search/earnings-pack")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"symbols\": [\n \"<string>\"\n ],\n \"query\": \"<string>\",\n \"num\": 10,\n \"start_datetime\": \"<string>\",\n \"end_datetime\": \"<string>\",\n \"fiscal_year\": \"<string>\",\n \"fiscal_quarter\": \"<string>\",\n \"sort_by\": \"date_desc\"\n}"
response = http.request(request)
puts response.read_body{
"docs": [
{
"doc_id": "<string>",
"title": "<string>",
"url": "<string>",
"summary": "<string>",
"category": "<string>",
"published_at": 123,
"companies": [
{
"name": "<string>",
"logo": "<string>",
"stocks": [
{
"symbol": "<string>",
"market": "<string>",
"code": "<string>"
}
]
}
],
"metadata": {},
"score": 123
}
],
"chunks": [],
"total_count": 0,
"took_ms": 0
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}财报包搜索
URL:/v2/search/earnings-pack方法:
POST描述: Search for earnings-related documents submitted to exchanges, including quarterly reports, semi-annual reports, and annual reports. Query is optional - if not provided, returns documents in reverse chronological order; if provided, sorts by relevance (note sort_by parameter).
请求参数
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| query | str | 否 | 搜索关键词(可选)。不提供时按时间倒序返回文档列表;提供时默认按相关性排序。 |
| symbols | array[str] | 是 | 股票代码列表,格式为 market:ticker(如 US:AAPL、HK:00700、SH:600519、SZ:000001)。 |
| num | int | 否 | 返回的结果数量,默认值为 10,最大值为 100。 |
| start_datetime | str | 否 | 开始时间,格式为 YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS。 |
| end_datetime | str | 否 | 结束时间,格式为 YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS。 |
| fiscal_year | str | 否 | 财年筛选,如 2025、2026。 |
| fiscal_quarter | str | 否 | 财季筛选,如 Q1、Q2、Q3、Q4。 |
| sort_by | str | 否 | 排序方式:date_desc(时间倒序,无 query 时默认)、relevance(相关性排序,有 query 时推荐)、date_asc(时间正序)。默认 date_desc。 |
响应参数
| 参数名 | 类型 | 描述 |
|---|---|---|
| docs | array | 搜索结果文档数组,每个文档包含以下字段: |
| doc_id | str | 文档唯一 ID。 |
| title | str | 文档标题。 |
| summary | str | 文档摘要。 |
| category | str | 文档类别。 |
| published_at | int | 发布时间(毫秒级时间戳)。 |
| companies | array | 相关公司列表。 |
| metadata | object | 文档元数据。 |
| score | number | 相关性评分。 |
| url | str | 文档链接。 |
| chunks | array | 内容分片数组,用于原文引用;news、webpages 搜索不返回该字段。每个分片包含以下字段: |
| id | str | 分片唯一 ID。 |
| type | str | 分片类型。 |
| content | str | 分片正文内容。 |
| summary | str | 分片摘要,可能为 null。 |
| score | number | 分片相关性评分。 |
| metadata | object | 分片元数据。 |
| doc | object | 分片所属文档:包含 doc_id、title、url、published_at 等。 |
| total_count | int | 匹配文档总数。 |
| took_ms | int | 搜索执行时间(毫秒)。 |
请求示例
cURLcurl -X POST https://api.reportify.cn/v2/search/earnings-pack \
-H "Authorization: Bearer 447460****09c9" \
-H "Content-Type: application/json" \
-d '{
"query": "revenue growth",
"symbols": ["US:AAPL", "US:TSLA"],
"num": 10,
"start_datetime": "2024-01-01",
"end_datetime": "2024-12-31"
}'
import requests
url = "https://api.reportify.cn/v2/search/earnings-pack"
headers = {
"Authorization": "Bearer 447460****09c9",
"Content-Type": "application/json"
}
payload = {
"query": "revenue growth",
"symbols": ["US:AAPL", "US:TSLA"],
"num": 10,
"start_datetime": "2024-01-01",
"end_datetime": "2024-12-31"
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
响应示例
{
"docs": [
{
"doc_id": "947538495952523264",
"title": "贵州茅台(600519) - 2022 Q4 - 年度财报",
"summary": "### 财务数据\n- 公司2022年度营业收入为124,099,843,771.99元,同比增长16.87%\n- 公司2022年度归属于上市公司股东的净利润为62,791,872,697.72元,同比增长19.42%\n...",
"category": "financials",
"published_at": 1680192000000,
"companies": [
{
"name": "贵州茅台",
"stocks": [
{
"code": "600519",
"market": "SH",
"symbol": "SH:600519"
}
]
}
],
"metadata": {
"report_type": 1,
"report_status": 2,
"report_scope": 1,
"report_language": "zh"
},
"score": 0.9948,
"url": "https://reportify.cn/financials/947538495952523264"
}
],
"chunks": [
{
"id": "624813519365412",
"type": "text",
"content": "……匹配到的原文分片内容……",
"summary": null,
"score": 0.87,
"metadata": {},
"doc": {
"doc_id": "1046915273103380483",
"title": "示例文档标题",
"url": "https://reportify.cn/reports/1046915273103380483",
"published_at": 1730390400000
}
}
],
"total_count": 1,
"took_ms": 125
}
错误响应
| HTTP 状态码 | 描述 |
|---|---|
| 422 | 请求参数验证错误 |
Authorizations
Enter your Bearer token
Body
Request model for earnings-related documents search (quarterly/semi-annual/annual reports). Query is optional - if not provided, returns documents sorted by date desc.
Stock symbols in market:ticker format (e.g., US:AAPL, HK:00700, SH:600519, SZ:000001)
Search query (optional). If not provided, returns documents sorted by date descending; if provided, results are sorted by relevance by default.
Number of results to return
1 <= x <= 100Start datetime in YYYY-MM-DD or YYYY-MM-DD HH:MM:SS format
End datetime in YYYY-MM-DD or YYYY-MM-DD HH:MM:SS format
Fiscal year filter (e.g., '2025', '2026')
Fiscal quarter filter (e.g., 'Q1', 'Q2', 'Q3', 'Q4')
Sort order: 'date_desc' (newest first, default when no query), 'relevance' (by semantic relevance, recommended when query is provided), 'date_asc' (oldest first)
relevance, date_desc, date_asc Response
Successful Response
Response model for all search tools
Search result documents
Show child attributes
Show child attributes
Search result content chunks (parity with the internal search tools). Empty for news and webpages searches.
Total number of matching documents
Search execution time in milliseconds
