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

# List founders

> Every registered founder at an active startup who opted into the public directory. Contains no email addresses and no phone numbers, by design.



## OpenAPI

````yaml /openapi.json get /founders
openapi: 3.1.0
info:
  title: Unicorn Factory Lisboa Public API
  version: 1.0.0
  description: >-
    Read-only access to our startup portfolio, founder directory, and job board
    — the same data that powers the public pages of the member portal.


    **No API key. No authentication. `GET` only. Open to every origin.**


    ## Quick start


    ```js

    const BASE = 'https://api.unicornfactorylisboa.com/v1';


    const startups = await fetch(`${BASE}/startups`).then((r) => r.json());

    const founders = await fetch(`${BASE}/founders`).then((r) => r.json());

    const jobs     = await fetch(`${BASE}/jobs`).then((r) => r.json());

    ```


    ## Fetching the whole list is the intended usage


    There is no pagination, no filtering and no fetch-one-by-id endpoint, and
    that is deliberate. The lists are small — a few hundred KB gzipped even at
    several times our current size. Fetch a directory once, hold it, and filter
    client-side. A detail page such as `/startups/acme-ai` is then a `slug`
    match against data you already have, costing no extra request.


    ## Caching and freshness


    Responses are cached for one hour at our CDN and via `Cache-Control`. **An
    edit made in the portal can take up to an hour to appear here.** The
    `X-Cached-At` response header tells you when the data was last read from the
    database.


    Please let your CDN or framework honour the cache header rather than
    re-fetching per visitor. If our database is briefly unavailable we serve the
    last good copy rather than an error — a stale answer is always preferable to
    a broken page.


    ## Images


    `logo_url` and `avatar_url` point at our storage. You are welcome to hotlink
    them, but copying them into your own CDN at build time will be faster for
    your visitors. Tell us if you do, so we know not to break those URLs.


    ## Stability


    The `/v1` prefix is a promise: we will add fields, but we will not remove or
    rename one without shipping a `/v2`. Treat any field not documented here as
    unsupported and liable to disappear. If you need something that is not here,
    ask — whether we can publish it is usually a policy question rather than a
    technical one.
  contact:
    name: Unicorn Factory Lisboa
    url: https://unicornfactorylisboa.com/
servers:
  - url: https://api.unicornfactorylisboa.com/v1
    description: Production
  - url: https://btmkmdfnpsllqvkuknqj.supabase.co/functions/v1/public-api/v1
    description: Staging — test data only, contents are not real
security: []
tags:
  - name: Directories
    description: The three public directories.
paths:
  /founders:
    get:
      tags:
        - Directories
      summary: List founders
      description: >-
        Every registered founder at an active startup who opted into the public
        directory. Contains no email addresses and no phone numbers, by design.
      operationId: listFounders
      responses:
        '200':
          description: The founder directory.
          headers:
            X-Cached-At:
              description: When this data was read from the database (ISO 8601).
              schema:
                type: string
                format: date-time
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Founder'
components:
  schemas:
    Founder:
      type: object
      description: >-
        A founder who opted into the public directory. Deliberately limited to
        what a founder consents to publish: photo, name, job title, LinkedIn,
        and their startup. No email, no phone, no location and no gender.
      properties:
        id:
          type: string
          format: uuid
        startup_id:
          type: string
          format: uuid
          description: Join to `Startup.id` to group founders by company.
        first_name:
          type:
            - string
            - 'null'
        last_name:
          type:
            - string
            - 'null'
        job_title:
          type:
            - string
            - 'null'
          examples:
            - CEO
        linkedin_url:
          type:
            - string
            - 'null'
          format: uri
        avatar_url:
          type:
            - string
            - 'null'
          format: uri
        startup_name:
          type:
            - string
            - 'null'
          description: Denormalised, so you can render a founder card without joining.
        startup_logo_url:
          type:
            - string
            - 'null'
          format: uri
        startup_slug:
          type:
            - string
            - 'null'
          description: >-
            Slug of the founder’s startup — use it to link a founder card
            straight to your own /startups/<slug> page without joining back
            through /startups.
      required:
        - id
        - startup_id

````