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

# Get Person Deals

> Retrieve all deals a person has participated in as an investor (angel deals + lead/firm deals)
using any supported identifier format. The API intelligently detects the identifier type and queries accordingly.

Provide ONE of the following query parameters to identify the person:
- `id` - Person UUID
- `linkedin` - LinkedIn person URL
- `crunchbase` - Crunchbase person URL
- `twitter` - Twitter/X URL

The response includes the person's investment deals with pagination.




## OpenAPI

````yaml openapi/openapi-people.yaml GET /person/deals
openapi: 3.0.3
info:
  title: Fundable People API
  description: >
    API for searching and retrieving people (founders, executives, investors)
    with cross-type filtering.


    ## Authentication

    All API requests require authentication using an API key in the
    Authorization header.


    ## Rate Limits

    API usage is tracked and may be subject to monthly limits depending on your
    API key tier.


    ## Endpoint shape (POST)

    `POST /people` accepts a JSON body with four filter sections. There is no
    `type`

    discriminator — filter intent is implicit in which sections have data, so
    cross-type queries

    (e.g. "founders at fintech companies who also invested in AI startups") work
    natively.


    Filter sections:

    - `identifiers` — look up specific people by UUID, LinkedIn, Crunchbase, or
    Twitter

    - `person` — role, contact info available, job title, education, prior
    employers

    - `company` — current employer attributes (industry, location, IPO status,
    funding, etc.).
      Includes nested `company.latest_deal` for the current employer's most recent round.
    - `investor` — investor firm attributes for people who invest. Includes
    nested
      `investor.deals` covering both the person's deal activity (size, date, lead-only,
      angel/institutional) AND the attributes of the portfolio companies they've invested in
      (industry, location, IPO status, semantic search).

    Plus pagination/sort at the top level: `page`, `page_size`, `sort_by`.


    ## Implicit constraints

    The endpoint inspects which sections have data and emits implicit WHERE
    clauses:


    | When you set | Backend constraint |

    |---|---|

    | Any `company.*` field (including `company.latest_deal.*`) | Person must
    have a current employer |

    | Any `investor.*` field (including `investor.deals.*`) | Person must be an
    investor |

    | Both sides | Both apply (true cross-type query) |

    | Neither | No constraint — paginated everyone |


    The top-level `person_type` field (`"company"`, `"investor"`, or `"any"` —
    default `"any"`)

    explicitly forces one population regardless of which filter blocks are
    present. Use it when

    you want only company-people (founders/employees) or only investor-people
    without having to

    add a filter block to imply it.


    ## Semantic search

    Two independent natural-language search fields. Think of each as a flexible
    replacement for

    an industry tag: use them to target a **niche industry or specific product
    type** by

    describing what a company does — its product, technology, or business model
    — rather than

    other attributes like stage, location, or funding (apply those with the
    dedicated filter

    fields instead):

    - `company.search_query` — semantic match against the person's current
    employer

    - `investor.deals.search_query` — semantic match against companies the
    person has invested in


    Both can fire simultaneously. Each accepts an optional `min_relevance`
    (0..1) to filter out

    weak matches. When semantic search is active, results are ordered by
    relevance and any

    explicit `sort_by` is ignored.


    ## Response shape

    Every row carries every field. Investor-context aggregates (deal counts, top
    industries / locations / round types,

    most recent deal date) live under a single `investor_highlights` object. For
    non-investors,

    `investor_highlights` is `null` and `is_investor` / `is_angel` /
    `has_led_deal` are `false`.

    Pure employees and pure angels have the same shape — only the values differ.


    ## Person identifiers (for `/person`)

    Detail endpoint uses query parameters — exactly one of `?id=`, `?linkedin=`,

    `?crunchbase=`, or `?twitter=`. Examples:

    - `GET /person?id=550e8400-e29b-41d4-a716-446655440000`

    - `GET /person?linkedin=https://linkedin.com/in/jane-doe-12345`

    - `GET /person?crunchbase=https://crunchbase.com/person/jane-doe`

    - `GET /person?twitter=https://x.com/janedoe`


    ## Money units

    All monetary values in request and response are in **actual USD** (not
    millions). For example,

    `total_raised_min: 10000000` means $10M.
  version: 1.0.0
  contact:
    name: Fundable API Support
    url: jacob@tryfundable.ai
  license:
    name: Proprietary
    url: https://www.tryfundable.ai/terms/privacy/
