Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Earnings Feed Insider API
version: 1.0.0
description: 'Access SEC filings, insider transactions, institutional holdings, and company data.
## Authentication
All API endpoints require authentication via API key. Include your key in the Authorization header:
```
Authorization: Bearer your_api_key
```
## Rate Limits
The tier-specific per-minute limits below apply to API-key and MCP requests. Interactive documentation tokens retain a
fixed limit of 10 requests per minute, regardless of subscription tier:
| Tier | Requests/minute | Requests/UTC month |
|------|-----------------|--------------------|
| Free | 15 | 5,000 |
| Pro | 60 | 250,000 |
| Trader | 300 | 2,000,000 |
The monthly allowance is account-wide and shared across API keys, interactive documentation, and MCP tool calls.
Authenticated responses that pass the minute throttle include both minute and monthly usage headers:
- `X-RateLimit-Limit`: Maximum requests per minute
- `X-RateLimit-Remaining`: Remaining requests in current window
- `X-RateLimit-Reset`: Unix timestamp when the window resets
- `X-RateLimit-Monthly-Limit`: Requests included per UTC calendar month
- `X-RateLimit-Monthly-Remaining`: Remaining requests in the current UTC month
- `X-RateLimit-Monthly-Reset`: Unix timestamp for the next UTC month
- `X-RateLimit-Monthly-Policy`: currently `hard` for every tier
Every tier stops at its account-wide UTC monthly allowance: Free at 5,000 requests, Pro at 250,000, and Trader at
2,000,000. Usage milestones are recorded at 70%, 90%, and 100% so integrations can upgrade before reaching the cap.
For a minute throttle, HTTP `429` uses code `RATE_LIMITED`, `X-RateLimit-Scope: minute`, and a `Retry-After`
header. Wait for that interval, add jitter, and cap retry attempts. A monthly cap uses code
`MONTHLY_QUOTA_EXCEEDED`, `X-RateLimit-Scope: monthly`, reset timing, upgrade guidance, and an HTTP-date
`Retry-After` value that points to the monthly reset; do not retry it in a loop.
```js
async function fetchWithBackoff(url, options) {
for (let attempt = 0; attempt setTimeout(resolve, retryAfter * 1000 + jitterMs));
}
}
```
## Pagination
List endpoints use cursor-based pagination:
- `limit`: Number of items per page (1-100, default 25)
- `cursor`: Opaque cursor from previous response
Response includes:
- `items`: Array of results
- `nextCursor`: Cursor for next page (null if no more)
- `hasMore`: Whether more items exist'
contact:
name: Earnings Feed Support
url: https://earningsfeed.com/support
email: support@earningsfeed.com
license:
name: Proprietary
url: https://earningsfeed.com/terms
servers:
- url: https://earningsfeed.com
description: Production
security:
- bearerAuth: []
tags:
- name: Insider
description: Track insider trading activity from SEC Forms 3, 4, and 5. Monitor purchases, sales, grants, and other transactions by corporate officers, directors, and 10% owners.
paths:
/api/v1/insider/transactions:
get:
tags:
- Insider
summary: List insider transactions
description: 'Retrieve a paginated feed of SEC insider trading transactions from Forms 3, 4, and 5.
## Data Source
This endpoint returns transactions reported by corporate insiders (officers, directors, and 10% owners) to the SEC. Each transaction represents a buy, sell, grant, gift, or other transfer of company securities.
## Transaction Codes
The `transactionCode` field indicates the type of transaction:
| Code | Description | Common Usage |
|------|-------------|--------------|
| **P** | Open market purchase | Most common buy signal |
| **S** | Open market sale | Most common sell signal |
| **A** | Award/grant | Stock compensation |
| **M** | Exercise of derivative | Options/warrants exercise |
| **G** | Gift | Transfer to family/charity |
| **F** | Tax payment | Shares sold for tax withholding |
| **X** | Exercise in-the-money | Options exercise |
## Filtering Tips
- Use `direction=buy` to see only acquisitions (bullish signals)
- Use `direction=sell` to see only dispositions
- Use `codes=P,S` to see open market trades only (excludes awards, gifts)
- Use `derivative=false` to see only equity transactions
- Use `minValue=100000` to see only large transactions
## Understanding the Data
- **shares**: Number of securities in the transaction
- **pricePerShare**: Price per share (null for gifts, awards, etc.)
- **transactionValue**: Computed total value (shares × price)
- **sharesAfter**: Insider''s total holdings after this transaction
- **directIndirect**: D=Direct ownership, I=Indirect (through trust, etc.)
- **isDerivative**: true=Options/warrants, false=Common stock
## Example Use Cases
1. **Track CEO purchases**: Filter by `insiderCik` + `direction=buy`
2. **Monitor large sales**: Filter by `direction=sell` + `minValue=1000000`
3. **Company insider activity**: Filter by `ticker=AAPL`
4. **Recent trades by all insiders**: No filters, sorted by date'
security:
- bearerAuth: []
parameters:
- schema:
type: integer
minimum: 1
maximum: 100
default: 25
description: Number of items to return (1-100)
example: 25
required: false
description: Number of items to return (1-100)
name: limit
in: query
- schema:
type: string
description: Cursor for pagination (opaque string from previous response)
example: eyJzb3J0IjoiMjAyNC0xMS0wMVQxMjozMDowMC4wMDBaIiwiaWQiOjEyMzQ1fQ
required: false
description: Cursor for pagination (opaque string from previous response)
name: cursor
in: query
- schema:
type: integer
exclusiveMinimum: 0
description: Filter by company CIK (issuer)
example: 320193
required: false
description: Filter by company CIK (issuer)
name: cik
in: query
- schema:
type: string
minLength: 1
maxLength: 10
description: Filter by company stock ticker
example: AAPL
required: false
description: Filter by company stock ticker
name: ticker
in: query
- schema:
type: integer
exclusiveMinimum: 0
description: Filter by insider CIK (reporting person)
example: 320193
required: false
description: Filter by insider CIK (reporting person)
name: insiderCik
in: query
- schema:
anyOf:
- type: string
- type: array
items:
type: string
description: Filter by transaction codes (comma-separated). E.g., 'P,S' for purchases/sales.
example: P,S
required: false
description: Filter by transaction codes (comma-separated). E.g., 'P,S' for purchases/sales.
name: codes
in: query
- schema:
type: string
enum:
- buy
- sell
- all
default: all
description: 'Filter by transaction direction:
- **buy** = Acquisitions only (transaction codes P, A, M, X, etc. with acquiredDisposed=A)
- **sell** = Dispositions only (transaction codes S, F, D, etc. with acquiredDisposed=D)
- **all** = All transactions'
example: buy
required: false
description: 'Filter by transaction direction:
- **buy** = Acquisitions only (transaction codes P, A, M, X, etc. with acquiredDisposed=A)
- **sell** = Dispositions only (transaction codes S, F, D, etc. with acquiredDisposed=D)
- **all** = All transactions'
name: direction
in: query
- schema:
type: string
enum:
- 'true'
- 'false'
- all
default: all
description: Filter by security type. 'true' for derivatives only, 'false' for equity only.
required: false
description: Filter by security type. 'true' for derivatives only, 'false' for equity only.
name: derivative
in: query
- schema:
type: string
pattern: ^\d{4}-\d{2}-\d{2}$
description: Filter transactions on or after this date (YYYY-MM-DD)
example: '2024-01-01'
required: false
description: Filter transactions on or after this date (YYYY-MM-DD)
name: startDate
in: query
- schema:
type: string
pattern: ^\d{4}-\d{2}-\d{2}$
description: Filter transactions on or before this date (YYYY-MM-DD)
example: '2024-12-31'
required: false
description: Filter transactions on or before this date (YYYY-MM-DD)
name: endDate
in: query
- schema:
type: number
exclusiveMinimum: 0
description: Minimum transaction value (shares * price) in USD
example: 100000
required: false
description: Minimum transaction value (shares * price) in USD
name: minValue
in: query
- schema:
type: number
exclusiveMinimum: 0
description: Maximum transaction value in USD
example: 10000000
required: false
description: Maximum transaction value in USD
name: maxValue
in: query
- schema:
type: string
maxLength: 500
description: Search query for company name, insider name, or ticker
example: Apple
required: false
description: Search query for company name, insider name, or ticker
name: q
in: query
responses:
'200':
description: Paginated list of insider transactions
headers:
X-RateLimit-Limit:
description: Maximum requests allowed per minute for this authentication path
schema:
type: string
example: '15'
X-RateLimit-Remaining:
description: Remaining requests in the current minute window
schema:
type: string
example: '14'
X-RateLimit-Reset:
description: Unix timestamp when the current minute window resets
schema:
type: string
example: '1699012345'
X-RateLimit-Monthly-Limit:
description: Requests included for the account in a UTC calendar month
schema:
type: string
example: '5000'
X-RateLimit-Monthly-Remaining:
description: Remaining requests in the account's current UTC calendar month
schema:
type: string
example: '4999'
X-RateLimit-Monthly-Reset:
description: Unix timestamp when the next UTC calendar month begins
schema:
type: string
example: '1785542400'
X-RateLimit-Monthly-Policy:
description: Monthly allowance policy. All current tiers use hard caps.
schema:
type: string
enum:
- hard
example: hard
content:
application/json:
schema:
$ref: '#/components/schemas/InsiderTransactionsResponse'
'400':
description: Invalid query parameters
headers:
X-RateLimit-Limit:
description: Maximum requests allowed per minute for this authentication path
schema:
type: string
example: '15'
X-RateLimit-Remaining:
description: Remaining requests in the current minute window
schema:
type: string
example: '14'
X-RateLimit-Reset:
description: Unix timestamp when the current minute window resets
schema:
type: string
example: '1699012345'
X-RateLimit-Monthly-Limit:
description: Requests included for the account in a UTC calendar month
schema:
type: string
example: '5000'
X-RateLimit-Monthly-Remaining:
description: Remaining requests in the account's current UTC calendar month
schema:
type: string
example: '4999'
X-RateLimit-Monthly-Reset:
description: Unix timestamp when the next UTC calendar month begins
schema:
type: string
example: '1785542400'
X-RateLimit-Monthly-Policy:
description: Monthly allowance policy. All current tiers use hard caps.
schema:
type: string
enum:
- hard
example: hard
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - API key required
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Minute rate limit or tier monthly quota exceeded. Retry-After points to the relevant minute or monthly reset.
headers:
X-RateLimit-Limit:
description: Maximum requests allowed per minute for this authentication path
schema:
type: string
example: '15'
X-RateLimit-Remaining:
description: Remaining requests in the current minute window
schema:
type: string
example: '14'
X-RateLimit-Reset:
description: Unix timestamp when the current minute window resets
schema:
type: string
example: '1699012345'
X-RateLimit-Monthly-Limit:
description: Requests included for the account in a UTC calendar month
schema:
type: string
example: '5000'
X-RateLimit-Monthly-Remaining:
description: Remaining requests in the account's current UTC calendar month
schema:
type: string
example: '4999'
X-RateLimit-Monthly-Reset:
description: Unix timestamp when the next UTC calendar month begins
schema:
type: string
example: '1785542400'
X-RateLimit-Monthly-Policy:
description: Monthly allowance policy. All current tiers use hard caps.
schema:
type: string
enum:
- hard
example: hard
X-RateLimit-Scope:
description: Which limit caused this response
schema:
type: string
enum:
- minute
- monthly
example: minute
Retry-After:
description: Whole seconds for minute limits, or an HTTP-date for monthly limits
schema:
type: string
example: '42'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
headers:
X-RateLimit-Limit:
description: Maximum requests allowed per minute for this authentication path
schema:
type: string
example: '15'
X-RateLimit-Remaining:
description: Remaining requests in the current minute window
schema:
type: string
example: '14'
X-RateLimit-Reset:
description: Unix timestamp when the current minute window resets
schema:
type: string
example: '1699012345'
X-RateLimit-Monthly-Limit:
description: Requests included for the account in a UTC calendar month
schema:
type: string
example: '5000'
X-RateLimit-Monthly-Remaining:
description: Remaining requests in the account's current UTC calendar month
schema:
type: string
example: '4999'
X-RateLimit-Monthly-Reset:
description: Unix timestamp when the next UTC calendar month begins
schema:
type: string
example: '1785542400'
X-RateLimit-Monthly-Policy:
description: Monthly allowance policy. All current tiers use hard caps.
schema:
type: string
enum:
- hard
example: hard
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: getApiV1InsiderTransactions
x-operation-id-source: derived
components:
schemas:
InsiderTransactionsResponse:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/InsiderTransaction'
nextCursor:
type:
- string
- 'null'
description: Cursor for next page, null if no more pages
hasMore:
type: boolean
description: Whether more items exist beyond this page
required:
- items
- nextCursor
- hasMore
ErrorResponse:
type: object
properties:
error:
type: string
description: Human-readable error message
example: Invalid request parameters
code:
type: string
description: Machine-readable error code
example: VALIDATION_ERROR
details:
type: object
additionalProperties: {}
description: Additional error details (e.g., field-level validation errors)
required:
- error
InsiderTransaction:
type: object
properties:
accessionNumber:
type: string
description: SEC accession number of the source filing
example: 0001234567-24-000123
filedAt:
type: string
format: date-time
description: 'SEC filing date. A calendar date encoded as midnight UTC: read only the date part (YYYY-MM-DD) and never convert it to a local time zone. For the moment the SEC accepted the filing, use acceptTs.'
example: '2024-10-30T00:00:00.000Z'
formType:
type: string
description: Form type (3, 4, 5, or their amendments)
example: '4'
personCik:
type: integer
exclusiveMinimum: 0
description: CIK of the reporting insider (person or entity)
example: 1234567
personName:
type: string
description: Name of the reporting insider
example: John Doe
companyCik:
type: integer
exclusiveMinimum: 0
description: CIK of the issuing company
example: 320193
companyName:
type:
- string
- 'null'
description: Name of the issuing company
example: Apple Inc.
ticker:
type:
- string
- 'null'
description: Primary stock ticker of the company
example: AAPL
isDirector:
type: boolean
description: Whether the insider is a director of the company
isOfficer:
type: boolean
description: Whether the insider is an officer of the company
isTenPercentOwner:
type: boolean
description: Whether the insider owns 10% or more of the company
isOther:
type: boolean
description: Other relationship to the company
officerTitle:
type:
- string
- 'null'
description: Officer title if applicable (CEO, CFO, etc.)
example: Chief Executive Officer
securityTitle:
type: string
description: Title/description of the security traded
example: Common Stock
isDerivative:
type: boolean
description: Whether this is a derivative security (options, warrants, etc.) vs equity
transactionDate:
type: string
description: Date the transaction occurred (YYYY-MM-DD)
example: '2024-10-28'
transactionCode:
type: string
description: 'SEC transaction code indicating the type of trade:
- **P** = Open market or private purchase
- **S** = Open market or private sale
- **A** = Grant, award, or other acquisition
- **M** = Exercise or conversion of derivative security
- **G** = Gift
- **F** = Tax payment via delivering securities
- **C** = Conversion of derivative security
- **D** = Disposition to the issuer
- **X** = Exercise of in-the-money derivative
- **E** = Expiration of short derivative position
- **H** = Expiration (or cancellation) of long derivative position
- **I** = Discretionary transaction
- **J** = Other acquisition or disposition
- **K** = Transaction in equity swap or similar instrument
- **L** = Small acquisition under Rule 16a-6
- **O** = Exercise of out-of-the-money derivative security
- **U** = Disposition pursuant to a tender of shares
- **V** = Transaction voluntarily reported earlier than required
- **W** = Acquisition or disposition by will or laws of descent
- **Z** = Deposit into or withdrawal from voting trust
Common codes for tracking: P (purchases), S (sales), A (awards)'
example: P
equitySwapInvolved:
type: boolean
description: Whether an equity swap was involved in the transaction
shares:
type:
- string
- 'null'
description: Number of shares involved in the transaction (as decimal string for precision)
example: '10000.0000'
pricePerShare:
type:
- string
- 'null'
description: Price per share (as decimal string for precision). Null for gifts, awards, etc.
example: '175.5000'
acquiredDisposed:
type: string
description: 'Direction of the transaction:
- **A** = Acquired (shares were added to insider''s holdings)
- **D** = Disposed (shares were removed from insider''s holdings)'
example: A
sharesAfter:
type:
- string
- 'null'
description: Shares owned after the transaction (as decimal string)
example: '150000.0000'
directIndirect:
type: string
description: 'Type of ownership:
- **D** = Direct ownership (held in insider''s own name)
- **I** = Indirect ownership (held through trust, family member, entity, etc.)'
example: D
ownershipNature:
type:
- string
- 'null'
description: Nature of indirect ownership (e.g., 'By Trust', 'By Spouse')
example: By Trust
conversionOrExercisePrice:
type:
- string
- 'null'
description: Exercise price for options/warrants (as decimal string)
example: '100.0000'
exerciseDate:
type:
- string
- 'null'
description: Date the derivative can be exercised
example: '2025-01-15'
expirationDate:
type:
- string
- 'null'
description: Expiration date of the derivative
example: '2030-01-15'
underlyingSecurityTitle:
type:
- string
- 'null'
description: Title of the underlying security for derivatives
example: Common Stock
underlyingShares:
type:
- string
- 'null'
description: Number of underlying shares covered by the derivative
example: '1000.0000'
transactionValue:
type:
- number
- 'null'
description: Total transaction value (shares * pricePerShare). Null if price is unknown.
example: 1755000
required:
- accessionNumber
- filedAt
- formType
- personCik
- personName
- companyCik
- companyName
- ticker
- isDirector
- isOfficer
- isTenPercentOwner
- isOther
- officerTitle
- securityTitle
- isDerivative
- transactionDate
- transactionCode
- equitySwapInvolved
- shares
- pricePerShare
- acquiredDisposed
- sharesAfter
- directIndirect
- ownershipNature
- conversionOrExercisePrice
- exerciseDate
- expirationDate
- underlyingSecurityTitle
- underlyingShares
- transactionValue
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: API key sent as Bearer token in Authorization header.