The BDPO API provides access to a wide range of financial data including institutional investor information, holdings, and portfolio analysis. All requests require authentication using your API key.
Currently we support 13F and form 4 filings data. We provide detailed information about institutional investors and their holdings.
To get an API Key please login. If you don't have an account, you can create one for free.
https://api.bdpo.io/
Generate, reissue or revoke your API key. Use this key to authenticate your API requests.
All API requests require authentication using your API key. Pass your API key as a query parameter.
?apiKey=YOUR_API_KEY
curl -X GET "https://api.bdpo.io?apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io"
params = {"apiKey": "YOUR_API_KEY"}
response = requests.get(url, params=params)
data = response.json()
Returns basic information about the API including version and available endpoints.
Parameters
No parameters required beyond authentication.
curl -X GET "https://api.bdpo.io/?apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/"
params = {"apiKey": "YOUR_API_KEY"}
response = requests.get(url, params=params)
data = response.json()
Returns information about companies matching the specified criteria.
Parameters
Parameter | Type | Description |
---|---|---|
cikoptional | string | Filter by CIK (single value or comma-separated list) |
full_cikoptional | string | Filter by full CIK (single value or comma-separated list) |
tickeroptional | string | Filter by ticker symbol (single value or comma-separated list) |
exchangeoptional | string | Filter by exchange (e.g., 'NYSE', 'Nasdaq') |
limitoptional | integer | Maximum number of results to return (default 1000) |
curl -X GET "https://api.bdpo.io/api/company-profile?ticker=AAPL,MSFT&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/api/company-info"
params = {
"ticker": "AAPL,MSFT",
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Returns a simplified list of CIKs and tickers matching the specified criteria. Useful for mapping between CIKs and ticker symbols.
Parameters
Parameter | Type | Description |
---|---|---|
cikoptional | string | Filter by CIK (single value or comma-separated list) |
tickeroptional | string | Filter by ticker symbol (single value or comma-separated list) |
exchangeoptional | string | Filter by exchange (single value or comma-separated list, e.g., 'NYSE,Nasdaq') |
limitoptional | integer | Maximum number of results to return (default 1000) |
curl -X GET "https://api.bdpo.io/api/cik-ticker-list?exchange=OTC,NYSE&limit=4&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/api/cik-ticker-list"
params = {
"exchange": "OTC,NYSE",
"limit": 4,
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Returns a list of all institutional investors we support with their key information.
Parameters
Parameter | Type | Description |
---|---|---|
limitoptional | integer | Maximum number of institutions to return. Default is 100. |
offsetoptional | integer | Number of institutions to skip for pagination. Default is 0. |
curl -X GET "https://api.bdpo.io/institutions?limit=10&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/institutions"
params = {
"limit": 10,
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Returns detailed information about a specific institutional investor identified by CIK.
Parameters
Parameter | Type | Description |
---|---|---|
CIKrequired | string | CIK identifier of the institution |
curl -X GET "https://api.bdpo.io/institutions?CIK=0000002230&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/institutions"
params = {
"CIK": "0000002230",
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Returns the securities holdings for a specific institutional investor.
Parameters
Parameter | Type | Description |
---|---|---|
CIKrequired | string | CIK identifier of the institution |
limitoptional | integer | Maximum number of holdings to return |
reportingPeriodoptional | string | Filter by specific reporting period (format: YYYY-MM-DD) |
curl -X GET "https://api.bdpo.io/institution/holdings?CIK=0000002230&limit=10&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/institution/holdings"
params = {
"CIK": "0000002230",
"limit": 10,
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Returns portfolio analysis for a specific institutional investor showing percent allocation by holding.
Parameters
Parameter | Type | Description |
---|---|---|
CIKrequired | string | CIK identifier of the institution |
reportingPeriodoptional | string | Filter by specific reporting period (format: YYYY-MM-DD). If not provided, the latest reporting period is used. |
curl -X GET "https://api.bdpo.io/institution/portfolio?CIK=0000002230&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/institution/portfolio"
params = {
"CIK": "0000002230",
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Returns recent Form 4 filings submitted, showing insider trading activity across companies.
Parameters
Parameter | Type | Description |
---|---|---|
daysoptional | integer | Number of days to look back including the current date. Default is 7. |
limitoptional | integer | Maximum number of filings to return. Default is 10. |
curl -X GET "https://api.bdpo.io/insiders/recent?days=7&limit=10&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/insiders/recent"
params = {
"days": 7,
"limit": 10,
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Returns detailed information about a specific Form 4 filing, including all transactions and holdings reported.
Parameters
Parameter | Type | Description |
---|---|---|
accession_numberrequired | string | The accession number for the filing (e.g., 0001562762-23-000007) |
curl -X GET "https://api.bdpo.io/insiders/filing?accession_number=0001562762-23-000007&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/insiders/filing"
params = {
"accession_number": "0001562762-23-000007",
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Returns all insiders (executives, directors, and significant shareholders) who have filed Form 4s for a specific company.
Parameters
Parameter | Type | Description |
---|---|---|
tickeroptional* | string | Company stock ticker symbol (e.g., AAPL) |
cikoptional* | string | Company CIK number |
* Either ticker or cik must be provided
curl -X GET "https://api.bdpo.io/insiders/insiders?ticker=AAPL&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/insiders/insiders"
params = {
"ticker": "AAPL",
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Search for specific insider transactions based on various criteria such as company, insider, transaction type, and date range.
Parameters
Parameter | Type | Description |
---|---|---|
tickeroptional | string | Company stock ticker symbol |
cikoptional | string | Company CIK number |
owner_nameoptional | string | Name of insider (partial match) |
owner_cikoptional | string | CIK of insider |
transaction_codeoptional | string | Transaction code (e.g., P for purchase, S for sale) |
start_dateoptional | string | Start date in YYYY-MM-DD format |
end_dateoptional | string | End date in YYYY-MM-DD format |
min_valueoptional | number | Minimum transaction value (price * shares) |
is_acquisitionoptional | boolean | true for acquisitions (buys), false for dispositions (sells) |
limitoptional | integer | Maximum number of results to return. Default is 100. |
curl -X GET "https://api.bdpo.io/insiders/transactions?ticker=AAPL&is_acquisition=true&min_value=100000&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/insiders/transactions"
params = {
"ticker": "AAPL",
"is_acquisition": "true",
"min_value": 100000,
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Get aggregated statistics on insider purchases and sales for a specific company over a time period.
Parameters
Parameter | Type | Description |
---|---|---|
tickeroptional* | string | Company stock ticker symbol |
cikoptional* | string | Company CIK number |
daysoptional | integer | Number of days to look back. Default is 90. |
* Either ticker or cik must be provided
curl -X GET "https://api.bdpo.io/insiders/stats?ticker=AAPL&days=90&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/insiders/stats"
params = {
"ticker": "AAPL",
"days": 180,
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Get all current holdings for a specific person/insider, categorized by derivative and non-derivative securities.
Parameters
Parameter | Type | Description |
---|---|---|
owner_nameoptional* | string | Name of the insider (partial match) |
owner_cikoptional* | string | CIK of the insider |
* Either owner_name or owner_cik must be provided
curl -X GET "https://api.bdpo.io/insiders/holdings?owner_name=Tim%20Cook&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/insiders/holdings"
params = {
"owner_name": "Tim Cook",
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Get a list of all insiders in the database with basic information about their roles and recent activity.
Parameters
Parameter | Type | Description |
---|---|---|
limitoptional | integer | Maximum number of owners to return. Default is 1000. |
searchoptional | string | Search term to filter owners by name |
curl -X GET "https://api.bdpo.io/insiders/owners?search=Elon&limit=50&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/insiders/owners"
params = {
"search": "Elon",
"limit": 50,
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Get a list of all companies (issuers) in the database with basic information about their insider activity.
Parameters
Parameter | Type | Description |
---|---|---|
limitoptional | integer | Maximum number of issuers to return. Default is 1000. |
searchoptional | string | Search term to filter issuers by name or ticker |
curl -X GET "https://api.bdpo.io/insiders/issuers?search=Tesla&apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/insiders/issuers"
params = {
"search": "Tesla",
"apiKey": "YOUR_API_KEY"
}
response = requests.get(url, params=params)
data = response.json()
Returns the current usage statistics for your API key.
Parameters
No parameters required beyond authentication.
curl -X GET "https://api.bdpo.io/usage?apiKey=YOUR_API_KEY"
import requests
url = "https://api.bdpo.io/usage"
params = {"apiKey": "YOUR_API_KEY"}
response = requests.get(url, params=params)
data = response.json()
API rate limits depend on your subscription tier:
Tier | Requests |
---|---|
Free | 1 per hour |
Plus | 100 per minute |
Ultra | 1000 per minute |
When you exceed your rate limit, the API will return a 429 Too Many Requests response.
Status Code | Description |
---|---|
400 | Bad Request - Missing or invalid parameters |
401 | Unauthorized - Invalid or missing API key |
403 | Forbidden - You don't have permission to access this resource |
404 | Not Found - The requested resource was not found |
429 | Too Many Requests - You've reached your rate limit |
500 | Internal Server Error - Something went wrong on our end |