servers:
  - url: https://www.tryfundable.ai/api/v1
    description: Production server
security:
  - bearerAuth: []
tags:
  - name: people
    description: People search and detail operations
paths:
  /person/deals:
    get:
      summary: Get deals a person participated in (as an investor) by identifier
      description: >
        Retrieve all deals a person has participated in as an investor (angel
        deals + lead/firm deals)

        using any supported identifier format. The API intelligently detects the
        identifier type and queries accordingly.


        Provide ONE of the following query parameters to identify the person:

        - `id` - Person UUID

        - `linkedin` - LinkedIn person URL

        - `crunchbase` - Crunchbase person URL

        - `twitter` - Twitter/X URL


        The response includes the person's investment deals with pagination.
      operationId: getPersonDeals
      parameters:
        - name: id
          in: query
          required: false
          description: Person UUID
          schema:
            type: string
            format: uuid
          example: 550e8400-e29b-41d4-a716-446655440000
        - name: linkedin
          in: query
          required: false
          description: LinkedIn person URL
          schema:
            type: string
          example: https://www.linkedin.com/in/eladgil/
        - name: crunchbase
          in: query
          required: false
          description: Crunchbase person URL
          schema:
            type: string
          example: https://crunchbase.com/person/jane-doe
        - name: twitter
          in: query
          required: false
          description: Twitter/X URL
          schema:
            type: string
          example: https://x.com/janedoe
        - name: page
          in: query
          description: Page number (0-based)
          required: false
          schema:
            type: integer
            minimum: 0
            default: 0
          example: 0
        - name: page_size
          in: query
          description: Number of results per page (1-500)
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 10
          example: 10
      responses:
        '200':
          description: Successful response with the person's deals
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      deals:
                        type: array
                        items:
                          type: object
                          description: >-
                            Deal record (same shape as deals returned by
                            `/api/v1/company/deals`)
                  meta:
                    type: object
                    properties:
                      total_count:
                        type: integer
                        example: 11
                      page:
                        type: integer
                        example: 0
                      page_size:
                        type: integer
                        example: 10
                required:
                  - success
                  - data
                  - meta
        '400':
          description: Validation error (missing or invalid identifier)
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - MISSING_IDENTIFIER
                          - INVALID_ID
                        example: MISSING_IDENTIFIER
                      message:
                        type: string
                      details:
                        type: object
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
        '402':
          description: Insufficient credits to complete request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InsufficientCreditsError'
        '404':
          description: No person found matching the provided identifier
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - PERSON_NOT_FOUND
                        example: PERSON_NOT_FOUND
                      message:
                        type: string
                        example: Person not found
        '429':
          description: Rate limit exceeded (per-minute)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying
              schema:
                type: integer
                example: 60
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
components:
  schemas:
    AuthError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - AUTH_ERROR
                - INVALID_API_KEY
                - INACTIVE_API_KEY
            message:
              type: string
            details:
              type: object
              properties:
                help:
                  type: string
    InsufficientCreditsError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: INSUFFICIENT_CREDITS
            message:
              type: string
            details:
              type: object
              properties:
                credits_needed:
                  type: integer
                  nullable: true
                monthly_credits_remaining:
                  type: integer
                purchased_credits_remaining:
                  type: integer
                help:
                  type: string
      required:
        - error
    RateLimitError:
      type: object
      description: Per-minute API rate limit exceeded
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: RATE_LIMIT_EXCEEDED
            message:
              type: string
              example: Rate limit exceeded. Maximum 200 requests per minute.
            details:
              type: object
              properties:
                limit:
                  type: integer
                  example: 200
                window:
                  type: string
                  example: 60 seconds
                help:
                  type: string
      required:
        - error
    ServerError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: INTERNAL_SERVER_ERROR
            message:
              type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: |
        API key authentication using Bearer token format.
        Format: `Authorization: Bearer vg_your_api_key_here`

````