Skip to content

Intrinio Wrapper API

Low-level wrapper for direct Intrinio SDK access.

Advanced API

This is a low-level API intended for advanced use cases. For most scenarios, use the high-level functions:

  • ohlcv_from_intrinio() for fetching OHLCV data
  • securities_from_intrinio() for fetching securities lists

Overview

The chronos_lab.intrinio module provides the Intrinio class for direct access to the Intrinio SDK, custom pagination handling, and access to additional Intrinio APIs beyond stock prices.

When to Use This API

  • Custom pagination requirements
  • Access to additional Intrinio APIs (Company, Exchange, etc.)
  • Fine-grained control over API parameters
  • Direct SDK method calls

When NOT to Use This API

  • Standard OHLCV data fetching (use ohlcv_from_intrinio())
  • Securities list fetching (use securities_from_intrinio())
  • Simple data retrieval operations

Available SDK APIs

The Intrinio class exposes these SDK API objects:

  • _SecurityApi: Security prices, fundamentals, ownership
  • _CompanyApi: Company information, filings, news
  • _StockExchangeApi: Exchange and market data

For complete SDK documentation, see: https://docs.intrinio.com/documentation/python

Class

chronos_lab.intrinio.Intrinio

Intrinio(api_key=None, proxy=None)

Low-level wrapper for Intrinio SDK financial data API operations.

Provides methods for accessing institutional-quality financial data with automatic pagination handling, rate limit management, and error handling. Manages Intrinio SDK configuration and provides access to underlying API objects for advanced usage.

NOTE: This is a low-level class. For typical use cases, prefer high-level functions in chronos_lab.sources module (ohlcv_from_intrinio, securities_from_intrinio).

Attributes:

Name Type Description
_config

Intrinio SDK Configuration object

_ApiClient

Base API client for request handling. See Intrinio SDK docs for advanced usage: https://docs.intrinio.com/documentation/python

_SecurityApi

Security-related API endpoints (prices, fundamentals, ownership)

_CompanyApi

Company information API endpoints (filings, news, data points)

_StockExchangeApi

Stock exchange and market data API endpoints

Examples:

Basic initialization: >>> from chronos_lab.intrinio import Intrinio >>> >>> # With API key from config file >>> intr = Intrinio() >>> >>> # With explicit API key >>> intr = Intrinio(api_key='your_api_key_here') >>> >>> # With proxy configuration >>> intr = Intrinio(api_key='your_key', proxy='http://proxy:8080')

Fetch securities list: >>> result = intr.get_all_securities( ... active=True, ... delisted=False, ... code='EQS', ... composite_mic='USCOMP' ... ) >>> if result['statusCode'] == 0: ... securities = result['payload']

Fetch daily stock prices: >>> result = intr.get_security_stock_prices( ... identifier='AAPL', ... start_date='2024-01-01', ... end_date='2024-12-31', ... frequency='daily' ... ) >>> prices = result['stockPrices']

Advanced SDK access: >>> intr = Intrinio() >>> # Access Security API for fundamentals >>> fundamentals = intr._SecurityApi.get_security_reported_fundamentals( ... identifier='AAPL', ... statement_code='income_statement', ... fiscal_year=2024 ... ) >>> # Access Company API for news >>> news = intr._CompanyApi.get_company_news( ... identifier='AAPL', ... page_size=10 ... )

Initialize Intrinio SDK with API credentials and configuration.

Sets up Intrinio SDK configuration and initializes API clients for accessing financial data endpoints.

Parameters:

Name Type Description Default
api_key

Intrinio API key. If None, reads from INTRINIO_API_KEY in ~/.chronos_lab/.env configuration file.

None
proxy

Optional HTTP proxy URL (e.g., 'http://proxy.example.com:8080').

None

Examples:

>>> # Use API key from configuration
>>> intr = Intrinio()
>>>
>>> # Provide API key explicitly
>>> intr = Intrinio(api_key='your_intrinio_api_key')
>>>
>>> # With proxy
>>> intr = Intrinio(api_key='your_key', proxy='http://proxy:8080')

get_all_securities

get_all_securities(max_number_pages_returned=100, next_page=None, **kwargs)

Fetch all securities with automatic pagination handling.

Retrieves a comprehensive list of securities from Intrinio API with support for filtering by status, type, exchange, and other criteria. Automatically handles pagination to fetch all matching securities up to the specified page limit.

