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

> The programs to show on the website, in the order to show them: open first, then upcoming, then closed; within each, the soonest deadline first (none last), then the team's own order.

Two sources share the list. `portal` programs are the ones the member portal runs, kept up to date by their cohorts. `custom` programs are entries the team adds for the website only, such as partner programs and external calls. Every item has the same fields, so render them alike or use `source` to tell them apart.



## OpenAPI

````yaml /openapi.json get /programs
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 carry `Cache-Control: max-age=3600`. **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 call the API from your server or build and let your CDN or framework
    honour the cache header, rather than fetching from every visitor's browser.
    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`, `avatar_url` and `image_url` point at our storage (an event's
    `image_url` may point at Luma's). 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 public directories and programs.
paths:
  /programs:
    get:
      tags:
        - Directories
      summary: List programs
      description: >-
        The programs to show on the website, in the order to show them: open
        first, then upcoming, then closed; within each, the soonest deadline
        first (none last), then the team's own order.


        Two sources share the list. `portal` programs are the ones the member
        portal runs, kept up to date by their cohorts. `custom` programs are
        entries the team adds for the website only, such as partner programs and
        external calls. Every item has the same fields, so render them alike or
        use `source` to tell them apart.
      operationId: listPrograms
      responses:
        '200':
          description: The published programs.
          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/Program'
              example:
                - id: 8c1f6c2e-3b4a-4a57-9d55-0f6a2b8f4e11
                  slug: incubation
                  name: Incubation Program
                  short_description: Six months of support for early-stage startups in Lisbon.
                  application_deadline: '2026-11-30'
                  apply_url: https://portal.unicornfactorylisboa.com/apply/incubation
                  website_url: https://unicornfactorylisboa.com/incubation
                  source: portal
                  status: open
                  image_url: >-
                    https://uxmjbzuhfgalgwnaobxt.supabase.co/storage/v1/object/public/website-images/photo/2f0c9a.jpg
                  logo_url: null
                  sectors: []
                  partners: []
                - id: d4a7e9b0-6a7c-4a8e-b1f2-3c5d7e9f0a12
                  slug: demo-open-innovation-call
                  name: '[Demo] Open Innovation Call'
                  short_description: A partner's call for startups working on clean energy.
                  application_deadline: '2026-12-15'
                  apply_url: https://example.com/apply
                  website_url: https://example.com
                  source: custom
                  status: open
                  image_url: >-
                    https://uxmjbzuhfgalgwnaobxt.supabase.co/storage/v1/object/public/website-images/photo/91be4d.jpg
                  logo_url: >-
                    https://uxmjbzuhfgalgwnaobxt.supabase.co/storage/v1/object/public/website-images/logo/7a13c0.png
                  sectors:
                    - CleanTech
                  partners:
                    - id: 5e2b8c71-0d4f-4b6a-9c3e-1a2b3c4d5e6f
                      name: Example Energy
                      logo_url: >-
                        https://uxmjbzuhfgalgwnaobxt.supabase.co/storage/v1/object/public/corporate-partner-logos/example.png
                      website_url: https://example.com
components:
  schemas:
    Program:
      type: object
      description: >-
        A program on the website: one the portal runs (`source: "portal"`), or
        one we list without running it, such as a partner program or an external
        call (`source: "custom"`).
      properties:
        id:
          type: string
          format: uuid
          description: 'Stable: key on this rather than `slug`.'
        slug:
          type: string
          examples:
            - incubation
        name:
          type: string
          examples:
            - Incubation Program
        short_description:
          type:
            - string
            - 'null'
        application_deadline:
          type:
            - string
            - 'null'
          format: date
          description: >-
            Last day to apply (applications close at the end of that day, Lisbon
            time). For a portal program, the deadline of its next open cohort.
            `null` when there is none.
        apply_url:
          type:
            - string
            - 'null'
          format: uri
          description: >-
            Where to apply. For a portal program, its page on the member portal.
            `null` when the program takes no applications.
        website_url:
          type:
            - string
            - 'null'
          format: uri
          description: Where to read more about the program, when it has such a page.
        source:
          type: string
          enum:
            - portal
            - custom
          description: >-
            `portal`: a program the member portal runs, with its deadline and
            status worked out from its cohorts. `custom`: an entry the team
            lists on the website only (partner programs, external calls), with
            its status and deadline set by hand.
        status:
          type: string
          enum:
            - open
            - upcoming
            - closed
          description: >-
            `open`: taking applications now (Innovation Hubs, which admit
            members all year, are always `open`). `upcoming`: applications open
            later. `closed`: neither.
        image_url:
          type:
            - string
            - 'null'
          format: uri
          description: A photo for the program, up to 1920 px on the long side.
        logo_url:
          type:
            - string
            - 'null'
          format: uri
        sectors:
          type: array
          items:
            type: string
          description: >-
            Sectors the program focuses on, from the same list as startups'
            `industry`. Empty when it has none.
          examples:
            - - AI
              - HealthTech
        partners:
          type: array
          items:
            $ref: '#/components/schemas/ProgramPartner'
          description: Companies shown as the program's partners. Empty when it has none.
      required:
        - id
        - slug
        - name
        - source
        - status
        - sectors
        - partners
    ProgramPartner:
      type: object
      description: A company shown as a partner of a program.
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        logo_url:
          type:
            - string
            - 'null'
          format: uri
        website_url:
          type:
            - string
            - 'null'
          format: uri
      required:
        - id
        - name
        - logo_url
        - website_url

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.