swagger: '2.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. version: "1.0" host: patchwork.ozlabs.org schemes: - http - https securityDefinitions: basicAuth: type: basic description: HTTP Basic Authentication. Works over `HTTP` and `HTTPS` basePath: /api/1.0 produces: - application/json paths: /: get: summary: API metadata. description: | The Metadata endpoint returns information about the API itself. The response includes the version of the API. responses: 200: description: An API metadata object. schema: $ref: '#/definitions/Metadata' default: description: Unexpected error. schema: $ref: '#/definitions/Error' /projects: get: summary: List available projects. description: | Returns information about all projects available on this patchwork instance. parameters: - $ref: '#/parameters/perPageParam' - $ref: '#/parameters/pageParam' tags: - Projects responses: 200: description: An array of projects objects. schema: type: array items: $ref: '#/definitions/Project' default: description: Unexpected error. schema: $ref: '#/definitions/Error' /projects/{projectId}: get: summary: Retrieve a project. description: | Returns information about a single project available on this patchwork instance. parameters: - $ref: '#/parameters/projectId' tags: - Projects responses: 200: description: A project object. schema: $ref: '#/definitions/Project' 404: description: The project does not exist default: description: Unexpected error. schema: $ref: '#/definitions/Error' patch: summary: Update a project. description: | Update information about a single project available on this patchwork instance. parameters: - $ref: '#/parameters/projectId' tags: - Projects security: - basicAuth: [] responses: 200: description: A project object. schema: $ref: '#/definitions/Project' 403: description: The user is not authenticated or is not a superuser. 404: description: The project does not exist. default: description: Unexpected error. schema: $ref: '#/definitions/Error' /people: get: summary: List available people. description: | Returns information about all people who have submitted patches on this patchwork instance. parameters: - $ref: '#/parameters/perPageParam' - $ref: '#/parameters/pageParam' tags: - People responses: 200: description: An array of people objects. schema: type: array items: $ref: '#/definitions/People' 403: description: The user is not authenticated. default: description: Unexpected error. schema: $ref: '#/definitions/Error' /people/{personId}: get: summary: Retrieve a person. description: | Returns information about a single person who has submitted patches on this patchwork instance. parameters: - $ref: '#/parameters/personId' tags: - People responses: 200: description: A person object. schema: $ref: '#/definitions/People' 403: description: The user is not authenticated. 404: description: The person does not exist. default: description: Unexpected error. schema: $ref: '#/definitions/Error' /users: get: summary: List available users. description: | Returns information about all users registerd on this Patchwork instance. parameters: - $ref: '#/parameters/perPageParam' - $ref: '#/parameters/pageParam' tags: - Users security: - basicAuth: [] responses: 200: description: An array of user objects. schema: type: array items: $ref: '#/definitions/User' default: description: Unexpected error. schema: $ref: '#/definitions/Error' /users/{userId}: get: summary: Retrieve a user. description: | Returns information about a single user registerd on this Patchwork instance. parameters: - $ref: '#/parameters/userId' tags: - Users security: - basicAuth: [] responses: 200: description: A user object. schema: $ref: '#/definitions/User' 403: description: The user is not authenticated. 404: description: The user does not exists. default: description: Unexpected error. schema: $ref: '#/definitions/User' /patches: get: summary: List available patches description: | Returns information about all patches available on this patchwork instance. parameters: - $ref: '#/parameters/perPageParam' - $ref: '#/parameters/pageParam' - $ref: '#/parameters/sinceParam' - $ref: '#/parameters/untilParam' tags: - Patches responses: 200: description: An array of patch objects. schema: type: array items: $ref: '#/definitions/Patch' default: description: Unexpected error. schema: $ref: '#/definitions/Error' /patches/{patchId}: get: summary: Retrieve a patch. description: | Returns information about a single patch available on this patchwork instance. parameters: - $ref: '#/parameters/patchId' tags: - Patches responses: 200: description: A patch object. schema: $ref: '#/definitions/PatchDetail' 404: description: The patch does not exist default: description: Unexpected error. schema: $ref: '#/definitions/Error' patch: summary: Update a patch. description: | Update information about a patch. parameters: - $ref: '#/parameters/patchId' tags: - Patches security: - basicAuth: [] responses: 200: description: A patch object. schema: $ref: '#/definitions/PatchDetail' 403: description: | The user is not authenticated, or the user did not create the patch and is not a super user. 404: description: The patch does not exist default: description: Unexpected error. schema: $ref: '#/definitions/Error' /patches/{patchId}/checks: get: summary: List checks for given patch. description: | Checks store the results of any tests executed (or executing) for a given patch. This is useful, for example, when using a continuous integration (CI) system to test patches. parameters: - $ref: '#/parameters/patchId' - $ref: '#/parameters/perPageParam' - $ref: '#/parameters/pageParam' tags: - Checks responses: 200: description: A check object. schema: $ref: '#/definitions/Check' 404: description: The parent patch does not exist default: description: Unexpected error. schema: $ref: '#/definitions/Error' # TODO(stephenfin): Document creation of checks, listing of users parameters: # ID Parameters projectId: name: projectId description: ID of project that needs to be retrieved. in: path type: integer format: int32 required: true personId: name: personId description: ID of person that needs to be retrieved. in: path type: integer format: int32 required: true userId: name: userId description: ID of a user. in: path type: integer format: int32 required: true patchId: name: patchId description: | ID of patch that needs to be retrieved. This should be one of: a patch ID, a patch hash, a Message-ID. in: path type: string required: true # Generic parameters pageParam: name: page description: page to retrieve in: query type: integer format: int32 minimum: 1 default: 1 perPageParam: name: per_page description: custom page size in: query type: integer format: int32 minimum: 0 maximum: 100 default: 30 sinceParam: name: since description: only items modified after this date will be returned in: query type: string format: date untilParam: name: until description: only items modified before this date will be returned in: query type: string format: date definitions: Metadata: properties: revision: type: integer description: Revision of the API. Project: properties: id: type: integer description: Unique identifier of project. url: type: string description: url to project. name: type: string description: Name of project. link_name: type: string description: Link name of project. list_id: type: string description: Mailing list identifier for project. subject_match: type: string description: Regex used for email filtering. list_email: type: string description: Mailing list email address for project. web_url: type: string description: Upstream website URL for project. scm_url: type: string description: SCM clone URL for project. webscm_url: type: string description: SCM web interface URL for project. Patch: properties: id: type: integer description: Unique identifier of patch. url: type: string description: URL to patch. project: type: string description: URL to patch's project. msgid: type: string description: Message ID header from patch mail. date: type: string format: date-time description: Submission date of patch. name: type: string description: Name of patch. commit_ref: type: string description: Ref of committed patch. pull_url: type: string description: URL to patch pull request. state: type: string description: The state of the patch. archived: type: boolean description: Archival state of patch. hash: type: string description: Hash of patch's diff. submitter: type: string description: URL for submitter of patch. delegate: type: integer description: URL for delegate assigned to patch. mbox: type: string description: Link to the raw patch mbox contents. check: type: string description: The combined check status for the patch. enum: - pending - success - warning - fail checks: type: string description: URL to patch's checks endpoint. tags: type: array description: Tags associated with patch. items: type: string PatchDetail: allOf: - $ref: '#/definitions/Patch' properties: diff: type: string description: Diff of patch. content: type: string description: Message of patch. headers: type: array description: The headers of the patch. items: type: string People: properties: id: type: integer description: Unique identifier of person. url: type: string description: URL to person. name: type: string description: Name of person. email: type: string description: Email of person. user: type: string description: URL for user connected to person. Check: properties: id: type: integer description: Unique identifier of check. url: type: string description: URL to check. user: type: string description: URL for creator of check. date: type: string format: date-time state: type: string description: The state of the check. enum: - pending - success - warning - fail target_url: type: string description: The target URL associated with this check. context: type: string description: | A label to discern check from checks of other testing systems. description: type: string description: A brief description of the check. User: properties: id: type: integer description: Unique identifier of user. url: type: string description: URL to user. username: type: string description: Username of user. first_name: type: string description: First name of user. last_name: type: string description: Last name of user. email: type: string description: Email of user. Error: properties: code: type: integer format: int32 message: type: string fields: type: string