# DO NOT EDIT THIS FILE. It is generated from a template. Changes should be
# proposed against the template.
---
openapi: '3.0.0'
info:
  title: Patchwork API
  description: >
    Patchwork is a web-based patch tracking system designed to facilitate the
    contribution and management of contributions to an open-source project.
  contact:
    email: patchwork@lists.ozlabs.org
  license:
    name: GPL v2 License
    url: https://www.gnu.org/licenses/gpl-2.0.html
  version: '1.1'
paths:
  /api/1.1/:
    get:
      description: List API resources.
      operationId: api_list
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Index'
      tags:
        - api
  /api/1.1/bundles/:
    get:
      description: List bundles.
      operationId: bundles_list
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
        - in: query
          name: project
          description: An ID or linkname of a project to filter bundles by.
          schema:
            title: ''
            type: string
        - in: query
          name: owner
          description: An ID or username of a user to filter bundles by.
          schema:
            title: ''
            type: string
        - in: query
          name: public
          description: Show only public (`true`) or private (`false`) bundles.
          schema:
            title: ''
            type: string
            enum:
              - 'true'
              - 'false'
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Bundle'
      tags:
        - bundles
  /api/1.1/bundles/{id}/:
    get:
      description: Show a bundle.
      operationId: bundles_read
      parameters:
        - in: path
          name: id
          required: true
          description: A unique integer value identifying this bundle.
          schema:
            title: ID
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bundle'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - bundles
  /api/1.1/covers/:
    get:
      description: List cover letters.
      operationId: covers_list
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
        - $ref: '#/components/parameters/BeforeFilter'
        - $ref: '#/components/parameters/SinceFilter'
        - in: query
          name: project
          description: >
            An ID or linkname of a project to filter cover letters by.
          schema:
            title: ''
            type: string
        - in: query
          name: series
          description: An ID of a series to filter cover letters by.
          schema:
            title: ''
            type: string
        - in: query
          name: submitter
          description: >
            An ID or email address of a person to filter cover letters by.
          schema:
            title: ''
            type: string
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CoverLetterList'
      tags:
        - covers
  /api/1.1/covers/{id}/:
    get:
      description: Show a cover letter.
      operationId: covers_read
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this cover letter.
          required: true
          schema:
            title: ID
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoverLetterDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - covers
  /api/1.1/covers/{id}/comments/:
    get:
      description: List comments
      operationId: cover_comments_list
      parameters:
        - in: path
          name: id
          description: >
            A unique integer value identifying the parent cover letter.
          required: true
          schema:
            title: ID
            type: integer
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Comment'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - comments
  /api/1.1/events/:
    get:
      description: List events.
      operationId: events_list
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
        - $ref: '#/components/parameters/BeforeFilter'
        - $ref: '#/components/parameters/SinceFilter'
        - in: query
          name: project
          description: An ID or linkname of a project to filter events by.
          schema:
            title: ''
            type: string
        - in: query
          name: category
          description: An event category to filter events by.
          schema:
            title: ''
            type: string
            enum:
              - cover-created
              - patch-created
              - patch-completed
              - patch-state-changed
              - patch-delegated
              - check-created
              - series-created
              - series-completed
        - in: query
          name: series
          description: An ID of a series to filter events by.
          schema:
            title: ''
            type: integer
        - in: query
          name: patch
          description: An ID of a patch to filter events by.
          schema:
            title: ''
            type: integer
        - in: query
          name: cover
          description: An ID of a cover letter to filter events by.
          schema:
            title: ''
            type: integer
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  oneOf:
                    - $ref: '#/components/schemas/EventCoverCreated'
                    - $ref: '#/components/schemas/EventPatchCreated'
                    - $ref: '#/components/schemas/EventPatchCompleted'
                    - $ref: '#/components/schemas/EventPatchStateChanged'
                    - $ref: '#/components/schemas/EventPatchDelegated'
                    - $ref: '#/components/schemas/EventCheckCreated'
                    - $ref: '#/components/schemas/EventSeriesCreated'
                    - $ref: '#/components/schemas/EventSeriesCompleted'
                  discriminator:
                    propertyName: category
                    mapping:
                      cover-created: '#/components/schemas/EventCoverCreated'
                      patch-created: '#/components/schemas/EventPatchCreated'
                      patch-completed: >
                        '#/components/schemas/EventPatchCompleted'
                      patch-state-changed: >
                        '#/components/schemas/EventPatchStateChanged'
                      patch-delegated: >
                        '#/components/schemas/EventPatchDelegated'
                      check-created: '#/components/schemas/EventCheckCreated'
                      series-created: '#/components/schemas/EventSeriesCreated'
                      series-completed: >
                        '#/components/schemas/EventSeriesCompleted'
      tags:
        - events
  /api/1.1/patches/:
    get:
      description: List patches.
      operationId: patches_list
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
        - $ref: '#/components/parameters/BeforeFilter'
        - $ref: '#/components/parameters/SinceFilter'
        - in: query
          name: project
          description: An ID or linkname of a project to filter patches by.
          schema:
            title: ''
            type: string
        - in: query
          name: series
          description: An ID of a series to filter patches by.
          schema:
            title: ''
            type: integer
        - in: query
          name: submitter
          description: >
            An ID or email address of a person to filter patches by.
          schema:
            title: ''
            type: string
        - in: query
          name: delegate
          description: An ID or username of a user to filter patches by.
          schema:
            title: ''
            type: string
        - in: query
          name: state
          description: A slug representation of a state to filter patches by.
          schema:
            title: ''
            type: string
        - in: query
          name: archived
          description: >
            Show only archived (`true`) or non-archived (`false`) patches.
          schema:
            title: ''
            type: string
            enum:
              - 'true'
              - 'false'
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PatchList'
      tags:
        - patches
  /api/1.1/patches/{id}/:
    get:
      description: Show a patch.
      operationId: patches_read
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this patch.
          required: true
          schema:
            title: ID
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatchDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - patches
    patch:
      description: Update a patch (partial).
      operationId: patches_partial_update
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this patch.
          required: true
          schema:
            title: ID
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/Patch'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatchDetail'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPatchUpdate'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - patches
    put:
      description: Update a patch.
      operationId: patches_update
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this patch.
          required: true
          schema:
            title: ID
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/Patch'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatchDetail'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPatchUpdate'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - patches
  /api/1.1/patches/{id}/comments/:
    get:
      description: List comments
      operationId: patch_comments_list
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying the parent patch.
          required: true
          schema:
            title: ID
            type: integer
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Comment'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - comments
  /api/1.1/patches/{patch_id}/checks/:
    get:
      description: List checks.
      operationId: checks_list
      parameters:
        - in: path
          name: patch_id
          description: A unique integer value identifying the parent patch.
          required: true
          schema:
            title: Patch ID
            type: integer
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
        - $ref: '#/components/parameters/BeforeFilter'
        - $ref: '#/components/parameters/SinceFilter'
        - in: query
          name: user
          description: An ID or username of a user to filter checks by.
          schema:
            title: ''
            type: string
        - in: query
          name: state
          description: A check state to filter checks by.
          schema:
            title: ''
            type: string
            enum:
              - pending
              - success
              - warning
              - fail
        - in: query
          name: context
          description: A check context to filter checks by.
          schema:
            title: ''
            type: string
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Check'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - checks
    post:
      description: Create a check.
      operationId: checks_create
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - in: path
          name: patch_id
          description: A unique integer value identifying the parent patch.
          required: true
          schema:
            title: Patch ID
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/Check'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Check'
        '400':
          description: Invalid Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCheckCreate'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - checks
  /api/1.1/patches/{patch_id}/checks/{check_id}/:
    get:
      description: Show a check.
      operationId: checks_read
      parameters:
        - in: path
          name: patch_id
          description: A unique integer value identifying the parent patch.
          required: true
          schema:
            title: Patch ID
            type: integer
        - in: path
          name: check_id
          description: A unique integer value identifying this check.
          required: true
          schema:
            title: Check ID
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Check'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - checks
  /api/1.1/people/:
    get:
      description: List people.
      operationId: people_list
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Person'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - people
  /api/1.1/people/{id}/:
    get:
      description: Show a person.
      operationId: people_read
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this person.
          required: true
          schema:
            title: ID
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Person'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - people
  /api/1.1/projects/:
    get:
      description: List projects.
      operationId: projects_list
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Project'
      tags:
        - projects
  /api/1.1/projects/{id}/:
    get:
      description: Show a project.
      operationId: projects_read
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this project.
          required: true
          schema:
            title: ID
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - projects
    patch:
      description: Update a project (partial).
      operationId: projects_partial_update
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this project.
          required: true
          schema:
            title: ID
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/Project'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorProjectUpdate'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - projects
    put:
      description: Update a project.
      operationId: projects_update
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this project.
          required: true
          schema:
            title: ID
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/Project'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorProjectUpdate'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - projects
  /api/1.1/series/:
    get:
      description: List series.
      operationId: series_list
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
        - $ref: '#/components/parameters/BeforeFilter'
        - $ref: '#/components/parameters/SinceFilter'
        - in: query
          name: submitter
          description: An ID or email address of a person to filter series by.
          schema:
            title: ''
            type: string
        - in: query
          name: project
          description: An ID or linkname of a project to filter series by.
          schema:
            title: ''
            type: string
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Series'
      tags:
        - series
  /api/1.1/series/{id}/:
    get:
      description: Show a series.
      operationId: series_read
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this series.
          required: true
          schema:
            title: ID
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Series'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - series
  /api/1.1/users/:
    get:
      description: List users.
      operationId: users_list
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/Order'
        - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: ''
          headers:
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - users
  /api/1.1/users/{id}/:
    get:
      description: Show a user.
      operationId: users_read
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this user.
          required: true
          schema:
            title: ID
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - users
    patch:
      description: Update a user (partial).
      operationId: users_partial_update
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this user.
          required: true
          schema:
            title: ID
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/User'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorUserUpdate'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - users
    put:
      description: Update a user.
      operationId: users_update
      security:
        - basicAuth: []
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          description: A unique integer value identifying this user.
          required: true
          schema:
            title: ID
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/User'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorUserUpdate'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
        - users
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
    apiKeyAuth:
      type: http
      scheme: bearer
  parameters:
    Page:
      in: query
      name: page
      description: A page number within the paginated result set.
      schema:
        title: Page
        type: integer
    PageSize:
      in: query
      name: per_page
      description: Number of results to return per page.
      schema:
        title: Page size
        type: integer
    Order:
      in: query
      name: order
      description: Which field to use when ordering the results.
      schema:
        title: Ordering
        type: string
    Search:
      in: query
      name: q
      description: A search term.
      schema:
        title: Search
        type: string
    BeforeFilter:
      in: query
      name: before
      description: Latest date-time to retrieve results for.
      schema:
        title: ''
        type: string
    SinceFilter:
      in: query
      name: since
      description: Earliest date-time to retrieve results for.
      schema:
        title: ''
        type: string
  headers:
    Link:
      description: >
        Links to related resources, in the format defined by
        [RFC 5988](https://tools.ietf.org/html/rfc5988#section-5).
        This will include a link with relation type `next` to the
        next page, if there is a next page.
      schema:
        type: string
  requestBodies:
    Check:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CheckCreate'
        multipart/form-data:
          schema:
            $ref: '#/components/schemas/CheckCreate'
        application/x-www-form-urlencoded:
          schema:
            $ref: '#/components/schemas/CheckCreate'
    Patch:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PatchUpdate'
        multipart/form-data:
          schema:
            $ref: '#/components/schemas/PatchUpdate'
        application/x-www-form-urlencoded:
          schema:
            $ref: '#/components/schemas/PatchUpdate'
    Project:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Project'
        multipart/form-data:
          schema:
            $ref: '#/components/schemas/Project'
        application/x-www-form-urlencoded:
          schema:
            $ref: '#/components/schemas/Project'
    User:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/User'
        multipart/form-data:
          schema:
            $ref: '#/components/schemas/User'
        application/x-www-form-urlencoded:
          schema:
            $ref: '#/components/schemas/User'
  schemas:
    Index:
      type: object
      properties:
        bundles:
          title: Bundles URL
          type: string
          format: uri
          readOnly: true
        covers:
          title: Covers URL
          type: string
          format: uri
          readOnly: true
        events:
          title: Events URL
          type: string
          format: uri
          readOnly: true
        patches:
          title: Patches URL
          type: string
          format: uri
          readOnly: true
        people:
          title: People URL
          type: string
          format: uri
          readOnly: true
        projects:
          title: Projects URL
          type: string
          format: uri
          readOnly: true
        users:
          title: Users URL
          type: string
          format: uri
          readOnly: true
    Bundle:
      required:
        - name
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
        project:
          $ref: '#/components/schemas/ProjectEmbedded'
        name:
          title: Name
          type: string
          minLength: 1
          maxLength: 50
        owner:
          type: object
          title: Owner
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/UserEmbedded'
        patches:
          type: array
          items:
            $ref: '#/components/schemas/PatchEmbedded'
          readOnly: true
          uniqueItems: true
        public:
          title: Public
          type: boolean
        mbox:
          title: Mbox
          type: string
          format: uri
          readOnly: true
    Check:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: Url
          type: string
          format: uri
          readOnly: true
        user:
          $ref: '#/components/schemas/UserEmbedded'
        date:
          title: Date
          type: string
          format: iso8601
          readOnly: true
        state:
          title: State
          description: The state of the check.
          type: string
          enum:
            - pending
            - success
            - warning
            - fail
        target_url:
          title: Target URL
          description: >
            The target URL to associate with this check. This should be
            specific to the patch.
          type: string
          format: uri
          maxLength: 200
          nullable: true
        context:
          title: Context
          description: >
            A label to discern check from checks of other testing systems.
          type: string
          pattern: ^[-a-zA-Z0-9_]+$
          minLength: 1
          maxLength: 255
        description:
          title: Description
          description: A brief description of the check.
          type: string
          nullable: true
    CheckCreate:
      type: object
      required:
       - state
      properties:
        state:
          title: State
          description: The state of the check.
          type: string
          enum:
            - pending
            - success
            - warning
            - fail
        target_url:
          title: Target URL
          description:
            The target URL to associate with this check. This should be
            specific to the patch.
          type: string
          format: uri
          maxLength: 200
          nullable: true
        context:
          title: Context
          description: >
            A label to discern check from checks of other testing systems.
          type: string
          pattern: ^[-a-zA-Z0-9_]+$
          minLength: 1
          maxLength: 255
        description:
          title: Description
          description: A brief description of the check.
          type: string
          nullable: true
    Comment:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
        msgid:
          title: Message ID
          type: string
          readOnly: true
          minLength: 1
          maxLength: 255
        date:
          title: Date
          type: string
          format: iso8601
          readOnly: true
        subject:
          title: Subject
          type: string
          readOnly: true
        submitter:
          type: object
          title: Submitter
          allOf:
            - $ref: '#/components/schemas/PersonEmbedded'
        content:
          title: Content
          type: string
          readOnly: true
          minLength: 1
        headers:
          title: Headers
          type: array
          items:
            type: string
          readOnly: true
    CoverLetterList:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
        project:
          $ref: '#/components/schemas/ProjectEmbedded'
        msgid:
          title: Message ID
          type: string
          readOnly: true
          minLength: 1
          maxLength: 255
        date:
          title: Date
          type: string
          format: iso8601
          readOnly: true
        name:
          title: Name
          type: string
          readOnly: true
          minLength: 1
          maxLength: 255
        submitter:
          type: object
          title: Submitter
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/PersonEmbedded'
        mbox:
          title: Mbox
          type: string
          format: uri
          readOnly: true
        series:
          type: array
          items:
            $ref: '#/components/schemas/SeriesEmbedded'
          readOnly: true
        comments:
          title: Comments
          type: string
          format: uri
          readOnly: true
    CoverLetterDetail:
      allOf:
        - $ref: '#/components/schemas/CoverLetterList'
        - properties:
            headers:
              title: Headers
              type: array
              items:
                type: string
              readOnly: true
            content:
              title: Content
              type: string
              readOnly: true
              minLength: 1
    EventBase:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        category:
          title: Category
          description: The category of the event.
          type: string
          readOnly: true
        project:
          $ref: '#/components/schemas/ProjectEmbedded'
        date:
          title: Date
          description: The time this event was created.
          type: string
          format: iso8601
          readOnly: true
        payload:
          type: object
    EventCoverCreated:
      allOf:
        - $ref: '#/components/schemas/EventBase'
        - type: object
          properties:
            category:
              enum:
                - cover-created
            payload:
              properties:
                cover:
                  title: Cover
                  type: string
                  readOnly: true
    EventPatchCreated:
      allOf:
        - $ref: '#/components/schemas/EventBase'
        - type: object
          properties:
            category:
              enum:
                - patch-created
            payload:
              properties:
                patch:
                  $ref: '#/components/schemas/PatchEmbedded'
    EventPatchCompleted:
      allOf:
        - $ref: '#/components/schemas/EventBase'
        - type: object
          properties:
            category:
              enum:
                - patch-completed
            payload:
              properties:
                patch:
                  $ref: '#/components/schemas/PatchEmbedded'
                series:
                  $ref: '#/components/schemas/SeriesEmbedded'
    EventPatchStateChanged:
      allOf:
        - $ref: '#/components/schemas/EventBase'
        - type: object
          properties:
            category:
              enum:
                - patch-state-changed
            payload:
              properties:
                patch:
                  $ref: '#/components/schemas/PatchEmbedded'
                previous_state:
                  title: Previous state
                  type: string
                current_state:
                  title: Current state
                  type: string
    EventPatchDelegated:
      allOf:
        - $ref: '#/components/schemas/EventBase'
        - type: object
          properties:
            category:
              enum:
                - patch-delegated
            payload:
              properties:
                patch:
                  $ref: '#/components/schemas/PatchEmbedded'
                previous_delegate:
                  allOf:
                    - $ref: '#/components/schemas/UserEmbedded'
                    - title: Previous delegate
                current_delegate:
                  allOf:
                    - $ref: '#/components/schemas/UserEmbedded'
                    - title: Current delegate
    EventCheckCreated:
      allOf:
        - $ref: '#/components/schemas/EventBase'
        - type: object
          properties:
            category:
              enum:
                - check-created
            payload:
              properties:
                patch:
                  $ref: '#/components/schemas/PatchEmbedded'
                check:
                  $ref: '#/components/schemas/CheckEmbedded'
    EventSeriesCreated:
      allOf:
        - $ref: '#/components/schemas/EventBase'
        - type: object
          properties:
            category:
              enum:
                - series-created
            payload:
              properties:
                series:
                  $ref: '#/components/schemas/SeriesEmbedded'
    EventSeriesCompleted:
      allOf:
        - $ref: '#/components/schemas/EventBase'
        - type: object
          properties:
            category:
              enum:
                - series-completed
            payload:
              properties:
                series:
                  $ref: '#/components/schemas/SeriesEmbedded'
    PatchList:
      required:
        - state
        - delegate
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
        project:
          $ref: '#/components/schemas/ProjectEmbedded'
        msgid:
          title: Message ID
          type: string
          readOnly: true
          minLength: 1
          maxLength: 255
        date:
          title: Date
          type: string
          format: iso8601
          readOnly: true
        name:
          title: Name
          type: string
          readOnly: true
          minLength: 1
          maxLength: 255
        commit_ref:
          title: Commit ref
          type: string
          maxLength: 255
          nullable: true
        pull_url:
          title: Pull URL
          type: string
          format: uri
          maxLength: 255
          nullable: true
        state:
          title: State
          type: string
        archived:
          title: Archived
          type: boolean
        hash:
          title: Hash
          type: string
          readOnly: true
          minLength: 1
        submitter:
          type: object
          title: Submitter
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/PersonEmbedded'
        delegate:
          type: object
          title: Delegate
          nullable: true
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/UserEmbedded'
        mbox:
          title: Mbox
          type: string
          format: uri
          readOnly: true
        series:
          type: array
          items:
            $ref: '#/components/schemas/SeriesEmbedded'
          readOnly: true
        comments:
          title: Comments
          type: string
          format: uri
          readOnly: true
        check:
          title: Check
          type: string
          readOnly: true
          enum:
            - pending
            - success
            - warning
            - fail
        checks:
          title: Checks
          type: string
          format: uri
          readOnly: true
        tags:
          title: Tags
          type: array
          items:
            type: string
          readOnly: true
    PatchDetail:
      allOf:
        - $ref: '#/components/schemas/PatchList'
        - properties:
            headers:
              title: Headers
              type: array
              items:
                type: string
              readOnly: true
            content:
              title: Content
              type: string
              readOnly: true
              minLength: 1
            diff:
              title: Diff
              type: string
              readOnly: true
              minLength: 1
            prefixes:
              title: Prefixes
              type: array
              items:
                type: string
              readOnly: true
    PatchUpdate:
      type: object
      properties:
        commit_ref:
          title: Commit ref
          type: string
          maxLength: 255
          nullable: true
        pull_url:
          title: Pull URL
          type: string
          format: uri
          maxLength: 255
          nullable: true
        state:
          title: State
          type: string
        archived:
          title: Archived
          type: boolean
        delegate:
          title: Delegate
          type: integer
          nullable: true
    Person:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        name:
          title: Name
          type: string
          readOnly: true
          minLength: 1
          maxLength: 255
        email:
          title: Email
          type: string
          format: email
          readOnly: true
          minLength: 1
          maxLength: 255
        user:
          type: object
          title: User
          nullable: true
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/UserEmbedded'
    Project:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        name:
          title: Name
          type: string
          readOnly: true
          minLength: 1
          maxLength: 255
        link_name:
          title: Link name
          type: string
          readOnly: true
          minLength: 1
          maxLength: 255
        list_id:
          title: List ID
          type: string
          readOnly: true
          minLength: 1
          maxLength: 255
        list_email:
          title: List email
          type: string
          format: email
          readOnly: true
          minLength: 1
          maxLength: 200
        web_url:
          title: Web URL
          type: string
          format: uri
          maxLength: 2000
        scm_url:
          title: SCM URL
          type: string
          format: uri
          maxLength: 2000
        webscm_url:
          title: Web SCM URL
          type: string
          format: uri
          maxLength: 2000
        maintainers:
          type: array
          items:
            $ref: '#/components/schemas/UserEmbedded'
          readOnly: true
          uniqueItems: true
        subject_match:
          title: Subject match
          description: >
            Regex to match the subject against if only part of emails sent to
            the list belongs to this project. Will be used with IGNORECASE and
            MULTILINE flags. If rules for more projects match the first one
            returned from DB is chosen; empty field serves as a default for
            every email which has no other match.
          type: string
          readOnly: true
          maxLength: 64
    Series:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
        project:
          $ref: '#/components/schemas/ProjectEmbedded'
        name:
          title: Name
          description: >
            An optional name to associate with the series, e.g. "John's PCI
            series".
          type: string
          maxLength: 255
          nullable: true
        date:
          title: Date
          type: string
          format: iso8601
          readOnly: true
        submitter:
          type: object
          title: Submitter
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/PersonEmbedded'
        version:
          title: Version
          description: >
            Version of series as indicated by the subject prefix(es).
          type: integer
        total:
          title: Total
          description: >
            Number of patches in series as indicated by the subject prefix(es).
          type: integer
          readOnly: true
        received_total:
          title: Received total
          type: integer
          readOnly: true
        received_all:
          title: Received all
          type: boolean
          readOnly: true
        mbox:
          title: Mbox
          type: string
          format: uri
          readOnly: true
        cover_letter:
          $ref: '#/components/schemas/CoverLetterEmbedded'
        patches:
          type: array
          items:
            $ref: '#/components/schemas/PatchEmbedded'
          readOnly: true
          uniqueItems: true
    User:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        username:
          title: Username
          type: string
          readOnly: true
          minLength: 1
          maxLength: 150
        first_name:
          title: First name
          type: string
          maxLength: 30
        last_name:
          title: Last name
          type: string
          maxLength: 150
        email:
          title: Email address
          type: string
          format: email
          readOnly: true
          minLength: 1
    CheckEmbedded:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: Url
          type: string
          format: uri
          readOnly: true
        date:
          title: Date
          type: string
          format: iso8601
          readOnly: true
        state:
          title: State
          description: The state of the check.
          type: string
          readOnly: true
          enum:
            - pending
            - success
            - warning
            - fail
        target_url:
          title: Target url
          description: >
            The target URL to associate with this check. This should be specific
            to the patch.
          type: string
          format: uri
          maxLength: 200
          nullable: true
          readOnly: true
        context:
          title: Context
          description: >
            A label to discern check from checks of other testing systems.
          type: string
          pattern: ^[-a-zA-Z0-9_]+$
          maxLength: 255
          minLength: 1
          readOnly: true
    CoverLetterEmbedded:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
        msgid:
          title: Message ID
          type: string
          readOnly: true
          minLength: 1
        date:
          title: Date
          type: string
          format: iso8601
          readOnly: true
        name:
          title: Name
          type: string
          readOnly: true
          minLength: 1
        mbox:
          title: Mbox
          type: string
          format: uri
          readOnly: true
    PatchEmbedded:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
        msgid:
          title: Message ID
          type: string
          readOnly: true
          minLength: 1
        date:
          title: Date
          type: string
          format: iso8601
          readOnly: true
        name:
          title: Name
          type: string
          readOnly: true
          minLength: 1
        mbox:
          title: Mbox
          type: string
          format: uri
          readOnly: true
    PersonEmbedded:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        name:
          title: Name
          type: string
          readOnly: true
          minLength: 1
        email:
          title: Email
          type: string
          format: email
          readOnly: true
          minLength: 1
    ProjectEmbedded:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        name:
          title: Name
          type: string
          readOnly: true
          minLength: 1
        link_name:
          title: Link name
          type: string
          readOnly: true
          maxLength: 255
          minLength: 1
        list_id:
          title: List ID
          type: string
          readOnly: true
          maxLength: 255
          minLength: 1
        list_email:
          title: List email
          type: string
          format: email
          readOnly: true
          maxLength: 200
          minLength: 1
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
          maxLength: 2000
        scm_url:
          title: SCM URL
          type: string
          format: uri
          readOnly: true
          maxLength: 2000
        webscm_url:
          title: WebSCM URL
          type: string
          format: uri
          readOnly: true
          maxLength: 2000
    SeriesEmbedded:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
        name:
          title: Name
          description: >
            An optional name to associate with the series, e.g. "John's PCI
            series".
          type: string
          readOnly: true
          maxLength: 255
          nullable: true
        date:
          title: Date
          type: string
          format: iso8601
          readOnly: true
        version:
          title: Version
          description: >
            Version of series as indicated by the subject prefix(es).
          type: integer
          readOnly: true
        mbox:
          title: Mbox
          type: string
          format: uri
          readOnly: true
    UserEmbedded:
      type: object
      properties:
        id:
          title: ID
          type: integer
          readOnly: true
        url:
          title: URL
          type: string
          format: uri
          readOnly: true
        username:
          title: Username
          type: string
          readOnly: true
          minLength: 1
          maxLength: 150
        first_name:
          title: First name
          type: string
          maxLength: 30
          readOnly: true
        last_name:
          title: Last name
          type: string
          maxLength: 150
          readOnly: true
        email:
          title: Email address
          type: string
          format: email
          readOnly: true
          minLength: 1
    Error:
      type: object
      properties:
        detail:
          title: Detail
          type: string
          readOnly: true
    ErrorCheckCreate:
      type: object
      properties:
        state:
          title: State
          type: string
          readOnly: true
        target_url:
          title: Target URL
          type: string
          readOnly: true
        context:
          title: Context
          type: string
          readOnly: true
        description:
          title: Description
          type: string
          readOnly: true
    ErrorPatchUpdate:
      type: object
      properties:
        state:
          title: State
          type: string
          readOnly: true
        delegate:
          title: Delegate
          type: string
          readOnly: true
        commit_ref:
          title: Commit ref
          type: string
          readOnly: true
        archived:
          title: Archived
          type: string
          readOnly: true
    ErrorProjectUpdate:
      type: object
      properties:
        web_url:
          title: Web URL
          type: string
          format: uri
          readOnly: true
        scm_url:
          title: SCM URL
          type: string
          format: uri
          readOnly: true
        webscm_url:
          title: Web SCM URL
          type: string
          format: uri
          readOnly: true
    ErrorUserUpdate:
      type: object
      properties:
        first_name:
          title: First name
          type: string
          readOnly: true
        last_name:
          title: First name
          type: string
          readOnly: true