Parameters:

Name Type Description Default
max_number_pages_returned

Maximum number of pages to retrieve (default: 100). Each page typically contains 100 securities.

100
next_page

Optional pagination token for resuming from a specific page.

None
**kwargs

Additional filter parameters passed to Intrinio API: - active: True/False to filter by active status - delisted: True/False to filter by delisted status - code: Security type code (e.g., 'EQS' for equity, 'ETF') - composite_mic: Composite MIC code (e.g., 'USCOMP' for US exchanges) - include_non_figi: Include securities without FIGI identifiers - primary_listing: Filter to primary listings only - page_size: Number of securities per page (default: 100)

{}

Returns:

Type Description

Dictionary with fetch results: - 'statusCode': 0 on success, -1 on error - 'payload': List of security dictionaries with metadata

Examples:

Fetch all US equity securities: >>> intr = Intrinio() >>> result = intr.get_all_securities( ... active=True, ... delisted=False, ... code='EQS', ... composite_mic='USCOMP', ... primary_listing=True ... ) >>> if result['statusCode'] == 0: ... securities = result['payload'] ... print(f"Found {len(securities)} securities")

Fetch ETFs with pagination limit: >>> result = intr.get_all_securities( ... active=True, ... code='ETF', ... max_number_pages_returned=50 ... )

Note
  • Automatically handles pagination; continues until no more pages or limit reached
  • Rate limits apply based on subscription tier
  • Returns all accumulated data from all pages in single payload

get_security_stock_prices

get_security_stock_prices(max_number_pages_returned=100, next_page=None, dividend_only=False, split_ratio_only=False, output_df=True, interval=False, **kwargs)

Fetch historical or intraday stock prices with automatic pagination and rate limit handling.

Retrieves OHLCV price data for a security with support for both historical (daily+) and intraday frequencies. Automatically handles pagination and rate limiting (429 errors) with intelligent retry logic.

Parameters:

Name Type Description Default
max_number_pages_returned

Maximum number of pages to retrieve (default: 100). Each page typically contains 100 price bars.

100
next_page

Optional pagination token for resuming from a specific page.

None
dividend_only

If True, return only dividend information (default: False).

False
split_ratio_only

If True, return only split ratio information (default: False).

False
output_df

If True, return empty DataFrame on error; if False, return response dict (default: True).

True
interval

If True, fetch intraday prices; if False, fetch daily+ prices (default: False).

False
**kwargs

Required and optional parameters for Intrinio API: Required: - identifier: Security identifier (ticker, FIGI, or Intrinio ID) For historical prices (interval=False): - frequency: 'daily', 'weekly', 'monthly', 'quarterly', 'yearly' - start_date: Start date (YYYY-MM-DD) - end_date: End date (YYYY-MM-DD) For intraday prices (interval=True): - interval_size: '1m', '5m', '10m', '15m', '30m', '60m', '1h' - start_date: Start datetime - end_date: End datetime Optional: - page_size: Number of records per page (default: 100) - sort_order: 'asc' or 'desc'

{}

Returns:

Type Description

If output_df=True: Empty pandas DataFrame on error

If output_df=False: Dictionary with: - 'statusCode': 0 on success, -1 on error - 'stockPrices': List of price dictionaries - 'security': Security metadata dictionary

Examples:

Fetch daily prices: >>> intr = Intrinio() >>> result = intr.get_security_stock_prices( ... identifier='AAPL', ... start_date='2024-01-01', ... end_date='2024-12-31', ... frequency='daily', ... output_df=False, ... interval=False ... ) >>> if result['statusCode'] == 0: ... prices = result['stockPrices'] ... security = result['security']

Fetch intraday 5-minute bars: >>> result = intr.get_security_stock_prices( ... identifier='SPY', ... start_date='2024-01-15 09:30:00', ... end_date='2024-01-15 16:00:00', ... interval_size='5m', ... output_df=False, ... interval=True ... )

Fetch with automatic rate limit handling: >>> # Rate limits are automatically handled with retry logic >>> result = intr.get_security_stock_prices( ... identifier='MSFT', ... start_date='2023-01-01', ... frequency='daily', ... output_df=False ... )

Note
  • Automatically retries on 429 (rate limit) errors with intelligent wait
  • Wait time calculated to next minute boundary plus 5 second buffer
  • Historical and intraday data use different API endpoints
  • Pagination continues automatically until all data retrieved