> ## Documentation Index
> Fetch the complete documentation index at: https://docs.finterm.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# SEC Form 4 insider transactions with a trailing 90-day open-market summary.

> Get insider transactions and holdings filed with the SEC by a company’s officers,
directors, and 10% owners, normalized into one row per reported security event.
Each row carries the owner’s role flags, the transaction code and type, shares, price,
value, post-transaction ownership, whether it was part of a pre-arranged trading plan,
and the source filing URL. A summary block reports the trailing 90-day open-market net
value with buy and sell counts, and whether that window was fully scanned.
Pass a date to get the view as of a specific filing date.



## OpenAPI

````yaml /api-reference/openapi-mintlify.json post /api/v1/ownership/insider-trades
openapi: 3.0.3
info:
  title: Finterm API
  version: 1.0.0
  description: >-
    The Finterm financial-data API. Every response is the two-key envelope:
    `finterm` (the meta header) and `data` (the published result contract), or
    `finterm` + `error` on failure.


    ## Error registry


    | Code | HTTP | Description | Message |

    | --- | --- | --- | --- |

    | `INVALID_REQUEST` | 400 | The request body failed schema validation, or
    the tool rejected the parameters as invalid or incomplete. | The request
    parameters are invalid or incomplete. |

    | `INVALID_JSON` | 400 | The request body was not valid JSON. | The request
    body was not valid JSON. |

    | `TOKEN_INVALID` | 401 | The bearer token is missing, expired, or not
    recognized. | The API key is missing, expired, or not recognized. |

    | `SUBSCRIPTION_REQUIRED` | 402 | An active Finterm Pro subscription is
    required. The envelope carries the machine-readable error.upgrade_url; after
    checkout there, retrying succeeds automatically. | An active Finterm Pro
    subscription is required. |

    | `RATE_LIMITED` | 429 | The caller has exceeded the request rate limit;
    retry later. | Too many requests; retry later. |

    | `RUNTIME_UNAVAILABLE` | 503 | The tool runtime is not available for this
    deployment. | The service is temporarily unavailable; retry later. |

    | `RUNTIME_QUEUE_FULL` | 429 | The tool runtime queue is full; retry later.
    | The service is busy; retry later. |

    | `RUNTIME_TOOL_UNAVAILABLE` | 501 | The tool is routed but not yet
    runnable. | This tool is not yet available. |

    | `RUNTIME_RUN_FAILED` | 502 | The tool runtime reported the run as a
    non-success terminal state. | The run did not complete successfully. |

    | `RUNTIME_CONTRACT_MISMATCH` | 502 | The tool runtime returned a result
    that did not match the published contract. | The service returned an
    unexpected result shape. |

    | `TOOL_EXECUTION_FAILED` | 502 | The tool executed but reported an upstream
    failure. | The tool ran but could not complete the request. |

    | `UPSTREAM_AUTH` | 502 | A data source rejected the service’s own
    credentials. A service-side configuration fault, not a caller authentication
    problem. | A data source could not be accessed due to a service
    configuration issue. |

    | `UPSTREAM_QUOTA` | 503 | A data source is over its service-side usage
    limit; retry later. | A data source is temporarily over capacity; retry
    later. |

    | `UPSTREAM_UNAVAILABLE` | 502 | A data source failed, timed out, or
    returned an unusable response; retry later. | A data source is temporarily
    unavailable; retry later. |

    | `BUNDLE_NOT_FOUND` | 404 | No bundle exists with the requested name. | No
    bundle exists with the requested name. |

    | `RUN_NOT_FOUND` | 404 | No run exists with the requested id for this
    caller. | No run exists with the requested id. |

    | `MANIFEST_NOT_READY` | 409 | The run has not completed, so the sync
    manifest is not yet available. | The run has not completed yet. |
servers:
  - url: https://api.finterm.ai
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Point Tools
    description: Single-purpose data tools (one request, one synchronous result).
  - name: Bundle Tools
    description: Composed multi-section tools served via the run lifecycle.
  - name: Account
    description: The authenticated account/entitlement read (works without Pro).
  - name: Feedback
    description: Submit bugs, questions, and feature requests (works without Pro).
