EasyReportDataMCP / API_USAGE.md
JC321's picture
Upload 8 files
98e3256 verified
|
raw
history blame
11.6 kB
# API Usage Guide
Complete guide for using the SEC Financial Report MCP Server API.
## Base URL
After deployment: `https://YOUR_USERNAME-YOUR_SPACE_NAME.hf.space`
## Interactive Documentation
- **Swagger UI**: `{BASE_URL}/docs`
- **ReDoc**: `{BASE_URL}/redoc`
## Quick Start
### Python Example
```python
import requests
BASE_URL = "https://YOUR_SPACE_URL.hf.space"
# 1. Search company
response = requests.post(
f"{BASE_URL}/api/search_company",
json={"company_name": "NVIDIA"}
)
company = response.json()
print(f"Found: {company['name']} (CIK: {company['cik']})")
# 2. Get financial data
response = requests.post(
f"{BASE_URL}/api/get_financial_data",
json={"cik": company['cik'], "period": "2024"}
)
data = response.json()
print(f"Revenue: ${data['total_revenue']:,.0f}")
print(f"Net Income: ${data['net_income']:,.0f}")
print(f"EPS: ${data['earnings_per_share']:.2f}")
```
## Base URL
```
https://your-space-name.hf.space
```
## API Endpoints
### 1. Search Company by Name
**Endpoint:** `POST /api/search_company`
**Request:**
```json
{
"company_name": "NVIDIA"
}
```
**Response:**
```json
{
"cik": "0001045810",
"name": "NVIDIA CORP",
"ticker": "NVDA",
"error": null
}
```
**cURL Example:**
```bash
curl -X POST "https://your-space-name.hf.space/api/search_company" \
-H "Content-Type: application/json" \
-d '{"company_name": "NVIDIA"}'
```
**Python Example:**
```python
import requests
url = "https://your-space-name.hf.space/api/search_company"
payload = {"company_name": "NVIDIA"}
response = requests.post(url, json=payload)
print(response.json())
```
---
### 2. Get Company Information
**Endpoint:** `POST /api/get_company_info`
**Request:**
```json
{
"cik": "0001045810"
}
```
**Response:**
```json
{
"cik": "0001045810",
"name": "NVIDIA CORP",
"tickers": ["NVDA"],
"sic": "3674",
"sic_description": "Semiconductors & Related Devices",
"error": null
}
```
**cURL Example:**
```bash
curl -X POST "https://your-space-name.hf.space/api/get_company_info" \
-H "Content-Type: application/json" \
-d '{"cik": "0001045810"}'
```
**Python Example:**
```python
import requests
url = "https://your-space-name.hf.space/api/get_company_info"
payload = {"cik": "0001045810"}
response = requests.post(url, json=payload)
print(response.json())
```
---
### 3. Get Company Filings
**Endpoint:** `POST /api/get_company_filings`
**Request (All form types):**
```json
{
"cik": "0001045810",
"form_types": null
}
```
**Request (Specific form types):**
```json
{
"cik": "0001045810",
"form_types": ["10-K", "10-Q"]
}
```
**Response:**
```json
{
"filings": [
{
"form_type": "10-K",
"filing_date": "2024-02-21",
"accession_number": "0001045810-24-000029",
"primary_document": "nvda-20240128.htm"
},
{
"form_type": "10-Q",
"filing_date": "2024-05-22",
"accession_number": "0001045810-24-000067",
"primary_document": "nvda-20240428.htm"
}
],
"error": null
}
```
**cURL Example:**
```bash
curl -X POST "https://your-space-name.hf.space/api/get_company_filings" \
-H "Content-Type: application/json" \
-d '{"cik": "0001045810", "form_types": ["10-K", "10-Q"]}'
```
**Python Example:**
```python
import requests
url = "https://your-space-name.hf.space/api/get_company_filings"
payload = {
"cik": "0001045810",
"form_types": ["10-K", "10-Q"]
}
response = requests.post(url, json=payload)
print(response.json())
```
---
### 4. Get Company Facts
**Endpoint:** `POST /api/get_company_facts`
**Request:**
```json
{
"cik": "0001045810"
}
```
**Response:**
```json
{
"facts": {
"dei": {
"EntityCommonStockSharesOutstanding": {...},
"EntityPublicFloat": {...}
},
"us-gaap": {
"Revenues": {...},
"NetIncomeLoss": {...},
"EarningsPerShareBasic": {...}
}
},
"error": null
}
```
**cURL Example:**
```bash
curl -X POST "https://your-space-name.hf.space/api/get_company_facts" \
-H "Content-Type: application/json" \
-d '{"cik": "0001045810"}'
```
**Python Example:**
```python
import requests
url = "https://your-space-name.hf.space/api/get_company_facts"
payload = {"cik": "0001045810"}
response = requests.post(url, json=payload)
print(response.json())
```
---
### 5. Get Financial Data for Period
**Endpoint:** `POST /api/get_financial_data`
**Request (Annual Data):**
```json
{
"cik": "0001045810",
"period": "2024"
}
```
**Request (Quarterly Data):**
```json
{
"cik": "0001045810",
"period": "2024Q3"
}
```
**Response:**
```json
{
"period": "2024",
"total_revenue": 60922000000,
"net_income": 29760000000,
"earnings_per_share": 12.04,
"operating_expenses": 11822000000,
"operating_cash_flow": 28091000000,
"source_url": "https://www.sec.gov/Archives/edgar/data/1045810/000104581024000029",
"source_form": "10-K",
"data_source": "us-gaap",
"additional_details": {
"total_revenue_details": {
"tag": "Revenues",
"form": "10-K",
"fy": 2024,
"fp": "FY",
"val": 60922000000,
"start": "2023-01-30",
"end": "2024-01-28",
"accn": "0001045810-24-000029",
"filed": "2024-02-21",
"frame": "CY2023",
"data_source": "us-gaap"
}
},
"error": null
}
```
**cURL Example:**
```bash
curl -X POST "https://your-space-name.hf.space/api/get_financial_data" \
-H "Content-Type: application/json" \
-d '{"cik": "0001045810", "period": "2024"}'
```
**Python Example:**
```python
import requests
url = "https://your-space-name.hf.space/api/get_financial_data"
payload = {
"cik": "0001045810",
"period": "2024"
}
response = requests.post(url, json=payload)
data = response.json()
print(f"Total Revenue: ${data['total_revenue']:,.0f}")
print(f"Net Income: ${data['net_income']:,.0f}")
print(f"EPS: ${data['earnings_per_share']:.2f}")
```
---
## Complete Python Client Example
```python
import requests
import json
class SECMCPClient:
"""Client for SEC Financial Report MCP Server"""
def __init__(self, base_url):
self.base_url = base_url.rstrip('/')
def search_company(self, company_name):
"""Search company by name"""
url = f"{self.base_url}/api/search_company"
response = requests.post(url, json={"company_name": company_name})
return response.json()
def get_company_info(self, cik):
"""Get company information"""
url = f"{self.base_url}/api/get_company_info"
response = requests.post(url, json={"cik": cik})
return response.json()
def get_company_filings(self, cik, form_types=None):
"""Get company filings"""
url = f"{self.base_url}/api/get_company_filings"
payload = {"cik": cik, "form_types": form_types}
response = requests.post(url, json=payload)
return response.json()
def get_company_facts(self, cik):
"""Get company facts"""
url = f"{self.base_url}/api/get_company_facts"
response = requests.post(url, json={"cik": cik})
return response.json()
def get_financial_data(self, cik, period):
"""Get financial data for period"""
url = f"{self.base_url}/api/get_financial_data"
payload = {"cik": cik, "period": period}
response = requests.post(url, json=payload)
return response.json()
# Usage example
if __name__ == "__main__":
# Initialize client
client = SECMCPClient("https://your-space-name.hf.space")
# Search for a company
company = client.search_company("NVIDIA")
print(f"Found: {company['name']} (CIK: {company['cik']})")
# Get company information
info = client.get_company_info(company['cik'])
print(f"Industry: {info['sic_description']}")
# Get recent filings
filings = client.get_company_filings(company['cik'], ["10-K"])
print(f"Recent 10-K filings: {len(filings['filings'])}")
# Get financial data for 2024
financial_data = client.get_financial_data(company['cik'], "2024")
print(f"FY2024 Revenue: ${financial_data['total_revenue']:,.0f}")
print(f"FY2024 Net Income: ${financial_data['net_income']:,.0f}")
print(f"FY2024 EPS: ${financial_data['earnings_per_share']:.2f}")
```
---
## Complete JavaScript/Node.js Client Example
```javascript
const axios = require('axios');
class SECMCPClient {
constructor(baseUrl) {
this.baseUrl = baseUrl.replace(/\/$/, '');
}
async searchCompany(companyName) {
const response = await axios.post(
`${this.baseUrl}/api/search_company`,
{ company_name: companyName }
);
return response.data;
}
async getCompanyInfo(cik) {
const response = await axios.post(
`${this.baseUrl}/api/get_company_info`,
{ cik: cik }
);
return response.data;
}
async getCompanyFilings(cik, formTypes = null) {
const response = await axios.post(
`${this.baseUrl}/api/get_company_filings`,
{ cik: cik, form_types: formTypes }
);
return response.data;
}
async getCompanyFacts(cik) {
const response = await axios.post(
`${this.baseUrl}/api/get_company_facts`,
{ cik: cik }
);
return response.data;
}
async getFinancialData(cik, period) {
const response = await axios.post(
`${this.baseUrl}/api/get_financial_data`,
{ cik: cik, period: period }
);
return response.data;
}
}
// Usage example
(async () => {
const client = new SECMCPClient('https://your-space-name.hf.space');
// Search for a company
const company = await client.searchCompany('NVIDIA');
console.log(`Found: ${company.name} (CIK: ${company.cik})`);
// Get financial data
const financialData = await client.getFinancialData(company.cik, '2024');
console.log(`FY2024 Revenue: $${financialData.total_revenue.toLocaleString()}`);
console.log(`FY2024 Net Income: $${financialData.net_income.toLocaleString()}`);
console.log(`FY2024 EPS: $${financialData.earnings_per_share.toFixed(2)}`);
})();
```
---
## Error Handling
All endpoints return standard HTTP status codes:
- **200 OK**: Successful request
- **422 Unprocessable Entity**: Invalid request parameters
- **500 Internal Server Error**: Server error
Error response format:
```json
{
"detail": "Error message description"
}
```
Or for API-specific errors:
```json
{
"error": "No company found matching 'INVALID_NAME'"
}
```
---
## Notes
- All monetary values are in USD (original values, not converted to millions)
- The `earnings_per_share` value is per share
- Data source: US SEC EDGAR system
- Supports US-GAAP and IFRS standards
- User-Agent: Juntao Peng (jtyxabc@gmail.com)
- Rate limiting follows SEC EDGAR API guidelines (10 requests per second)
---
## Interactive API Documentation
Once deployed, you can access interactive API documentation at:
- Swagger UI: `https://your-space-name.hf.space/docs`
- ReDoc: `https://your-space-name.hf.space/redoc`