Kaleidoscope API Documentation

REST API reference for SEC filings, SEDAR, stocks, M&A, press releases, transcripts and insider data. Code samples in cURL, Python and JavaScript.

5-Minute Quickstart

Get up and running with the Kaleidoscope API in under 5 minutes. From your API key to your first successful call.

Make your first API call

Get up and running in two steps: (1) append ?key=YOUR-API-KEY to any endpoint URL, (2) run the example...

Get up and running in two steps: (1) append ?key=YOUR-API-KEY to any endpoint URL, (2) run the example below.

The first request hits /auth-test — a lightweight endpoint that just verifies your key. No permissions or paid plan required. Once that returns success, you can call any of the endpoints documented below.

Authentication: all requests use a query-string API key (?key=...). Keys never expire automatically — they remain valid until you delete them from your dashboard. Treat them like passwords: don't commit them to public repos.

Authentication parameter

Parameter Type Description
key String Your API key from the developer portal (Required on every request)

Step 1 — Verify your key

cURL
Python
JavaScript

Step 2 — Fetch real data

cURL
Python
JavaScript

Successful response

JSON

Failure response (invalid or missing key)

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Exceeding the limit returns HTTP 429 with a reset_in field indicating seconds until reset

SEC Filings

Access a comprehensive dataset of SEC filings from the 1990s to present. Filings are processed within seconds of publication by the SEC.

Filing Search

Search over 18M SEC filings with keywords, Boolean expressions, and 20+ filters. All filing types...

Search over 18M SEC filings with keywords, Boolean expressions, and 20+ filters. All filing types supported. Data available from the 1990s to present.

Parameters

Parameter Type Description
identifier String Restrict results to ticker, CIK (Required)
content String Content to search against. Available values: sec, exhibits, agreements (Required)
limit Int Maximum number of results to return (default: 100, max: 100)
offset Int Used as a way to page through data
start_date Int Start from a date with a timestamp (Unix Timestamp)
end_date Int End at a date with a timestamp (Unix Timestamp)
exp String Boolean expression enterprise
form String Restrict results to passed form(s). Use ; between forms to pass more than one form

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Search over 18M SEC filings with keywords, Boolean expressions, and 20+ filters. All filing types supported. Data available from the 1990s to present.

Parameters

Parameter Type Description
identifier String Restrict results to ticker, CIK (Required)
content String Content to search against. Available values: sec, exhibits, agreements (Required)
limit Int Maximum number of results to return (default: 100, max: 100)
start Int Used as a way to page through data. If end is 100 then the next start be 100
sd Int Start from a date with a timestamp (Unix Timestamp)
ed Int End at a date with a timestamp (Unix Timestamp)
exp String Boolean expression enterprise
form String Restrict results to passed form(s). Use ; between forms to pass more than one form

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Filing Search with Boolean Expression enterprise

Enterprise feature: Search over 18M SEC filings using advanced boolean expressions. Supports all filing...

Enterprise feature: Search over 18M SEC filings using advanced boolean expressions. Supports all filing types from the 1990s to present.

Parameters

Parameter Type Description
key String API key for authentication (Required)
exp String Boolean expression for search (Required)
content String Content to search against. Available values: sec, exhibits, agreements. Defaults to sec
limit Int Maximum number of results to return (default: 100, max: 100)
offset Int Number of results to skip for pagination (e.g., 100 to skip first 100 results)
start_date Int Start date for search as Unix timestamp. Defaults to 4 years ago
end_date Int End date for search as Unix timestamp. Defaults to current date

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Filing Search Realtime

Get all SEC filings for the current UTC day. Returns the latest filings across all companies.

Get all SEC filings for the current UTC day. Returns the latest filings across all companies.

Parameters

Parameter Type Description
key String API key for authentication (Required)
content String Content to search against. Available values: sec, exhibits, agreements. Defaults to sec
limit Int Maximum number of results to return (default: 100, max: 100)
start Int Number of results to skip for pagination (e.g., 100 to skip first 100 results)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

