API Documentation

The InsiderLayer API provides structured insider transaction data from 35 countries, covering over 75% of the global stock market. Every transaction is mapped to a single, standardized schema and includes a link back to the original filing.

Quick Start

All API requests require an API key passed via the X-API-Key header. See Authentication for details.

Fetch the most recent insider transactions:

$ curl -H "X-API-Key: YOUR_API_KEY" \
	https://api.insiderlayer.com/api/transactions

Authentication

X-API-Key required header

All requests must include your API key in the X-API-Key HTTP header. You can obtain an API key by signing up on our registration page.

Endpoints

GET /api/status

Health check endpoint. Returns the current API status.

$ curl https://api.insiderlayer.com/api/status
{ "status": "ok" }
GET /api/transactions

Query for insider transactions. This endpoint returns transactions that match all specified filters. When no filters are specified, the newest transactions are returned up to the specified limit. Multiple values per filter are possible by specifying the parameter multiple times. Comma-separated values are not supported.

Query Parameters

Parameter Type Required Description
isin string[] optional ISIN of the instrument that was traded. Specify multiple times to filter for multiple ISINs. Each value must be exactly 12 characters.
share_class_figi string[] optional Share-class level FIGI of the instrument that was traded. Specify multiple times to filter for multiple FIGIs. Each value must be exactly 12 characters.
issuer_lei string[] optional LEI of the issuing company. Specify multiple times to filter for multiple LEIs. Each value must be exactly 20 characters.
country string[] optional ISO 3166-1 alpha-2 country code. Specify multiple times to include transactions from multiple countries. See Data Sources for supported countries.
transaction_date_from date optional Minimum (inclusive) transaction date. Format: YYYY-MM-DD. Only transactions occuring on or after this date will be returned.
transaction_date_to date optional Maximum (exclusive) transaction date. Format: YYYY-MM-DD. Only transactions occuring before this date will be returned.
publication_date_from date optional Minimum (inclusive) publication date. Format: YYYY-MM-DD. Only transactions published on or after this date will be returned.
publication_date_to date optional Maximum (exclusive) publication date. Format: YYYY-MM-DD. Only transactions published before this date will be returned.
pagination string optional Opaque pagination token. Use the _links.next value from a previous response to fetch the next page of results.
limit integer optional Maximum number of results to return. Default: 1000. Minimum: 1. Maximum: 1000.

Example Requests

Fetch transactions for a specific country:

$ curl -H "X-API-Key: YOUR_API_KEY" \
	"https://api.insiderlayer.com/api/transactions?country=DE&limit=5"

Fetch transactions for multiple ISINs:

$ curl -H "X-API-Key: YOUR_API_KEY" \
	"https://api.insiderlayer.com/api/transactions?isin=US02079K1079&isin=US0378331005"

Fetch transactions within a date range:

$ curl -H "X-API-Key: YOUR_API_KEY" \
	"https://api.insiderlayer.com/api/transactions?transaction_date_from=2026-01-01&transaction_date_to=2026-04-01&country=KR&limit=3"

Response Schema

A successful response returns a JSON object with the following structure:

Field Type Description
_links object Contains pagination links. See Pagination.
_links.next string | null URL to the next page of results. null or absent when there are no more results.
data array Array of transaction objects. Each object has the fields described below.

Transaction Object

Field Type Nullable Description
id string no Unique identifier for the transaction. May be based on the source system's unique ids, but this is not guaranteed.
country string no ISO 3166-1 alpha-2 country code of the source regulator or exchange.
source string no Identifies the source system. See the Data Sources section for a list of possible values.
source_link string no Direct URL to the original filing on the regulator's or exchange's website.
reporting_name string no Name of the reporting person or entity, as reported in the original filing.
reporting_position string no Position or title of the reporting person within the company, as reported (e.g. "Director", "Vorstand", "CEO").
issuer_name string no Name of the issuing company, as reported in the original filing.
isin string no ISIN (International Securities Identification Number) of the traded instrument. Always present.
share_class_figi string no Share-class level FIGI (Financial Instrument Global Identifier) of the traded instrument. Always present.
issuer_lei string yes LEI (Legal Entity Identifier) of the issuing company. Present when provided by the source; may be null for some sources.
security_type string no Type of security traded. One of: "share", "other".
transaction_type string no Nature of the transaction. One of: "purchase", "sale", "other".
transaction_date date no Date on which the transaction occurred. Format: YYYY-MM-DD.
publication_date date no Date on which the transaction was published by the source regulator or exchange. Format: YYYY-MM-DD.
price number no Average price per security, in the currency specified by the currency field.
amount_delta number no Change in the number of securities held by the reporting entity. Positive for acquisitions (purchases), negative for disposals (sales).
amount_post number yes Number of securities held by the reporting entity after the transaction. May be null for sources that do not report this value.
currency string no ISO 4217 currency code for the price column (e.g. "EUR", "USD", "KRW"). May not be the origin country's currency.

