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

# Browse public projects, Patch's own first

> Patch's own projects come first, then everyone else's, each newest first. Each project comes with its host games and latest public release. `kind` (comma-separated) keeps projects of any of those kinds; left out, every kind but `block` (blocks' live demos, which are never games: `GET /repos/search` is the way to find blocks), and `category` (comma-separated) those in any of those categories. `host_game` (comma-separated slugs) keeps projects that use any of those games, and with several, those that use all of them come first, then those that use fewer, Patch's own first in each group; `owner` (comma-separated owners) keeps those owners' projects.



## OpenAPI

````yaml /api-reference/openapi.json get /projects
openapi: 3.1.0
info:
  title: Patch API
  version: 1.0.0
  description: >-
    The public API behind patch.gg, the desktop app and pch. Changes within v1
    are additive only. Errors are { error: { code, message, details } }; branch
    on code.
servers:
  - url: https://patch.gg/api/v1
security: []
paths:
  /projects:
    get:
      tags:
        - Projects
      summary: Browse public projects, Patch's own first
      description: >-
        Patch's own projects come first, then everyone else's, each newest
        first. Each project comes with its host games and latest public release.
        `kind` (comma-separated) keeps projects of any of those kinds; left out,
        every kind but `block` (blocks' live demos, which are never games: `GET
        /repos/search` is the way to find blocks), and `category`
        (comma-separated) those in any of those categories. `host_game`
        (comma-separated slugs) keeps projects that use any of those games, and
        with several, those that use all of them come first, then those that use
        fewer, Patch's own first in each group; `owner` (comma-separated owners)
        keeps those owners' projects.
      parameters:
        - schema:
            type: string
            example: web_game,mod
          required: false
          name: kind
          in: query
        - schema:
            type: string
            example: shooters,survival
          required: false
          name: category
          in: query
        - schema:
            type: string
          required: false
          name: q
          in: query
        - schema:
            type: string
            example: minecraft-java,hollow-knight
          required: false
          name: host_game
          in: query
        - schema:
            type: string
            example: mira,vela
          required: false
          name: owner
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
          required: false
          name: limit
          in: query
        - schema:
            type: string
            maxLength: 500
            description: The next_cursor from the previous page
          required: false
          description: The next_cursor from the previous page
          name: cursor
          in: query
      responses:
        '200':
          description: A page of projects
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectPage'
components:
  schemas:
    ProjectPage:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Project'
        next_cursor:
          type:
            - string
            - 'null'
      required:
        - data
        - next_cursor
    Project:
      type: object
      properties:
        id:
          type: string
          format: uuid
        owner:
          type: string
        owner_image:
          type:
            - string
            - 'null'
          description: >-
            The owner's picture, or null to show the figure grown from their
            handle
        slug:
          type: string
        handle:
          type: string
          example: patch/demo-mod
        name:
          type: string
        summary:
          type:
            - string
            - 'null'
        description:
          type:
            - string
            - 'null'
        kind:
          type:
            - string
            - 'null'
          enum:
            - web_game
            - pc_game
            - mod
            - block
            - asset
            - null
          description: Derived from the latest published release
        categories:
          type: array
          items:
            type: string
            enum:
              - action
              - adventure
              - racing
              - rpg
              - sandbox
              - shooter
              - simulation
              - strategy
              - survival
              - models
              - characters
              - surfaces
              - 2d
              - audio
              - fire-smoke
              - water
              - sky-weather
              - magic
              - combat-hits
              - nature-life
              - screen-looks
              - physics-destruction
              - terrain-plants
              - characters-animals
              - combat-abilities
              - building-painting
              - vehicles
              - workflows
              - blender
              - mcp-servers
              - importers
              - cli-plugins
              - skills
          description: 'What it is, for browsing: up to five'
        status:
          type: string
          enum:
            - active
            - archived
            - removed
        cover_url:
          type:
            - string
            - 'null'
        cover_levels:
          $ref: '#/components/schemas/MediaLevels'
        tall_cover_url:
          type:
            - string
            - 'null'
          description: >-
            Its tall 2:3 cover, for where games stand as tall tiles; null when
            it has none.
        tall_cover_levels:
          $ref: '#/components/schemas/MediaLevels'
        hover_clip_url:
          type:
            - string
            - 'null'
          description: >-
            A few seconds of play its cards fade into while pointed at; null
            when it has none. Play one of `hover_clip_levels`, not this.
        hover_clip_levels:
          $ref: '#/components/schemas/MediaLevels'
        min_players:
          type:
            - integer
            - 'null'
        max_players:
          type:
            - integer
            - 'null'
        source_visibility:
          type: string
          enum:
            - open_source
            - source_private
          description: >-
            What its repo's visibility means for its code: open_source for an
            open repo, where anyone can read and fork it. source_private for a
            closed source or private one, where only its org reads it, and
            Patch's review reads what it releases.
        code_license:
          type: string
          maxLength: 64
          pattern: ^[A-Za-z0-9][A-Za-z0-9.+-]*$
          example: MIT
          description: License of the code; defaults to MIT
        art_license:
          type: string
          maxLength: 64
          pattern: ^[A-Za-z0-9][A-Za-z0-9.+-]*$
          example: MIT
          description: License of original art and other assets; defaults to CC-BY-4.0
        links:
          type: object
          properties:
            discord:
              type: string
              maxLength: 300
              example: https://discord.gg/patch
            x:
              type: string
              maxLength: 300
              example: https://x.com/patchgg
            telegram:
              type: string
              maxLength: 300
              example: https://t.me/patchgg
            youtube:
              type: string
              maxLength: 300
              example: https://youtube.com/@patchgg
            twitch:
              type: string
              maxLength: 300
              example: https://twitch.tv/patchgg
            github:
              type: string
              maxLength: 300
              example: https://github.com/patchgg/demo-mod
        original_creator:
          $ref: '#/components/schemas/OriginalCreator'
        viewer_claim:
          $ref: '#/components/schemas/ViewerClaim'
        host_games:
          type: array
          items:
            type: object
            properties:
              slug:
                type: string
              name:
                type: string
              role:
                type: string
                enum:
                  - host
                  - companion
                  - related
                description: >-
                  host: the game it plays in. companion: another game it needs
                  on the player's PC. related: a game it's only related to.
              cover_url:
                type:
                  - string
                  - 'null'
                description: The game's own cover art, if Patch has it
              store_urls:
                type: array
                items:
                  type: string
                description: >-
                  Where to get it, in order, as on the host game: the first is
                  its top store, the one shown where there's room for only one.
            required:
              - slug
              - name
              - role
              - cover_url
              - store_urls
        latest_release:
          type:
            - object
            - 'null'
          properties:
            version:
              type: string
            channel:
              type: string
            published_at:
              type:
                - string
                - 'null'
            trust_tier:
              type: string
              enum:
                - sandboxed
                - game_files_only
                - runs_code
              description: >-
                What the release can do on the player's PC, worked out from its
                recipe and files: runs sandboxed in Patch, changes game files
                only, or runs code. Drives review.
            block:
              type:
                - object
                - 'null'
              additionalProperties: {}
              description: >-
                For a block's live demo, its recipe's block section with the
                controls' defaults filled in: the controls, presets and triggers
                its page draws (https://patch.gg/schemas/recipe/v1.json). Null
                for anything else.
          required:
            - version
            - channel
            - published_at
            - trust_tier
            - block
        team_release:
          type:
            - object
            - 'null'
          properties:
            version:
              type: string
            channel:
              type: string
            published_at:
              type:
                - string
                - 'null'
            served:
              type: boolean
              description: >-
                Whether it's what the game host serves. False for a private
                release of a game with a public one, which stays on the public
                one, for its team too.
          required:
            - version
            - channel
            - published_at
            - served
          description: >-
            Only for those who manage the project: its newest published release
            on any channel. `urls` go to what the game host serves, which is
            this one unless a public one exists. `latest_release` is what
            everyone else gets.
        urls:
          $ref: '#/components/schemas/ProjectUrls'
        created_at:
          type: string
        updated_at:
          type: string
      required:
        - id
        - owner
        - owner_image
        - slug
        - handle
        - name
        - summary
        - description
        - kind
        - categories
        - status
        - cover_url
        - cover_levels
        - tall_cover_url
        - tall_cover_levels
        - hover_clip_url
        - hover_clip_levels
        - min_players
        - max_players
        - source_visibility
        - code_license
        - art_license
        - links
        - original_creator
        - host_games
        - latest_release
        - created_at
        - updated_at
    MediaLevels:
      type: array
      items:
        type: object
        properties:
          width:
            type: integer
          url:
            type: string
        required:
          - width
          - url
      description: >-
        Smaller copies of a picture (WebP) or a clip (MP4, H.264, without
        sound), smallest first, each at its own address that never changes. Show
        the smallest that's sharp where it goes. Empty for animated pictures,
        for flat art and short clips with no smaller copy, and for media from
        before Patch made copies until theirs are made: then use the file
        itself.
    OriginalCreator:
      type:
        - object
        - 'null'
      properties:
        name:
          type: string
        github_login:
          type:
            - string
            - 'null'
          description: >-
            Their GitHub login when Patch has one, for a link to their GitHub
            profile
        claimed:
          type: boolean
          description: >-
            Whether they've claimed it: once they have, it's on their own
            account
        claimable:
          type: boolean
          description: >-
            Patch knows their GitHub account and they haven't claimed it: signed
            in with that account, claiming moves it to them at once
      required:
        - name
        - github_login
        - claimed
        - claimable
      description: >-
        Who first made it, when that's someone other than whoever published it
        on Patch: they can claim it (`POST /projects/{owner}/{slug}/claim`).
        Null when its owner made it. Everyone else who worked on it is credited
        in its releases' recipes.
    ViewerClaim:
      type: object
      properties:
        can_claim:
          type: boolean
          description: >-
            It has an original creator who hasn't claimed it, and the viewer
            isn't in its org
        github_linked:
          type: boolean
          description: Whether the viewer's Patch account has a GitHub account linked
        github_login:
          type:
            - string
            - 'null'
          description: The viewer's linked GitHub login, when Patch knows it
        github_matches:
          type: boolean
          description: >-
            Their GitHub account is the original creator's, so claiming moves it
            to them at once. Otherwise a claim waits for Patch's staff.
        pending:
          type: boolean
          description: They've asked, and staff haven't answered yet
      required:
        - can_claim
        - github_linked
        - github_login
        - github_matches
        - pending
      description: >-
        For someone signed in, on single-project responses: whether they can
        claim it, and how. Left out for anyone else.
    ProjectUrls:
      type: object
      properties:
        page:
          type: string
          description: Its game page on Patch
        play:
          type:
            - string
            - 'null'
          description: Where it plays on Patch, while a browser game version is live
        game:
          type:
            - string
            - 'null'
          description: >-
            The live browser game, or block's demo, on the game host, its own
            origin (https://<site>-<env>.patchusercontent.com/). Null where
            there's no game host.
      required:
        - page
        - play
        - game
      description: Where it is on Patch. On single-project responses, not in lists.

````

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