paths:
  /api/v1/ownership/insider-trades:
    post:
      tags:
        - Point Tools
      summary: >-
        SEC Form 4 insider transactions with a trailing 90-day open-market
        summary.
      description: >-
        Get insider transactions and holdings filed with the SEC by a company’s
        officers,

        directors, and 10% owners, normalized into one row per reported security
        event.

        Each row carries the owner’s role flags, the transaction code and type,
        shares, price,

        value, post-transaction ownership, whether it was part of a pre-arranged
        trading plan,

        and the source filing URL. A summary block reports the trailing 90-day
        open-market net

        value with buy and sell counts, and whether that window was fully
        scanned.

        Pass a date to get the view as of a specific filing date.
      operationId: insiderTrades
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ticker:
                  type: string
                  description: Stock ticker symbol
                as_of_date:
                  type: string
                  pattern: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
                  description: Filing-date cutoff in YYYY-MM-DD format
                limit:
                  description: Maximum rows to return
                  type: integer
                  minimum: 1
                  maximum: 500
                transaction_codes:
                  description: Form 4 transaction-code filters
                  type: array
                  items:
                    type: string
                    enum:
                      - P
                      - S
                      - A
                      - M
                      - F
                      - G
                      - C
                      - W
                include_derivatives:
                  description: Include derivative-security rows
                  type: boolean
                include_holdings:
                  description: Include ownership-statement rows
                  type: boolean
              required:
                - ticker
              additionalProperties: false
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                description: The two-key success envelope.
                properties:
                  finterm:
                    $ref: '#/components/schemas/FintermMeta'
                  data:
                    $ref: '#/components/schemas/InsiderTrades'
                required:
                  - finterm
                  - data
        '400':
          description: Error (INVALID_REQUEST, INVALID_JSON).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Error (TOKEN_INVALID).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '402':
          description: Error (SUBSCRIPTION_REQUIRED).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Error (BUNDLE_NOT_FOUND, RUN_NOT_FOUND).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '409':
          description: Error (MANIFEST_NOT_READY).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Error (RATE_LIMITED, RUNTIME_QUEUE_FULL).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '501':
          description: Error (RUNTIME_TOOL_UNAVAILABLE).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '502':
          description: >-
            Error (RUNTIME_RUN_FAILED, RUNTIME_CONTRACT_MISMATCH,
            TOOL_EXECUTION_FAILED, UPSTREAM_AUTH, UPSTREAM_UNAVAILABLE).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '503':
          description: Error (RUNTIME_UNAVAILABLE, UPSTREAM_QUOTA).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      x-codeSamples:
        - lang: bash
          label: Recent insider transactions for one symbol.
          source: finterm tool insider_trades AAPL --as-of-date 2024-03-15
components:
  schemas:
    FintermMeta:
      type: object
      description: Canonical result meta header.
      properties:
        schema:
          type: string
          description: The published result contract id.
        tool:
          type: string
          description: The snake_case tool id.
        args:
          type: object
          additionalProperties: true
          description: The arguments the caller requested.
        request_id:
          type: string
          description: Server-set, ephemeral request id.
        cursor:
          type: string
          description: Opaque pagination cursor (feed tools only).
      required:
        - schema
        - tool
        - args
    InsiderTrades:
      type: object
      properties:
        ticker:
          type: string
        as_of_date:
          type: string
        trades:
          type: array
          items:
            type: object
            properties:
              ticker:
                type: string
              issuer:
                type: string
              name:
                type: string
              title:
                nullable: true
                type: string
              is_board_director:
                type: boolean
              is_officer:
                type: boolean
              is_ten_percent_owner:
                type: boolean
              record_type:
                type: string
                enum:
                  - transaction
                  - holding
              transaction_date:
                nullable: true
                type: string
              filing_date:
                type: string
              transaction_code:
                nullable: true
                type: string
              transaction_type:
                nullable: true
                type: string
              acquired_disposed:
                nullable: true
                type: string
                enum:
                  - A
                  - D
              transaction_shares:
                nullable: true
                type: number
              transaction_price_per_share:
                nullable: true
                type: number
              transaction_value:
                nullable: true
                type: number
              shares_owned_after_transaction:
                nullable: true
                type: number
              direct_or_indirect:
                nullable: true
                type: string
                enum:
                  - D
                  - I
              nature_of_ownership:
                nullable: true
                type: string
              security_title:
                type: string
              security_type:
                type: string
                enum:
                  - non_derivative
                  - derivative
              is_10b5_1_plan:
                type: boolean
              filing_url:
                type: string
            required:
              - ticker
              - issuer
              - name
              - title
              - is_board_director
              - is_officer
              - is_ten_percent_owner
              - record_type
              - transaction_date
              - filing_date
              - transaction_code
              - transaction_type
              - acquired_disposed
              - transaction_shares
              - transaction_price_per_share
              - transaction_value
              - shares_owned_after_transaction
              - direct_or_indirect
              - nature_of_ownership
              - security_title
              - security_type
              - is_10b5_1_plan
              - filing_url
            additionalProperties: false
        summary:
          type: object
          properties:
            open_market_net_value_90d:
              type: number
            buy_count_90d:
              type: number
            sell_count_90d:
              type: number
            window_complete:
              type: boolean
          required:
            - open_market_net_value_90d
            - buy_count_90d
            - sell_count_90d
            - window_complete
          additionalProperties: false
        truncated:
          type: boolean
      required:
        - ticker
        - as_of_date
        - trades
        - summary
        - truncated
      additionalProperties: false
    ErrorEnvelope:
      type: object
      description: The two-key error envelope.
      properties:
        finterm:
          $ref: '#/components/schemas/FintermMeta'
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable public error code.
            message:
              type: string
              description: Human-readable, external-clean message.
            upgrade_url:
              type: string
              description: >-
                Machine-readable upgrade URL, present only on
                SUBSCRIPTION_REQUIRED (402): complete checkout there, then
                retry; access activates automatically.
          required:
            - code
            - message
      required:
        - finterm
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A live account API key from `FINTERM_API_KEY`.

````