> ## 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.

# Search People

> Look up people using one of five search methods. Exactly one parameter must be provided.

**Search types:**
- `name` — Fuzzy name search across both investors AND non-investor people (founders, employees). Returns up to 10 results.
- `id` — Person UUID lookup (returns 0 or 1)
- `linkedin` — LinkedIn person URL or slug
- `crunchbase` — Crunchbase person URL or slug
- `twitter` — Twitter/X URL or handle

`person_type` on each result indicates which pool the row came from
(`investor` wins when a person is in both). For full person detail, use `/person`.




## OpenAPI

````yaml openapi/openapi-people.yaml GET /person/search
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/search:
    get:
      summary: Search for a person by name or identifier
      description: >
        Look up people using one of five search methods. Exactly one parameter
        must be provided.


        **Search types:**

        - `name` — Fuzzy name search across both investors AND non-investor
        people (founders, employees). Returns up to 10 results.

        - `id` — Person UUID lookup (returns 0 or 1)

        - `linkedin` — LinkedIn person URL or slug

        - `crunchbase` — Crunchbase person URL or slug

        - `twitter` — Twitter/X URL or handle


        `person_type` on each result indicates which pool the row came from

        (`investor` wins when a person is in both). For full person detail, use
        `/person`.
      operationId: searchPerson
      parameters:
        - name: name
          in: query
          required: false
          description: Fuzzy search by person name
          schema:
            type: string
          example: jane doe
        - 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: person_type
          in: query
          required: false
          description: >
            Optional filter restricting results to one pool. `investor` keeps
            only

            people tracked as investors/angels; `company` keeps only
            non-investor

            people (founders, CEOs, employees). Omit to search both. Applies to

            both name and identifier modes — identifier lookups return empty if

            the resolved person doesn't match the requested type.
          schema:
            type: string
            enum:
              - investor
              - company
          example: investor
      responses:
        '200':
          description: Successful search results
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      people:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                              format: uuid
                            name:
                              type: string
                            linkedin_url:
                              type: string
                              nullable: true
                              format: uri
                            crunchbase_url:
                              type: string
                              nullable: true
                              format: uri
                            twitter_url:
                              type: string
                              nullable: true
                              format: uri
                            person_type:
                              type: string
                              enum:
                                - investor
                                - company
                              description: >-
                                Which pool the result came from. Mirrors the
                                request-body discriminator on POST /people.
                  meta:
                    type: object
                    properties:
                      total_count:
                        type: integer
                        example: 7
                required:
                  - success
                  - data
                  - meta
        '400':
          description: Validation error (missing or multiple parameters)
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - MISSING_SEARCH_PARAMS
                          - MULTIPLE_SEARCH_PARAMS
                          - INVALID_ID
                        example: MISSING_SEARCH_PARAMS
                      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'
        '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`

````