Pagination

Results are paginated with a maximum of 1000 transactions per page (configurable via the limit parameter). When a response contains a full page, it includes a _links.next URL that can be used to fetch the next page. Simply follow this URL in subsequent requests to iterate through all results. The pagination token is an opaque string derived from the timestamp of the last returned transaction.

Error Handling

Status Code Description
200 Success. The response body contains the requested data.
400 Bad Request. One or more parameters are invalid. The response body includes a message field with details.
403 Forbidden. The API key is missing or invalid.
500 Internal Server Error. The request could not be processed due to a server-side issue.

Data Sources

InsiderLayer collects insider transaction data from regulatory filings and stock exchange disclosures. Each source is mapped to a unified schema. Below are the currently implemented sources with their specific characteristics.

Germany — BaFin

Data is sourced from the BaFin (Bundesanstalt für Finanzdienstleistungsaufsicht) Directors' Dealings database. Managers of publicly traded German companies must report transactions involving shares or financial instruments of their own company.

Source-specific notes

  • Reporting threshold: Transactions ≥ €30,000 within a calendar year must be reported.
  • Reporting deadline: Within 3 business days of the transaction.
  • LEI: Almost always present for German issuers.
  • Currency: Transactions are reported in EUR.
  • Positions: Typically reported in German (e.g. "Vorstand", "Aufsichtsrat").
  • Source identifier: bafin

Source URL: bafin.de

India — National Stock Exchange

Data is sourced from the National Stock Exchange of India (NSE). Promoters, directors, and key managerial personnel of listed companies must disclose their holdings and transactions.

Source-specific notes

  • Disclosure type: Includes both initial disclosures and ongoing transaction reports.
  • LEI: May not be present for all Indian issuers.
  • Amount post: Usually reported.
  • Source identifier: nse

Source URL: nseindia.com

China — Stock Exchanges

Data is sourced from the Beijing Stock Exchange (BSE), Shenzhen Stock Exchange (SZSE), and Shanghai Stock Exchange (SSE), as well as the Hong Kong Stock Exchange (HKEX). Directors, supervisors, and senior management of listed companies must report changes in their shareholdings.

Source-specific notes

  • Country code: Data from Hong Kong uses the HK country code.
  • LEI: Not always present; many Chinese issuers do not have an LEI.
  • Reporting names: Typically reported in Chinese characters.
  • Source identifier: bse / szse / sse / hkex

Source URLs: bse.cn · szse.cn · sse.com.cn · hkex.com.hk

South Korea — OpenDART

Data is sourced from the OpenDART system operated by the Financial Supervisory Service (FSS) of South Korea. Major shareholders, officers, and their relatives must report changes in shareholdings of listed Korean companies.

Source-specific notes

  • Reporting scope: Includes both major shareholder changes and officer transactions.
  • LEI: Most Korean issuers have an LEI.
  • Reporting names: Typically include both Korean characters and romanized names.
  • Positions: Reported in Korean (e.g. "상무" for managing director).
  • Amount post: Usually reported.
  • Source identifier: dart

Source URL: dart.fss.or.kr

Upcoming Data Sources

SEC

Forms 3, 4, and 5 filings from the U.S. Securities and Exchange Commission's EDGAR system.

SEDI

Insider transaction reports from the System for Electronic Disclosure by Insiders (SEDI) in Canada.

SIX Exchange Regulation

Management transaction disclosures from SIX Exchange Regulation in Switzerland.

Other EU countries

National regulators and stock exchanges across the European Union, mapped to the MAR (Market Abuse Regulation) standard.

Frequently Asked Questions

How do I get an API key?

Sign up on our registration page to receive a free API key with access to 7-day lagged data and 10,000 requests per day.

What is the rate limit?

Rate limits depend on your plan. See our pricing page for details. The Basic plan allows 10,000 requests per day.

How fresh is the data?

Data freshness depends on the source. Most regulators publish filings within 1-5 business days of the transaction. Our system checks for updates every hour. The Basic plan provides data with a 7-day lag; higher tiers provide realtime access.

Can I filter by multiple values?

Yes. Most array parameters support multiple values by specifying the parameter multiple times. For example: ?country=DE&country=KR returns transactions from both Germany and South Korea. Comma-separated values are not supported.

What identifiers are always available?

ISIN and share_class_figi are always present on every transaction record. issuer_lei is present when the source provides it, which varies by market.

How do I cite or display InsiderLayer data?

Commercial display requires a Commercial license. Attribution to InsiderLayer.com as the data source is appreciated for all uses, but not required for personal/internal use.