SEC Filings List enterprise

List all SEC filings for a company by ticker or CIK, newest first. Returns one entry per filing with its...

List all SEC filings for a company by ticker or CIK, newest first. Returns one entry per filing with its accession number, form type, and filing date. Filter by form type(s) and date range. Any SEC form type can be requested (10-K, 8-K, 4, SC 13D, S-1, ...); the 10-K, 10-Q, 8-K, 20-F and 40-F families automatically include their /A amendment variants.

Parameters

Parameter Type Description
identifier String Ticker symbol or CIK number (Required)
form String Form type(s), comma-separated (e.g. '10-K,10-Q'). Known families include /A variants automatically
start_date Int Start from a date with a timestamp (Unix Timestamp)
end_date Int End at a date with a timestamp (Unix Timestamp)
limit Int Maximum number of results to return (default: 25, max: 100)
offset Int Used as a way to page through data

Example Request

cURL
Python
JavaScript

Example Response

JSON

Filing Items enterprise

List the items/sections of a single SEC filing by accession number — e.g. every item of a 10-K (Item 1...

List the items/sections of a single SEC filing by accession number — e.g. every item of a 10-K (Item 1 Business, Item 1A Risk Factors, ...). Only the 10-K, 10-Q, 8-K, 20-F and 40-F form families (and their /A variants) are sectioned into items. Each item's section object includes a 'text' URL — GET it to retrieve the full content of that section (plain text by default; add &format=html for the original markup).

Parameters

Parameter Type Description
accession String SEC accession number, e.g. 0000320193-26-000013 (Required)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Company Items enterprise

List all filing items/sections for a company by ticker or CIK, newest first — every sectioned item across...

List all filing items/sections for a company by ticker or CIK, newest first — every sectioned item across the company's 10-K, 10-Q, 8-K, 20-F and 40-F filings (and /A variants). Filter by form type(s) and date range. Use the Filing Items endpoint to expand a single filing instead. Each item's section object includes a 'text' URL — GET it to retrieve the full content of that section (plain text by default; add &format=html for the original markup).

Parameters

Parameter Type Description
identifier String Ticker symbol or CIK number (Required)
form String Form type(s), comma-separated. Supported: 10-K, 10-Q, 8-K, 20-F, 40-F (and /A variants)
start_date Int Start from a date with a timestamp (Unix Timestamp)
end_date Int End at a date with a timestamp (Unix Timestamp)
limit Int Maximum number of results to return (default: 25, max: 100)
offset Int Used as a way to page through data

Example Request

cURL
Python
JavaScript

Example Response

JSON

Holdings

Retrieve equity holdings from Form 13F filings for institutional managers with $100M+ in assets.

Retrieve equity holdings from Form 13F filings for institutional managers with $100M+ in assets.

Parameters

Parameter Type Description
identifier String Restrict results to cusip, ticker, CIK (Required)
type String Format: HTML, PDF, Word, XLS, XBRL, XBRL-HTML (Required)
limit Int Maximum number of results to return (default: 100, max: 100)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Form D - Private Securities Offerings

Access exempt registrations for small companies and funds pre-IPO.

Access exempt registrations for small companies and funds pre-IPO.

Parameters

Parameter Type Description
identifier String Restrict results to acc, CIK (Required)
limit Int Maximum number of results to return (default: 100, max: 100)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Form C - Crowdfunding

Retrieve crowdfunding offering statements filed via Form C.

Retrieve crowdfunding offering statements filed via Form C.

Parameters

Parameter Type Description
identifier String Restrict results to acc, CIK (Required)
limit Int Maximum number of results to return (default: 100, max: 100)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Insider Transactions

Fetch insider transaction details for non-derivative and derivative securities.

Fetch insider transaction details for non-derivative and derivative securities.

Parameters

Parameter Type Description
identifier String Restrict results to ticker, CIK (Required)
limit Int Maximum number of results to return (default: 100, max: 100)
start Int Start results from
sd String Start date
ed String End date

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Compensation Summary

Fetch summary compensation data for key executives.

Fetch summary compensation data for key executives.

Parameters

Parameter Type Description
identifier String Restrict results to acc, CIK, ticker (Required)
sort String Sort retrieved data by asc or desc
year Int Filter retrieved data by specific year

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Compensation Director

Retrieve compensation data for company directors.

Retrieve compensation data for company directors.

Parameters

Parameter Type Description
identifier String Restrict results to acc, CIK, ticker (Required)
sort String Sort retrieved data by asc or desc
year Int Filter retrieved data by specific year

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Corporate Actions

Search corporate actions reported in Form 8-K.

Search corporate actions reported in Form 8-K.

Parameters

Parameter Type Description
identifier String Restrict results to ticker, CIK (Required)
limit Int Maximum number of results to return (default: 100, max: 100)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Alerts

Manage email alert subscriptions. Use action=list to retrieve all subscriptions for your key, action=add...

Manage email alert subscriptions. Use action=list to retrieve all subscriptions for your key, action=add to subscribe an email to a content type, or action=delete to remove a subscription.

Parameters

Parameter Type Description
action String Required. One of: list, add, delete
email_addr String Required for add and delete. The email address to subscribe or unsubscribe.
content String Required for add. One of: sec, stock, prnews, sedar, weekly

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

M&A Intelligence

Search and filter merger and acquisition deals including acquirer, target, deal type, status, advisors, and transaction value.

Deal Search

Search M&A deals with filters for acquirer, target, status, deal type, industry, date range, deal value,...

Search M&A deals with filters for acquirer, target, status, deal type, industry, date range, deal value, advisor, CIK, and ticker. Returns paginated results with facet counts grouped by deal type, status, and industry.

Parameters

Parameter Type Description
q String Search across acquirer and target names
acquirer_q String Search acquirer name only
target_q String Search target name only
status String Filter by status: announced, pending, completed, terminated, withdrawn
deal_type String Filter by deal type (e.g. acquisition, merger, takeover)
industry String Filter by industry (either side)
acquirer_industry String Filter by acquirer industry (comma-separated)
target_industry String Filter by target industry (comma-separated)
date_start String Start date YYYY-MM-DD
date_end String End date YYYY-MM-DD
deal_value_min Number Minimum deal value in millions (e.g. 100 = $100M)
deal_value_max Number Maximum deal value in millions
advisor String Filter by advisor name
cik String Filter by SEC CIK number (either side)
ticker String Filter by stock ticker (either side)
sort_by String Sort field: date, value, acquirer, target, status, deal_type (default: date)
sort_order String asc or desc (default: desc)
limit Int Results per page (default: 25, max: 100)
offset Int Pagination offset (default: 0)

Example Request

cURL
POST
Python

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status

Stocks

Get intraday and end-of-day stock data from NASDAQ with 15-minute delay for real-time quotes.

Stock Real-Time enterprise

Access real-time stock prices with a 15-minute delay. Data from NASDAQ exchange.

Access real-time stock prices with a 15-minute delay. Data from NASDAQ exchange.

Parameters

Parameter Type Description
API-KEY String API key (Required)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Stock Historical enterprise

Retrieve historical stock prices and performance indicators.

Retrieve historical stock prices and performance indicators.

Parameters

Parameter Type Description
limit Int Maximum number of results to return (default: 100, max: 100)
sd String Start date as a timestamp
ed String End date as a timestamp

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Stock Delayed enterprise

Enterprise feature: Access delayed stock prices and performance indicators. Requires enterprise tier access.

Enterprise feature: Access delayed stock prices and performance indicators. Requires enterprise tier access.

Parameters

Parameter Type Description
ticker String Restrict results to ticker (Required)
limit Int Maximum number of results to return (default: 100, max: 100)
start_date String Start date as a timestamp
end_date String End date as a timestamp

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Wealth

Access detailed information about insider activities, including search, gifts, bios, sales, compensation, and holdings.

Gifts enterprise

Retrieve all gift transactions for a person, identified by CIK.

Retrieve all gift transactions for a person, identified by CIK.

Inputs

Parameter Type Description
key String API key (Required)
cik Integer CIK identifier (Required)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Bios enterprise

Retrieve all identified bios for a person, identified by CIK.

Retrieve all identified bios for a person, identified by CIK.

Inputs

Parameter Type Description
key String API key (Required)
cik Integer CIK identifier (Required)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Sales enterprise

Retrieve all sales transactions for a person, identified by CIK. Typically includes transaction codes [S,D].

Retrieve all sales transactions for a person, identified by CIK. Typically includes transaction codes [S,D].

Inputs

Parameter Type Description
key String API key (Required)
cik Integer CIK identifier (Required)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Compensation enterprise

Retrieve all compensation data for a person, identified by CIK. Includes summary and/or director compensation.

Retrieve all compensation data for a person, identified by CIK. Includes summary and/or director compensation.

Inputs

Parameter Type Description
key String API key (Required)
cik Integer CIK identifier (Required)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Holdings enterprise

Retrieve all holdings (common shares) data for a person, identified by CIK.

Retrieve all holdings (common shares) data for a person, identified by CIK.

Inputs

Parameter Type Description
key String API key (Required)
cik Integer CIK identifier (Required)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

SEDAR

Access Canadian securities filings via the SEDAR system since 1997.

SEDAR

Retrieve individual SEDAR filings for Canadian companies.

Retrieve individual SEDAR filings for Canadian companies.

Parameters

Parameter Type Description
identifier String Restrict results to cusip, ticker, CIK (Required)
limit Int Maximum number of results to return (default: 100, max: 100)
page Int Returns a page of data
symbol String DEC:CA

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

SEDAR Search (v3)

Search Canadian SEDAR filings with rich filtering: ticker/CUSIP/issuer-number identifiers, filing-category...

Search Canadian SEDAR filings with rich filtering: ticker/CUSIP/issuer-number identifiers, filing-category and filing-type filters (with multi-value OR), date ranges, and accurate pagination. Totals reflect the full result set, not just the current page.

Parameters

Parameter Type Description
ticker String TSX/TSXV ticker symbol (e.g. SHOP). Resolved server-side to the SEDAR issuer number. One identifier required.
symbol String Bare or exchange-prefixed symbol (e.g. SHOP, SHOP:CA). Same resolver as ticker.
issuer-symbol String Exchange-prefixed symbol (e.g. SHOP:CA). Same resolver as ticker.
issuerno String SEDAR issuer number, 9-char zero-padded (e.g. 000037100). Most direct identifier.
cusip String 6-char CUSIP base (e.g. 82509L). Broader than ticker - matches all share classes for an issuer.
filing_cat String Filing category (e.g. CONTINUOUS_DISCLOSURE, securitiesofferings, THIRD_PARTY_FILINGS). Multiple values may be passed separated by ; or , (logical OR).
filing_type String Filing type (e.g. NEWS_RELEASES, MANAGEMENT_PROXY_MATERIALS, ANNUAL_FINANCIAL_STATEMENTS). Multi-value supported.
filing_sub String Filing sub-type. Multi-value supported.
date_range String Shorthand range: 1yr, 3yr, 5yr, 10yr, 20yr, ytd, or all.
year Int Restrict to a calendar year (1900-2100).
start Int Inclusive lower bound on filing day (days since Unix epoch).
end Int Inclusive upper bound on filing day.
limit Int Page size (default 20, max 100).
offset Int Zero-based row offset for pagination.

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Press Releases

Access press releases for companies using ticker symbols.

Press Releases

Fetch the latest press releases by ticker symbol.

Fetch the latest press releases by ticker symbol.

Parameters

Parameter Type Description
identifier String Restrict results to a ticker (Required)
limit Int Maximum number of results to return (default: 100, max: 100)
start Int Used as a way to page through data. If end is 100 then the next start be 100
year Int Filter retrieved data by specific year
sort String Sort retrieved data by asc or desc
sd Int Start from a date with a timestamp (Unix Timestamp)
ed Int End at a date with a timestamp (Unix Timestamp)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Realtime Transcripts enterprise

Fetch the latest transcripts for the current day in Eastern Standard Time (EST, UTC-5).

Fetch the latest transcripts for the current day in Eastern Standard Time (EST, UTC-5).

Parameters

Parameter Type Description
key String API key for authentication (Required)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Historical Transcripts enterprise

Fetch historical transcripts with optional filters for ticker, date, date range, call title, and status....

Fetch historical transcripts with optional filters for ticker, date, date range, call title, and status. Use 'limit' and 'offset' for pagination to navigate through large result sets.

Parameters

Parameter Type Description
key String API key for authentication (Required)
ticker String Restrict results to a specific ticker symbol (e.g., TSLA)
start_date Integer Start of date range as Unix timestamp (e.g., 1704067200 for Jan 1, 2024)
end_date Integer End of date range as Unix timestamp (e.g., 1719792000 for Jun 30, 2024)
call_title String Keywords to search in call title (case-insensitive, e.g., Q4)
status String Filter by transcript status (e.g., COMPLETED)
limit Int Maximum number of results to return (default: 100, max: 100)
offset Int Number of results to skip for pagination (default: 0)

Example Request

cURL
Python
JavaScript

Example Response

JSON

Rate limit: 3,600 requests/hour

Rolling hourly window · Returns 429 status with reset_in field showing seconds until limit resets

Rate Limits

Understand API rate limiting and how to optimize your usage. Monitor your limits through response headers.

Rate Limiting Overview

All API endpoints are rate-limited to ensure fair usage and system stability. Rate limits are applied per...

All API endpoints are rate-limited to ensure fair usage and system stability. Rate limits are applied per API key on an hourly rolling window.

Rate Limiting Details

Aspect Value Description
Default Limit 3,600/hour Standard rate limit for all API endpoints
Time Window 1 hour Rolling window that resets every hour on the hour
Reset Time Top of hour Limits reset at :00 of each hour (e.g., 1:00, 2:00, 3:00)
Error Code 429 HTTP status returned when rate limit exceeded
Retry After Variable Seconds until the next hour boundary (provided in error response)

Rate Limit Error Response

429 Response

Handling Rate Limits

Python
JavaScript
cURL

Error Codes

Understand API error codes and their meanings. All errors return a consistent JSON structure with code, type, and message fields.

API Error Codes

The API returns standardized error responses to help you handle issues programmatically. Every error...

The API returns standardized error responses to help you handle issues programmatically. Every error includes detailed information to help you identify and resolve the issue quickly.

Error Code Reference

HTTP Code Error Type Common Causes & Solutions
400 INPUT Bad Request
• Missing required parameters
• Invalid date format (use Unix timestamp)
• Invalid ticker symbol
• Malformed JSON body
Solution: Check parameter names and formats
401 AUTH Unauthorized
• Missing API key parameter
• Invalid or expired API key
• Key suspended or revoked
Solution: Verify your API key at api.kscope.io/dashboard
403 PERMISSION Forbidden
• Endpoint requires premium/enterprise tier
• Missing specific permissions
• IP restrictions in place
Solution: Upgrade your plan or contact support
404 DATA Not Found
• Invalid endpoint URL
• Resource doesn't exist (e.g., invalid CIK)
• Data not available for date range
Solution: Verify endpoint path and identifiers
429 RATELIMIT Too Many Requests
• Exceeded hourly rate limit
• Too many concurrent requests
• Burst limit exceeded
Solution: Implement rate limiting and retry logic
500 SERVER_ERROR Internal Server Error
• Unexpected server error
• Database connection issue
• Unhandled exception
Solution: Retry after a few seconds. If persists, contact support

Error Response Format

400 Bad Request
401 Unauthorized
429 Rate Limited

Robust Error Handling

Python
JavaScript
cURL

Retry Strategy

Exponential Backoff