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

# Start making covers from the game's own stills

> Free: Patch pays for this, and it costs the creator nothing, up to a game's allowance (12 takes and 4 fixes), once the game has a release (a draft is enough): Patch sponsors cover generation. Makes up to 3 takes of each shape, always both: wide (2560 x 1440, the cover) and tall (1200 x 1800, the tall cover), key art with the project's name as its title, from 1 to 3 stills of the game (its own pictures, or stills uploaded for covers) and a subject of at most 80 characters. Answers at once with the job: takes take a minute or two each, so read it with wait. Show the person every take, and set the wide take and the tall take they pick, as the cover and the tall cover, only after they pick them. 409 covers_need_release before the game has a release; covers_allowance_used and covers_monthly_limit (an account's games a month) once used; 503 covers_paused or covers_busy (Patch's daily limit) for now.



## OpenAPI

````yaml /api-reference/openapi.json post /projects/{owner}/{slug}/covers
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/{owner}/{slug}/covers:
    post:
      tags:
        - Covers
      summary: Start making covers from the game's own stills
      description: >-
        Free: Patch pays for this, and it costs the creator nothing, up to a
        game's allowance (12 takes and 4 fixes), once the game has a release (a
        draft is enough): Patch sponsors cover generation. Makes up to 3 takes
        of each shape, always both: wide (2560 x 1440, the cover) and tall (1200
        x 1800, the tall cover), key art with the project's name as its title,
        from 1 to 3 stills of the game (its own pictures, or stills uploaded for
        covers) and a subject of at most 80 characters. Answers at once with the
        job: takes take a minute or two each, so read it with wait. Show the
        person every take, and set the wide take and the tall take they pick, as
        the cover and the tall cover, only after they pick them. 409
        covers_need_release before the game has a release; covers_allowance_used
        and covers_monthly_limit (an account's games a month) once used; 503
        covers_paused or covers_busy (Patch's daily limit) for now.
      parameters:
        - schema:
            type: string
            example: patch
          required: true
          name: owner
          in: path
        - schema:
            type: string
            example: demo-mod
          required: true
          name: slug
          in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                shape:
                  type: string
                  enum:
                    - wide
                    - tall
                    - both
                  deprecated: true
                  description: >-
                    Ignored: covers are always made in both shapes, so every
                    game gets a tall cover too. Kept so older callers still
                    work.
                stills:
                  type: array
                  items:
                    $ref: '#/components/schemas/CoverStill'
                  minItems: 1
                  maxItems: 3
                subject:
                  type: string
                  maxLength: 80
                  description: The one thing the cover shows, e.g. 'the stone colossus'
                takes:
                  type: integer
                  minimum: 1
                  maximum: 3
                  description: Takes of each shape, wide and tall, 3 by default
              required:
                - stills
                - subject
      responses:
        '201':
          description: The job, with its takes being made
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoversJob'
        '308':
          description: Renamed; follow the Location header
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Not signed in
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearer: []
components:
  schemas:
    CoverStill:
      anyOf:
        - type: object
          properties:
            screenshot:
              type: string
              format: uuid
              description: One of the game's ready pictures
          required:
            - screenshot
        - type: object
          properties:
            upload:
              type: string
              description: The SHA-256 of a still uploaded for covers
          required:
            - upload
    CoversJob:
      type: object
      properties:
        id:
          type: string
          format: uuid
        project:
          type: string
        kind:
          type: string
          enum:
            - make
            - fix
        state:
          type: string
          enum:
            - queued
            - running
            - succeeded
            - failed
            - canceled
          description: >-
            succeeded once every take has settled and at least one is ready.
            failed when none could be made: next says whether another try can
            help
        shape:
          type:
            - string
            - 'null'
        subject:
          type:
            - string
            - 'null'
        instruction:
          type:
            - string
            - 'null'
        fixes:
          type:
            - string
            - 'null'
          format: uuid
          description: The take a fix job fixes
        takes:
          type: array
          items:
            $ref: '#/components/schemas/CoverTake'
        allowance:
          $ref: '#/components/schemas/CoversAllowance'
        next:
          type: string
          description: What to do next, for the person and their agent
        created_at:
          type: string
      required:
        - id
        - project
        - kind
        - state
        - shape
        - subject
        - instruction
        - fixes
        - takes
        - allowance
        - next
        - created_at
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: version_exists
            message:
              type: string
            details: {}
          required:
            - code
            - message
      required:
        - error
    CoverTake:
      type: object
      properties:
        id:
          type: string
          format: uuid
        shape:
          type: string
          enum:
            - wide
            - tall
        state:
          type: string
          enum:
            - making
            - ready
            - failed
        url:
          type:
            - string
            - 'null'
          description: >-
            The whole cover (2560 x 1440 wide, 1200 x 1800 tall), through a
            private link that lasts an hour
        preview_url:
          type:
            - string
            - 'null'
          description: The same at card size
        width:
          type:
            - integer
            - 'null'
        height:
          type:
            - integer
            - 'null'
        fixed_from:
          type:
            - string
            - 'null'
          format: uuid
          description: The take this one fixes
        set_as:
          type:
            - string
            - 'null'
          description: cover or tall_cover when it's the project's now
        error:
          type:
            - string
            - 'null'
      required:
        - id
        - shape
        - state
        - url
        - preview_url
        - width
        - height
        - fixed_from
        - set_as
        - error
    CoversAllowance:
      type: object
      properties:
        free:
          type: boolean
          enum:
            - true
        note:
          type: string
          description: >-
            Plain words for people and agents: Patch pays, and it costs the
            creator nothing
        takes_per_game:
          type: integer
        fixes_per_game:
          type: integer
        takes_used:
          type: integer
        fixes_used:
          type: integer
        takes_left:
          type: integer
        fixes_left:
          type: integer
        stopped:
          type:
            - string
            - 'null'
          description: >-
            Why none can be made now: covers_paused, covers_need_release (no
            release yet, not even a draft) or covers_allowance_used. Null when
            they can.
      required:
        - free
        - note
        - takes_per_game
        - fixes_per_game
        - takes_used
        - fixes_used
        - takes_left
        - fixes_left
        - stopped
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: An API key (pch_...) or the token from pch login.

````

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