API Reference

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.

Base URL
https://api.bdpo.io/

Keys

Generate, reissue or revoke your API key. Use this key to authenticate your API requests.

API Key Manager
Welcome to API Key Manager v1.0.0
Use this key to authenticate your API requests
No active API keys detected.
Generate a new API key to access our services

Authentication

All API requests require authentication using your API key. Pass your API key as a query parameter.

Query parameter: ?apiKey=YOUR_API_KEY
Authentication Example
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()

API Overview

GEThttps://api.bdpo.io/

Returns basic information about the API including version and available endpoints.

Parameters

No parameters required beyond authentication.

Request
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()
RESPONSE

Get Company Profile

GEThttps://api.bdpo.io/api/company-profile

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)
Request
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()
RESPONSE

Get CIK Ticker List

GEThttps://api.bdpo.io/api/cik-ticker-list

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)
Request
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()
RESPONSE

List All Institutions

GEThttps://api.bdpo.io/institutions

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.
Request
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()
RESPONSE

Get Institution Details

GEThttps://api.bdpo.io/institutions

Returns detailed information about a specific institutional investor identified by CIK.

Parameters

Parameter Type Description
CIKrequired string CIK identifier of the institution
Request
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()
RESPONSE

Get Institution Holdings

GEThttps://api.bdpo.io/institution/holdings

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)
Request
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()
RESPONSE

Get Institution Portfolio

GEThttps://api.bdpo.io/institution/portfolio

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.
Request
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()
RESPONSE

Get Recent Form 4 Filings

GEThttps://api.bdpo.io/insiders/recent

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.
Request
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()
RESPONSE

Get Filing Details

GEThttps://api.bdpo.io/insiders/filing

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)
Request
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()
RESPONSE

Get Company Insiders

GEThttps://api.bdpo.io/insiders/insiders

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

Request
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()
RESPONSE

Search Transactions

GEThttps://api.bdpo.io/insiders/transactions

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.
Request
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()
RESPONSE

Get Transaction Statistics

GEThttps://api.bdpo.io/insiders/stats

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

Request
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()
RESPONSE

Get Person Holdings

GEThttps://api.bdpo.io/insiders/holdings

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

Request
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()
RESPONSE

Get All Owners

GEThttps://api.bdpo.io/insiders/owners

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
Request
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()
RESPONSE

Get All Issuers

GEThttps://api.bdpo.io/insiders/issuers

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
Request
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()
RESPONSE

Get API Usage

GEThttps://api.bdpo.io/usage

Returns the current usage statistics for your API key.

Parameters

No parameters required beyond authentication.

Request
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()
RESPONSE

Rate Limits

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.

Error Codes

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