swagger: '2.0' info: title: Harbor API description: These APIs provide services for manipulating Harbor project. version: 1.9.0 host: localhost schemes: - http - https basePath: /api produces: - application/json - text/plain consumes: - application/json securityDefinitions: basicAuth: type: basic security: - basicAuth: [] paths: /health: get: summary: 'Health check API' description: | The endpoint returns the health stauts of the system. tags: - Products responses: '200': description: The system health status. schema: $ref: '#/definitions/OverallHealthStatus' /search: get: summary: 'Search for projects, repositories and helm charts' description: | The Search endpoint returns information about the projects ,repositories and helm charts offered at public status or related to the current logged in user. The response includes the project, repository list and charts in a proper display order. parameters: - name: q in: query description: Search parameter for project and repository name. required: true type: string tags: - Products responses: '200': description: An array of search results schema: type: array items: $ref: '#/definitions/Search' '500': description: Unexpected internal errors. /projects: get: summary: List projects description: | This endpoint returns all projects created by Harbor, and can be filtered by project name. parameters: - name: name in: query description: The name of project. required: false type: string - name: public in: query description: The project is public or private. required: false type: boolean format: int32 - name: owner in: query description: The name of project owner. required: false type: string - name: page in: query type: integer format: int32 required: false description: 'The page number, default is 1.' - name: page_size in: query type: integer format: int32 required: false description: 'The size of per page, default is 10, maximum is 100.' tags: - Products responses: '200': description: Return all matched projects. schema: type: array items: $ref: '#/definitions/Project' headers: X-Total-Count: description: The total count of projects type: integer Link: description: Link refers to the previous page and next page type: string '401': description: User need to log in first. '500': description: Internal errors. head: summary: Check if the project name user provided already exists. description: | This endpoint is used to check if the project name user provided already exist. parameters: - name: project_name in: query description: Project name for checking exists. required: true type: string tags: - Products responses: '200': description: Project name exists. '404': description: Project name does not exist. '500': description: Unexpected internal errors. post: summary: Create a new project. description: | This endpoint is for user to create a new project. parameters: - name: project in: body description: New created project. required: true schema: $ref: '#/definitions/ProjectReq' tags: - Products responses: '201': description: Project created successfully. '400': description: Unsatisfied with constraints of the project creation. '401': description: User need to log in first. '409': description: Project name already exists. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. '/projects/{project_id}': get: summary: Return specific project detail information description: | This endpoint returns specific project information by project ID. parameters: - name: project_id in: path description: Project ID for filtering results. required: true type: integer format: int64 tags: - Products responses: '200': description: Return matched project information. schema: $ref: '#/definitions/Project' '401': description: User need to log in first. '500': description: Internal errors. put: summary: Update properties for a selected project. description: | This endpoint is aimed to update the properties of a project. parameters: - name: project_id in: path type: integer format: int64 required: true description: Selected project ID. - name: project in: body required: true schema: $ref: '#/definitions/ProjectReq' description: Updates of project. tags: - Products responses: '200': description: Updated project properties successfully. '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User does not have permission to the project. '404': description: Project ID does not exist. '500': description: Unexpected internal errors. delete: summary: Delete project by projectID description: | This endpoint is aimed to delete project by project ID. parameters: - name: project_id in: path description: Project ID of project which will be deleted. required: true type: integer format: int64 tags: - Products responses: '200': description: Project is deleted successfully. '400': description: Invalid project id. '403': description: User need to log in first. '404': description: Project does not exist. '412': description: 'Project contains policies, can not be deleted.' '500': description: Internal errors. '/projects/{project_id}/logs': get: summary: Get access logs accompany with a relevant project. description: | This endpoint let user search access logs filtered by operations and date time ranges. parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID - name: username in: query type: string required: false description: Username of the operator. - name: repository in: query type: string required: false description: The name of repository - name: tag in: query type: string required: false description: The name of tag - name: operation in: query type: string required: false description: The operation - name: begin_timestamp in: query type: string required: false description: The begin timestamp - name: end_timestamp in: query type: string required: false description: The end timestamp - name: page in: query type: integer format: int32 required: false description: 'The page number, default is 1.' - name: page_size in: query type: integer format: int32 required: false description: 'The size of per page, default is 10, maximum is 100.' tags: - Products responses: '200': description: Get access log successfully. schema: type: array items: $ref: '#/definitions/AccessLog' headers: X-Total-Count: description: The total count of access logs type: integer Link: description: Link refers to the previous page and next page type: string '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '500': description: Unexpected internal errors. '/projects/{project_id}/summary': get: summary: Get summary of the project. description: Get summary of the project. parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID tags: - Products responses: '200': description: Get summary of the project successfully. schema: $ref: '#/definitions/ProjectSummary' '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User does not have permission to get summary of the project. '404': description: Project ID does not exist. '500': description: Unexpected internal errors. '/projects/{project_id}/metadatas': get: summary: Get project metadata. description: | This endpoint returns metadata of the project specified by project ID. parameters: - name: project_id in: path description: The ID of project. required: true type: integer format: int64 tags: - Products responses: '200': description: Get metadata successfully. schema: $ref: '#/definitions/ProjectMetadata' '401': description: User need to login first. '500': description: Internal server errors. post: summary: Add metadata for the project. description: | This endpoint is aimed to add metadata of a project. parameters: - name: project_id in: path type: integer format: int64 required: true description: Selected project ID. - name: metadata in: body required: true schema: $ref: '#/definitions/ProjectMetadata' description: The metadata of project. tags: - Products responses: '200': description: Add metadata successfully. '400': description: Invalid request. '401': description: User need to log in first. '403': description: User does not have permission to the project. '404': description: Project ID does not exist. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Internal server errors. '/projects/{project_id}/metadatas/{meta_name}': get: summary: Get project metadata description: | This endpoint returns specified metadata of a project. parameters: - name: project_id in: path description: Project ID for filtering results. required: true type: integer format: int64 - name: meta_name in: path description: The name of metadat. required: true type: string tags: - Products responses: '200': description: Get metadata successfully. schema: $ref: '#/definitions/ProjectMetadata' '401': description: User need to log in first. '500': description: Internal server errors. put: summary: Update metadata of a project. description: | This endpoint is aimed to update the metadata of a project. parameters: - name: project_id in: path type: integer format: int64 required: true description: The ID of project. - name: meta_name in: path description: The name of metadat. required: true type: string tags: - Products responses: '200': description: Updated metadata successfully. '400': description: Invalid request. '401': description: User need to log in first. '403': description: User does not have permission to the project. '404': description: Project or metadata does not exist. '500': description: Internal server errors. delete: summary: Delete metadata of a project description: | This endpoint is aimed to delete metadata of a project. parameters: - name: project_id in: path description: The ID of project. required: true type: integer format: int64 - name: meta_name in: path description: The name of metadat. required: true type: string tags: - Products responses: '200': description: Metadata is deleted successfully. '400': description: Invalid requst. '403': description: User need to log in first. '404': description: Project or metadata does not exist. '500': description: Internal server errors. '/projects/{project_id}/members': get: summary: Get all project member information description: Get all project member information parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: entityname in: query type: string description: The entity name to search. tags: - Products responses: '200': description: Get project members successfully. schema: type: array items: $ref: '#/definitions/ProjectMemberEntity' '400': description: The project id is invalid. '401': description: User need to log in first. '403': description: User in session does not have permission to the project. '404': description: Project ID does not exist. '500': description: Unexpected internal errors. post: summary: Create project member description: 'Create project member relationship, the member can be one of the user_member and group_member, The user_member need to specify user_id or username. If the user already exist in harbor DB, specify the user_id, If does not exist in harbor DB, it will SearchAndOnBoard the user. The group_member need to specify id or ldap_group_dn. If the group already exist in harbor DB. specify the user group''s id, If does not exist, it will SearchAndOnBoard the group. ' tags: - Products parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: project_member in: body schema: $ref: '#/definitions/ProjectMember' responses: '201': description: Project member created successfully. '400': description: 'Illegal format of project member or project id is invalid, or LDAP DN is invalid.' '401': description: User need to log in first. '403': description: User in session does not have permission to the project. '409': description: A user group with same group name already exist or an LDAP user group with same DN already exist. '500': description: Unexpected internal errors. '/projects/{project_id}/members/{mid}': get: summary: Get the project member information description: Get the project member information tags: - Products parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: mid in: path type: integer format: int64 required: true description: The member ID responses: '200': description: Project member retrieved successfully. schema: $ref: '#/definitions/ProjectMemberEntity' '400': description: 'Illegal format of project member or invalid project id, member id.' '401': description: User need to log in first. '403': description: User in session does not have permission to the project. '404': description: Project or projet member does not exist. '500': description: Unexpected internal errors. put: summary: Update project member description: Update project member relationship tags: - Products parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: mid in: path type: integer format: int64 required: true description: Member ID. - name: role in: body schema: $ref: '#/definitions/RoleRequest' responses: '200': description: Project member updated successfully. '400': description: 'Invalid role id, it should be 1,2 or 3, or invalid project id, or invalid member id.' '401': description: User need to log in first. '403': description: User in session does not have permission to the project. '404': description: project or project member does not exist. '500': description: Unexpected internal errors. delete: summary: Delete project member tags: - Products parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: mid in: path type: integer format: int64 required: true description: Member ID. responses: '200': description: Project member deleted successfully. '400': description: The project id or project member id is invalid. '401': description: User need to log in first. '403': description: User in session does not have permission to the project. '500': description: Unexpected internal errors. /statistics: get: summary: Get projects number and repositories number relevant to the user description: | This endpoint is aimed to statistic all of the projects number and repositories number relevant to the logined user, also the public projects number and repositories number. If the user is admin, he can also get total projects number and total repositories number. tags: - Products responses: '200': description: Get the projects number and repositories number relevant to the user successfully. schema: $ref: '#/definitions/StatisticMap' '401': description: User need to log in first. '500': description: Unexpected internal errors. /users: get: summary: Get registered users of Harbor. description: | This endpoint is for user to search registered users, support for filtering results with username.Notice, by now this operation is only for administrator. parameters: - name: username in: query type: string required: false description: Username for filtering results. - name: email in: query type: string required: false description: Email for filtering results. - name: page in: query type: integer format: int32 required: false description: 'The page number, default is 1.' - name: page_size in: query type: integer format: int32 required: false description: The size of per page. tags: - Products responses: '200': description: Searched for users of Harbor successfully. schema: type: array items: $ref: '#/definitions/User' '400': description: Invalid user ID. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '500': description: Unexpected internal errors. post: summary: Creates a new user account. description: | This endpoint is to create a user if the user does not already exist. parameters: - name: user in: body description: New created user. required: true schema: $ref: '#/definitions/User' tags: - Products responses: '201': description: User created successfully. '400': description: Unsatisfied with constraints of the user creation. '403': description: User registration can only be used by admin role user when self-registration is off. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. /users/current: get: summary: Get current user info. description: | This endpoint is to get the current user information. tags: - Products responses: '200': description: Get current user information successfully. schema: $ref: '#/definitions/User' '401': description: User need to log in first. /users/current/permissions: get: summary: Get current user permissions. description: | This endpoint is to get the current user permissions. parameters: - name: scope in: query type: string required: false description: Get permissions of the scope - name: relative in: query type: boolean required: false description: | If true, the resources in the response are relative to the scope, eg for resource '/project/1/repository' if relative is 'true' then the resource in response will be 'repository'. tags: - Products responses: '200': description: Get current user permission successfully. schema: type: array items: $ref: '#/definitions/Permission' '401': description: User need to log in first. '500': description: Internal errors. /users/search: get: summary: Search users by username description: | This endpoint is to search the users by username. parameters: - name: username in: query type: string required: true description: Username for filtering results. - name: page in: query type: integer format: int32 required: false description: 'The page number, default is 1.' - name: page_size in: query type: integer format: int32 required: false description: The size of per page. tags: - Products responses: '200': description: Search users by username, email successfully. schema: type: array items: $ref: '#/definitions/UserSearch' '500': description: Unexpected internal errors. '/users/{user_id}': get: summary: Get a user's profile. description: | Get user's profile with user id. parameters: - name: user_id in: path type: integer format: int required: true description: Registered user ID tags: - Products responses: '200': description: Get user's profile successfully. schema: $ref: '#/definitions/User' '400': description: Invalid user ID. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '404': description: User ID does not exist. '500': description: Unexpected internal errors. put: summary: Update a registered user to change his profile. description: | This endpoint let a registered user change his profile. parameters: - name: user_id in: path type: integer format: int required: true description: Registered user ID - name: profile in: body description: 'Only email, realname and comment can be modified.' required: true schema: $ref: '#/definitions/UserProfile' tags: - Products responses: '200': description: Updated user's profile successfully. '400': description: Invalid user ID. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '404': description: User ID does not exist. '500': description: Unexpected internal errors. delete: summary: Mark a registered user as be removed. description: | This endpoint let administrator of Harbor mark a registered user as be removed.It actually won't be deleted from DB. parameters: - name: user_id in: path type: integer format: int required: true description: User ID for marking as to be removed. tags: - Products responses: '200': description: Marked user as be removed successfully. '400': description: Invalid user ID. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '404': description: User ID does not exist. '500': description: Unexpected internal errors. '/users/{user_id}/password': put: summary: Change the password on a user that already exists. description: | This endpoint is for user to update password. Users with the admin role can change any user's password. Guest users can change only their own password. parameters: - name: user_id in: path type: integer format: int required: true description: Registered user ID. - name: password in: body description: Password to be updated, the attribute 'old_password' is optional when the API is called by the system administrator. required: true schema: $ref: '#/definitions/Password' tags: - Products responses: '200': description: Updated password successfully. '400': description: Invalid user ID; Old password is blank; New password is blank. '401': description: Don't have authority to change password. Please check login status. '403': description: The caller does not have permission to update the password of the user with given ID, or the old password in request body is not correct. '500': description: Unexpected internal errors. '/users/{user_id}/sysadmin': put: summary: Update a registered user to change to be an administrator of Harbor. description: | This endpoint let a registered user change to be an administrator of Harbor. parameters: - name: user_id in: path type: integer format: int required: true description: Registered user ID - name: has_admin_role in: body description: Toggle a user to admin or not. required: true schema: $ref: '#/definitions/HasAdminRole' tags: - Products responses: '200': description: Updated user's admin role successfully. '400': description: Invalid user ID. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '404': description: User ID does not exist. '500': description: Unexpected internal errors. '/users/{user_id}/cli_secret': put: summary: Set CLI secret for a user. description: | This endpoint let user generate a new CLI secret for himself. This API only works when auth mode is set to 'OIDC'. Once this API returns with successful status, the old secret will be invalid, as there will be only one CLI secret for a user. parameters: - name: user_id in: path type: integer format: int required: true description: User ID - name: input_secret in: body description: JSON object that includes the new secret required: true schema: type: object properties: secret: type: string description: The new secret tags: - Products responses: '200': description: The secret is successfully updated '400': description: Invalid user ID. Or user is not onboarded via OIDC authentication. Or the secret does not meet the standard. '401': description: User need to log in first. '403': description: Non-admin user can only generate the cli secret of himself. '404': description: User ID does not exist. '412': description: The auth mode of the system is not "oidc_auth", or the user is not onboarded via OIDC AuthN. '500': description: Unexpected internal errors. /repositories: get: summary: Get repositories accompany with relevant project and repo name. description: | This endpoint lets user search repositories accompanying with relevant project ID and repo name. Repositories can be sorted by repo name, creation_time, update_time in either ascending or descending order. parameters: - name: project_id in: query type: integer format: int32 required: true description: Relevant project ID. - name: q in: query type: string required: false description: Repo name for filtering results. - name: sort in: query type: string required: false description: | Sort method, valid values include: 'name', '-name', 'creation_time', '-creation_time', 'update_time', '-update_time'. Here '-' stands for descending order. - name: label_id in: query type: integer required: false description: The ID of label used to filter the result. - name: page in: query type: integer format: int32 required: false description: 'The page number, default is 1.' - name: page_size in: query type: integer format: int32 required: false description: 'The size of per page, default is 10, maximum is 100.' tags: - Products responses: '200': description: Get repositories successfully. schema: type: array items: $ref: '#/definitions/Repository' headers: X-Total-Count: description: The total count of repositories type: integer Link: description: Link refers to the previous page and next page type: string '400': description: Invalid project ID. '403': description: Project is not public or current user is irrelevant to the repository. '404': description: Project ID does not exist. '500': description: Unexpected internal errors. '/repositories/{repo_name}': delete: summary: Delete a repository. description: | This endpoint let user delete a repository with name. parameters: - name: repo_name in: path type: string required: true description: The name of repository which will be deleted. tags: - Products responses: '200': description: Delete successfully. '400': description: Invalid repo_name. '401': description: Unauthorized. '403': description: Forbidden. '404': description: Repository not found. '412': description: Precondition Failed. put: summary: Update description of the repository. description: | This endpoint is used to update description of the repository. parameters: - name: repo_name in: path type: string required: true description: The name of repository which will be deleted. - name: description in: body description: The description of the repository. required: true schema: $ref: '#/definitions/RepositoryDescription' tags: - Products responses: '200': description: Update successfully. '401': description: Unauthorized. '403': description: Forbidden. '404': description: Repository not found. '/repositories/{repo_name}/labels': get: summary: Get labels of a repository. description: | Get labels of a repository specified by the repo_name. parameters: - name: repo_name in: path type: string required: true description: The name of repository. tags: - Products responses: '200': description: Successfully. schema: type: array items: $ref: '#/definitions/Label' '401': description: Unauthorized. '403': description: Forbidden. User should have read permisson for the repository to perform the action. '404': description: Repository not found. post: summary: Add a label to the repository. description: | Add a label to the repository. parameters: - name: repo_name in: path type: string required: true description: The name of repository. - name: label in: body description: Only the ID property is required. required: true schema: $ref: '#/definitions/Label' tags: - Products responses: '200': description: Successfully. '401': description: Unauthorized. '403': description: Forbidden. User should have write permisson for the repository to perform the action. '404': description: Resource not found. '/repositories/{repo_name}/labels/{label_id}': delete: summary: Delete label from the repository. description: | Delete the label from the repository specified by the repo_name. parameters: - name: repo_name in: path type: string required: true description: The name of repository. - name: label_id in: path type: integer required: true description: The ID of label. tags: - Products responses: '200': description: Successfully. '401': description: Unauthorized. '403': description: Forbidden. User should have write permisson for the repository to perform the action. '404': description: Resource not found. '/repositories/{repo_name}/tags/{tag}': get: summary: Get the tag of the repository. description: | This endpoint aims to retrieve the tag of the repository. If deployed with Notary, the signature property of response represents whether the image is singed or not. If the property is null, the image is unsigned. parameters: - name: repo_name in: path type: string required: true description: Relevant repository name. - name: tag in: path type: string required: true description: Tag of the repository. tags: - Products responses: '200': description: Get tag successfully. schema: $ref: '#/definitions/DetailedTag' '500': description: Unexpected internal errors. delete: summary: Delete a tag in a repository. description: | This endpoint let user delete tags with repo name and tag. parameters: - name: repo_name in: path type: string required: true description: The name of repository which will be deleted. - name: tag in: path type: string required: true description: Tag of a repository. tags: - Products responses: '200': description: Delete tag successfully. '400': description: Invalid repo_name. '401': description: Unauthorized. '403': description: Forbidden. '404': description: Repository or tag not found. '/repositories/{repo_name}/tags': get: summary: Get tags of a relevant repository. description: | This endpoint aims to retrieve tags from a relevant repository. If deployed with Notary, the signature property of response represents whether the image is singed or not. If the property is null, the image is unsigned. parameters: - name: repo_name in: path type: string required: true description: Relevant repository name. - name: label_id in: query type: string required: false description: A label ID. - name: detail in: query type: boolean required: false description: Bool value indicating whether return detailed information of the tag, such as vulnerability scan info, if set to false, only tag name is returned. tags: - Products responses: '200': description: Get tags successfully. schema: type: array items: $ref: '#/definitions/DetailedTag' '500': description: Unexpected internal errors. post: summary: Retag an image description: > This endpoint tags an existing image with another tag in this repo, source images can be in different repos or projects. parameters: - name: repo_name in: path type: string required: true description: Relevant repository name. - name: request in: body description: Request to give source image and target tag. required: true schema: $ref: '#/definitions/RetagReq' tags: - Products responses: '200': description: Image retag successfully. '400': description: Invalid image values provided. '401': description: User has no permission to the source project or destination project. '403': description: Forbiden as quota exceeded. '404': description: Project or repository not found. '409': description: Target tag already exists. '500': description: Unexpected internal errors. '/repositories/{repo_name}/tags/{tag}/labels': get: summary: Get labels of an image. description: | Get labels of an image specified by the repo_name and tag. parameters: - name: repo_name in: path type: string required: true description: The name of repository. - name: tag in: path type: string required: true description: The tag of the image. tags: - Products responses: '200': description: Successfully. schema: type: array items: $ref: '#/definitions/Label' '401': description: Unauthorized. '403': description: Forbidden. User should have read permisson for the image to perform the action. '404': description: Resource not found. post: summary: Add a label to image. description: | Add a label to the image. parameters: - name: repo_name in: path type: string required: true description: The name of repository. - name: tag in: path type: string required: true description: The tag of the image. - name: label in: body description: Only the ID property is required. required: true schema: $ref: '#/definitions/Label' tags: - Products responses: '200': description: Successfully. '401': description: Unauthorized. '403': description: Forbidden. User should have write permisson for the image to perform the action. '404': description: Resource not found. '/repositories/{repo_name}/tags/{tag}/labels/{label_id}': delete: summary: Delete label from the image. description: | Delete the label from the image specified by the repo_name and tag. parameters: - name: repo_name in: path type: string required: true description: The name of repository. - name: tag in: path type: string required: true description: The tag of the image. - name: label_id in: path type: integer required: true description: The ID of label. tags: - Products responses: '200': description: Successfully. '401': description: Unauthorized. '403': description: Forbidden. User should have write permisson for the image to perform the action. '404': description: Resource not found. '/repositories/{repo_name}/tags/{tag}/manifest': get: summary: Get manifests of a relevant repository. description: | This endpoint aims to retreive manifests from a relevant repository. parameters: - name: repo_name in: path type: string required: true description: Repository name - name: tag in: path type: string required: true description: Tag name - name: version in: query type: string required: false description: 'The version of manifest, valid value are "v1" and "v2", default is "v2"' tags: - Products responses: '200': description: Retrieved manifests from a relevant repository successfully. schema: $ref: '#/definitions/Manifest' '404': description: Retrieved manifests from a relevant repository not found. '500': description: Unexpected internal errors. '/repositories/{repo_name}/tags/{tag}/scan': post: summary: Scan the image. description: | Trigger jobservice to call Clair API to scan the image identified by the repo_name and tag. Only project admins have permission to scan images under the project. parameters: - name: repo_name in: path type: string required: true description: Repository name - name: tag in: path type: string required: true description: Tag name tags: - Products responses: '200': description: Successfully created the job to scan image. '401': description: User needs to login or call the API with correct credentials. '403': description: User doesn't have permission to perform the action. '404': description: The image does not exist in Harbor. '415': $ref: '#/responses/UnsupportedMediaType' '503': description: Harbor is not deployed with Clair. '/repositories/{repo_name}/tags/{tag}/vulnerability/details': get: summary: Get vulnerability details of the image. description: | Call Clair API to get the vulnerability based on the previous successful scan. parameters: - name: repo_name in: path type: string required: true description: Repository name - name: tag in: path type: string required: true description: Tag name tags: - Products responses: '200': description: Successfully retrieved the vulnerabilities. schema: type: array items: $ref: '#/definitions/VulnerabilityItem' '401': description: User needs to login or call the API with correct credentials. '403': description: User doesn't have permission to perform the action. '404': description: The image does not exist in Harbor. '503': description: Harbor is not deployed with Clair. '/repositories/{repo_name}/signatures': get: summary: Get signature information of a repository description: | This endpoint aims to retrieve signature information of a repository, the data is from the nested notary instance of Harbor. If the repository does not have any signature information in notary, this API will return an empty list with response code 200, instead of 404 parameters: - name: repo_name in: path type: string required: true description: repository name. tags: - Products responses: '200': description: Retrieved signatures. schema: type: array items: $ref: '#/definitions/RepoSignature' '500': description: Server side error. /repositories/top: get: summary: Get public repositories which are accessed most. description: | This endpoint aims to let users see the most popular public repositories parameters: - name: count in: query type: integer format: int32 required: false description: 'The number of the requested public repositories, default is 10 if not provided.' tags: - Products responses: '200': description: Get popular repositories successfully. schema: type: array items: $ref: '#/definitions/Repository' '400': description: Bad request because of invalid count. '500': description: Unexpected internal errors. /logs: get: summary: Get recent logs of the projects which the user is a member of description: | This endpoint let user see the recent operation logs of the projects which he is member of parameters: - name: username in: query type: string required: false description: Username of the operator. - name: repository in: query type: string required: false description: The name of repository - name: tag in: query type: string required: false description: The name of tag - name: operation in: query type: string required: false description: The operation - name: begin_timestamp in: query type: string required: false description: The begin timestamp - name: end_timestamp in: query type: string required: false description: The end timestamp - name: page in: query type: integer format: int32 required: false description: 'The page number, default is 1.' - name: page_size in: query type: integer format: int32 required: false description: 'The size of per page, default is 10, maximum is 100.' tags: - Products responses: '200': description: Get the required logs successfully. schema: type: array items: $ref: '#/definitions/AccessLog' '400': description: Bad request because of invalid parameters. '401': description: User need to login first. '500': description: Unexpected internal errors. /replication/executions: get: summary: List replication executions. description: | This endpoint let user list replication executions. parameters: - name: policy_id in: query type: integer required: false description: The policy ID. - name: status in: query type: string required: false description: The execution status. - name: trigger in: query type: string required: false description: The trigger mode. - name: page in: query type: integer required: false description: The page. - name: page_size in: query type: integer required: false description: The page size. tags: - Products responses: '200': description: Success schema: type: array items: $ref: '#/definitions/ReplicationExecution' '401': description: User need to login first. '403': description: User has no privilege for the operation. '500': description: Unexpected internal errors. post: summary: Start one execution of the replication. description: | This endpoint is for user to start one execution of the replication. parameters: - name: execution in: body description: The execution that needs to be started, only the property "policy_id" is needed. required: true schema: $ref: '#/definitions/ReplicationExecution' tags: - Products responses: '201': description: Success. '400': description: Bad request. '401': description: User need to login first. '403': description: User has no privilege for the operation. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. /replication/executions/{id}: get: summary: Get the execution of the replication. description: | This endpoint is for user to get one execution of the replication. parameters: - name: id in: path type: integer format: int64 description: The execution ID. required: true tags: - Products responses: '200': description: Success. schema: $ref: '#/definitions/ReplicationExecution' '400': description: Bad request. '401': description: User need to login first. '403': description: User has no privilege for the operation. '404': description: Resource requested does not exist. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. put: summary: Stop the execution of the replication. description: | This endpoint is for user to stop one execution of the replication. parameters: - name: id in: path type: integer format: int64 description: The execution ID. required: true tags: - Products responses: '200': description: Success. '400': description: Bad request. '401': description: User need to login first. '403': description: User has no privilege for the operation. '404': description: Resource requested does not exist. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. /replication/executions/{id}/tasks: get: summary: Get the task list of one execution. description: | This endpoint is for user to get the task list of one execution. parameters: - name: id in: path type: integer format: int64 description: The execution ID. required: true tags: - Products responses: '200': description: Success. schema: type: array items: $ref: '#/definitions/ReplicationTask' '400': description: Bad request. '401': description: User need to login first. '403': description: User has no privilege for the operation. '404': description: Resource requested does not exist. '500': description: Unexpected internal errors. /replication/executions/{id}/tasks/{task_id}/log: get: summary: Get the log of one task. description: | This endpoint is for user to get the log of one task. parameters: - name: id in: path type: integer format: int64 description: The execution ID. required: true - name: task_id in: path type: integer format: int64 description: The task ID. required: true tags: - Products responses: '200': description: Success. '400': description: Bad request. '401': description: User need to login first. '403': description: User has no privilege for the operation. '404': description: Resource requested does not exist. '500': description: Unexpected internal errors. /replication/policies: get: summary: List replication policies description: | This endpoint let user list replication policies parameters: - name: name in: query type: string required: false description: The replication policy name. - name: page in: query type: integer format: int32 required: false description: The page nubmer. - name: page_size in: query type: integer format: int32 required: false description: The size of per page. tags: - Products responses: '200': description: Get policy successfully. schema: type: array items: $ref: '#/definitions/ReplicationPolicy' '400': $ref: '#/responses/BadRequest' '401': $ref: '#/responses/Unauthorized' '403': $ref: '#/responses/Forbidden' '500': $ref: '#/responses/InternalServerError' post: summary: Create a replication policy description: | This endpoint let user create a replication policy parameters: - name: policy in: body description: The policy model. required: true schema: $ref: '#/definitions/ReplicationPolicy' tags: - Products responses: '201': $ref: '#/responses/Created' '400': $ref: '#/responses/BadRequest' '401': $ref: '#/responses/Unauthorized' '403': $ref: '#/responses/Forbidden' '409': $ref: '#/responses/Conflict' '415': $ref: '#/responses/UnsupportedMediaType' '500': $ref: '#/responses/InternalServerError' '/replication/policies/{id}': get: summary: Get replication policy. description: | This endpoint let user get replication policy by specific ID. parameters: - name: id in: path type: integer format: int64 required: true description: policy ID tags: - Products responses: '200': description: Get the replication policy successfully. schema: $ref: '#/definitions/ReplicationPolicy' '400': $ref: '#/responses/BadRequest' '401': $ref: '#/responses/Unauthorized' '403': $ref: '#/responses/Forbidden' '404': $ref: '#/responses/NotFound' '500': $ref: '#/responses/InternalServerError' put: summary: Update the replication policy description: | This endpoint let user update policy. parameters: - name: id in: path type: integer format: int64 required: true description: policy ID - name: policy in: body description: The replication policy model. required: true schema: $ref: '#/definitions/ReplicationPolicy' tags: - Products responses: '200': $ref: '#/responses/OK' '400': $ref: '#/responses/BadRequest' '401': $ref: '#/responses/Unauthorized' '403': $ref: '#/responses/Forbidden' '404': $ref: '#/responses/NotFound' '409': $ref: '#/responses/Conflict' '500': $ref: '#/responses/InternalServerError' delete: summary: Delete the replication policy specified by ID. description: | Delete the replication policy specified by ID. parameters: - name: id in: path type: integer format: int64 required: true description: Replication policy ID tags: - Products responses: '200': $ref: '#/responses/OK' '400': $ref: '#/responses/BadRequest' '401': $ref: '#/responses/Unauthorized' '403': $ref: '#/responses/Forbidden' '404': $ref: '#/responses/NotFound' '412': $ref: '#/responses/PreconditionFailed' '500': $ref: '#/responses/InternalServerError' /labels: get: summary: List labels according to the query strings. description: | This endpoint let user list labels by name, scope and project_id parameters: - name: name in: query type: string required: false description: The label name. - name: scope in: query type: string required: true description: The label scope. Valid values are g and p. g for global labels and p for project labels. - name: project_id in: query type: integer format: int64 required: false description: 'Relevant project ID, required when scope is p.' - name: page in: query type: integer format: int32 required: false description: The page nubmer. - name: page_size in: query type: integer format: int32 required: false description: The size of per page. tags: - Products responses: '200': description: Get successfully. schema: type: array items: $ref: '#/definitions/Label' '400': description: Invalid parameters. '401': description: User need to log in first. '500': description: Unexpected internal errors. post: summary: Post creates a label description: | This endpoint let user creates a label. parameters: - name: label in: body description: The json object of label. required: true schema: $ref: '#/definitions/Label' tags: - Products responses: '201': description: Create successfully. '400': description: Invalid parameters. '401': description: User need to log in first. '409': description: Label with the same name and same scope already exists. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. '/labels/{id}': get: summary: Get the label specified by ID. description: | This endpoint let user get the label by specific ID. parameters: - name: id in: path type: integer format: int64 required: true description: Label ID tags: - Products responses: '200': description: Get successfully. schema: $ref: '#/definitions/Label' '401': description: User need to log in first. '404': description: The resource does not exist. '500': description: Unexpected internal errors. put: summary: Update the label properties. description: | This endpoint let user update label properties. parameters: - name: id in: path type: integer format: int64 required: true description: Label ID - name: label in: body description: The updated label json object. required: true schema: $ref: '#/definitions/Label' tags: - Products responses: '200': description: Update successfully. '400': description: Invalid parameters. '401': description: User need to log in first. '404': description: The resource does not exist. '409': description: The label with the same name already exists. '500': description: Unexpected internal errors. delete: summary: Delete the label specified by ID. description: | Delete the label specified by ID. parameters: - name: id in: path type: integer format: int64 required: true description: Label ID tags: - Products responses: '200': description: Delete successfully. '400': description: Invalid parameters. '401': description: User need to log in first. '404': description: The resource does not exist. '500': description: Unexpected internal errors. '/labels/{id}/resources': get: summary: Get the resources that the label is referenced by. description: | This endpoint let user get the resources that the label is referenced by. Only the replication policies are returned for now. parameters: - name: id in: path type: integer format: int64 required: true description: Label ID tags: - Products responses: '200': description: Get successfully. schema: $ref: '#/definitions/Resource' '401': description: User need to log in first. '403': description: Forbidden. '404': description: The resource does not exist. '500': description: Unexpected internal errors. /replication/adapters: get: summary: List supported adapters. description: | This endpoint let user list supported adapters. tags: - Products responses: '200': description: Success. schema: type: array items: type: string '401': description: Unauthorized. '403': description: Forbidden. '500': description: Unexpected internal errors. /registries: get: summary: List registries. description: | This endpoint let user list filtered registries by name, if name is nil, list returns all registries. parameters: - name: name in: query type: string required: false description: Registry's name. tags: - Products responses: '200': description: List registries successfully. schema: type: array items: $ref: '#/definitions/Registry' '401': description: User need to log in first. '500': description: Unexpected internal errors. post: summary: Create a new registry. description: | This endpoint is for user to create a new registry. parameters: - name: registry in: body description: New created registry. required: true schema: $ref: '#/definitions/Registry' tags: - Products responses: '201': description: Registry created successfully. '400': description: Unsatisfied with constraints of the registry creation. '401': description: User need to log in first. '409': description: Registry name already exists. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. /registries/ping: post: summary: Ping status of a registry. description: | This endpoint checks status of a registry, the registry can be given by ID or URL (together with credential) parameters: - name: registry in: body description: Registry to ping. required: true schema: $ref: '#/definitions/Registry' tags: - Products responses: '200': description: Registry is healthy. '400': description: No proper registry information provided. '401': description: User need to log in first. '404': description: Registry not found (when registry is provided by ID). '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. '/registries/{id}': put: summary: Update a given registry. description: | This endpoint is for update a given registry. parameters: - name: id in: path type: integer format: int64 required: true description: The registry's ID. - name: repo_target in: body required: true schema: $ref: '#/definitions/PutRegistry' description: Updates registry. tags: - Products responses: '200': description: Updated registry successfully. '400': description: The registry is associated with policy which is enabled. '401': description: User need to log in first. '404': description: Registry does not exist. '409': description: Registry name is already used. '500': description: Unexpected internal errors. get: summary: Get registry. description: This endpoint is for get specific registry. tags: - Products parameters: - name: id in: path type: integer format: int64 required: true description: The registry ID. responses: '200': description: Get registry successfully. schema: $ref: '#/definitions/Registry' '401': description: User need to log in first. '404': description: Registry not found '500': description: Unexpected internal errors. delete: summary: Delete specific registry. description: | This endpoint is for to delete specific registry. parameters: - name: id in: path type: integer format: int64 required: true description: The registry's ID. tags: - Products responses: '200': description: Registry deleted successfully. '400': description: Registry's ID is invalid or the registry is used by policies. '401': description: Only admin has this authority. '404': description: Registry does not exist. '500': description: Unexpected internal errors. '/registries/{id}/info': get: summary: Get registry info. description: Get the info of one specific registry. tags: - Products parameters: - name: id in: path type: integer format: int64 required: true description: The registry ID. responses: '200': description: Get registry successfully. schema: $ref: '#/definitions/RegistryInfo' '401': description: User need to log in first. '404': description: Registry not found '500': description: Unexpected internal errors. /registries/{id}/namespace: get: summary: List namespaces of registry description: | This endpoint let user list namespaces of registry according to query. parameters: - name: id in: path type: integer required: true description: The registry ID. - name: name in: query type: string required: false description: The name of namespace. tags: - Products responses: '200': description: Success schema: type: array items: $ref: '#/definitions/Namespace' '401': description: User need to login first. '403': description: User has no privilege for the operation. '404': description: No registry found. '500': description: Unexpected internal errors. /internal/syncregistry: post: summary: Sync repositories from registry to DB. description: | This endpoint is for syncing all repositories of registry with database. tags: - Products responses: '200': description: Sync repositories successfully. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. /internal/syncquota: post: summary: Sync quota from registry/chart to DB. description: | This endpoint is for syncing quota usage of registry/chart with database. tags: - Products responses: '200': description: Sync repositories successfully. '401': description: User need to log in first. '403': description: User does not have permission of system admin role. /internal/switchquota: put: summary: Enable or disable quota. description: | This endpoint is for enable/disable quota. When quota is disabled, no resource require/release in image/chart push and delete. tags: - Products parameters: - name: switcher in: body required: true schema: $ref: '#/definitions/QuotaSwitcher' responses: '200': description: Enable/Disable quota successfully. '401': description: User need to log in first. '403': description: User does not have permission of system admin role. '500': description: Unexpected internal errors. /systeminfo: get: summary: Get general system info description: | This API is for retrieving general system info, this can be called by anonymous request. tags: - Products responses: '200': description: Get general info successfully. schema: $ref: '#/definitions/GeneralInfo' '500': description: Unexpected internal error. /systeminfo/volumes: get: summary: Get system volume info (total/free size). description: | This endpoint is for retrieving system volume info that only provides for admin user. tags: - Products responses: '200': description: Get system volumes successfully. schema: $ref: '#/definitions/SystemInfo' '401': description: User need to log in first. '403': description: User does not have permission of admin role. '500': description: Unexpected internal errors. /systeminfo/getcert: get: summary: Get default root certificate. description: | This endpoint is for downloading a default root certificate. tags: - Products responses: '200': description: Get default root certificate successfully. '404': description: Not found the default root certificate. '500': description: Unexpected internal errors. /ldap/ping: post: summary: Ping available ldap service. description: | This endpoint ping the available ldap service for test related configuration parameters. parameters: - name: ldapconf in: body description: 'ldap configuration. support input ldap service configuration. If it''s a empty request, will load current configuration from the system.' required: false schema: $ref: '#/definitions/LdapConf' tags: - Products responses: '200': description: Ping ldap service successfully. '400': description: Inviald ldap configuration parameters. '401': description: User need to login first. '403': description: Only admin has this authority. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. /ldap/groups/search: get: summary: Search available ldap groups. description: | This endpoint searches the available ldap groups based on related configuration parameters. support to search by groupname or groupdn. parameters: - name: groupname in: query type: string required: false description: Ldap group name - name: groupdn in: query type: string required: false description: The LDAP group DN tags: - Products responses: '200': description: Search ldap group successfully. schema: type: array items: $ref: '#/definitions/UserGroup' '400': description: The Ldap group DN is invalid. '404': description: No ldap group found. '500': description: Unexpected internal errors. /ldap/users/search: get: summary: Search available ldap users. description: | This endpoint searches the available ldap users based on related configuration parameters. Support searched by input ladp configuration, load configuration from the system and specific filter. parameters: - name: username in: query type: string required: false description: Registered user ID tags: - Products responses: '200': description: Search ldap users successfully. schema: type: array items: $ref: '#/definitions/LdapUsers' '401': description: User need to login first. '403': description: Only admin has this authority. '500': description: Unexpected internal errors. /ldap/users/import: post: summary: Import selected available ldap users. description: | This endpoint adds the selected available ldap users to harbor based on related configuration parameters from the system. System will try to guess the user email address and realname, add to harbor user information. If have errors when import user, will return the list of importing failed uid and the failed reason. parameters: - name: uid_list in: body description: The uid listed for importing. This list will check users validity of ldap service based on configuration from the system. required: true schema: $ref: '#/definitions/LdapImportUsers' tags: - Products responses: '200': description: Add ldap users successfully. '401': description: User need to login first. '403': description: Only admin has this authority. '404': description: Failed import some users. schema: type: array items: $ref: '#/definitions/LdapFailedImportUsers' '415': $ref: '#/responses/UnsupportedMediaType' /usergroups: get: summary: Get all user groups information description: Get all user groups information tags: - Products responses: '200': description: Get user group successfully. schema: type: array items: $ref: '#/definitions/UserGroup' '401': description: User need to log in first. '403': description: User in session does not have permission to the user group. '500': description: Unexpected internal errors. post: summary: Create user group description: Create user group information tags: - Products parameters: - name: usergroup in: body schema: $ref: '#/definitions/UserGroup' responses: '201': description: User group created successfully. '400': description: Invalid LDAP group DN. '401': description: User need to log in first. '403': description: User in session does not have permission to the user group. '409': description: A user group with same group name already exist, or an LDAP user group with same DN already exist. '500': description: Unexpected internal errors. '/usergroups/{group_id}': get: summary: Get user group information description: Get user group information tags: - Products parameters: - name: group_id in: path type: integer format: int64 required: true description: Group ID responses: '200': description: User group get successfully. schema: $ref: '#/definitions/UserGroup' '400': description: The user group id is invalid. '401': description: User need to log in first. '403': description: User in session does not have permission to the user group. '404': description: User group does not exist. '500': description: Unexpected internal errors. put: summary: Update group information description: Update user group information tags: - Products parameters: - name: group_id in: path type: integer format: int64 required: true description: Group ID - name: usergroup in: body required: false schema: $ref: '#/definitions/UserGroup' responses: '200': description: User group updated successfully. '400': description: The user group id is invalid. '401': description: User need to log in first. '403': description: Only admin has this authority. '404': description: User group does not exist. '500': description: Unexpected internal errors. delete: summary: Delete user group description: Delete user group tags: - Products parameters: - name: group_id type: integer in: path required: true responses: '200': description: User group deleted successfully. '400': description: The user group id is invalid. '401': description: User need to log in first. '403': description: Only admin has this authority. '500': description: Unexpected internal errors. /system/gc: get: summary: Get gc results. description: This endpoint let user get latest ten gc results. tags: - Products responses: '200': description: Get gc results successfully. schema: type: array items: $ref: '#/definitions/GCResult' '401': description: User need to log in first. '403': description: User does not have permission of admin role. '500': description: Unexpected internal errors. '/system/gc/{id}': get: summary: Get gc status. description: This endpoint let user get gc status filtered by specific ID. parameters: - name: id in: path type: integer format: int64 required: true description: Relevant job ID tags: - Products responses: '200': description: Get gc results successfully. schema: $ref: '#/definitions/GCResult' '401': description: User need to log in first. '403': description: User does not have permission of admin role. '500': description: Unexpected internal errors. '/system/gc/{id}/log': get: summary: Get gc job log. description: This endpoint let user get gc job logs filtered by specific ID. parameters: - name: id in: path type: integer format: int64 required: true description: Relevant job ID tags: - Products responses: '200': description: Get successfully. schema: type: string '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '404': description: The specific gc ID's log does not exist. '500': description: Unexpected internal errors. /system/gc/schedule: get: summary: Get gc's schedule. description: This endpoint is for get schedule of gc job. tags: - Products responses: '200': description: Get gc's schedule. schema: $ref: '#/definitions/AdminJobSchedule' '401': description: User need to log in first. '403': description: Only admin has this authority. '500': description: Unexpected internal errors. put: summary: Update gc's schedule. description: | This endpoint is for update gc schedule. parameters: - name: schedule in: body required: true schema: $ref: '#/definitions/AdminJobSchedule' description: Updates of gc's schedule. tags: - Products responses: '200': description: Updated gc's schedule successfully. '400': description: Invalid schedule type. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '500': description: Unexpected internal errors. post: summary: Create a gc schedule. description: | This endpoint is for update gc schedule. parameters: - name: schedule in: body required: true schema: $ref: '#/definitions/AdminJobSchedule' description: Updates of gc's schedule. tags: - Products responses: '200': description: GC schedule successfully. '400': description: Invalid schedule type. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '409': description: There is a "gc" job in progress, so the request cannot be served. '500': description: Unexpected internal errors. /system/scanAll/schedule: get: summary: Get scan_all's schedule. description: This endpoint is for getting a schedule for the scan all job, which scans all of images in Harbor. tags: - Products responses: '200': description: Get a schedule for the scan all job, which scans all of images in Harbor. schema: $ref: '#/definitions/AdminJobSchedule' '401': description: User need to log in first. '403': description: Only admin has this authority. '500': description: Unexpected internal errors. put: summary: Update scan all's schedule. description: | This endpoint is for updating the schedule of scan all job, which scans all of images in Harbor. parameters: - name: schedule in: body required: true schema: $ref: '#/definitions/AdminJobSchedule' description: Updates the schedule of scan all job, which scans all of images in Harbor. tags: - Products responses: '200': description: Updated scan_all's schedule successfully. '400': description: Invalid schedule type. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '500': description: Unexpected internal errors. post: summary: Create a schedule or a manual trigger for the scan all job. description: | This endpoint is for creating a schedule or a manual trigger for the scan all job, which scans all of images in Harbor. parameters: - name: schedule in: body required: true schema: $ref: '#/definitions/AdminJobSchedule' description: Create a schedule or a manual trigger for the scan all job. tags: - Products responses: '200': description: Updated scan_all's schedule successfully. '400': description: Invalid schedule type. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '409': description: There is a "scanall" job in progress, so the request cannot be served. '500': description: Unexpected internal errors. '503': description: Harbor is not deployed with Clair. /configurations: get: summary: Get system configurations. description: | This endpoint is for retrieving system configurations that only provides for admin user. tags: - Products responses: '200': description: Get system configurations successfully. The response body is a map. schema: $ref: '#/definitions/ConfigurationsResponse' '401': description: User need to log in first.ß '403': description: User does not have permission of admin role. '500': description: Unexpected internal errors. put: summary: Modify system configurations. description: | This endpoint is for modifying system configurations that only provides for admin user. tags: - Products parameters: - name: configurations in: body required: true schema: $ref: '#/definitions/Configurations' description: 'The configuration map can contain a subset of the attributes of the schema, which are to be updated.' responses: '200': description: Modify system configurations successfully. '401': description: User need to log in first. '403': description: User does not have permission of admin role. '500': description: Unexpected internal errors. /email/ping: post: summary: Test connection and authentication with email server. description: | Test connection and authentication with email server. parameters: - name: settings in: body description: 'Email server settings, if some of the settings are not assigned, they will be read from system configuration.' required: false schema: $ref: '#/definitions/EmailServerSetting' tags: - Products responses: '200': description: Ping email server successfully. '400': description: Inviald email server settings. '401': description: User need to login first. '403': description: Only admin has this authority. '415': $ref: '#/responses/UnsupportedMediaType' '500': description: Unexpected internal errors. /chartrepo/health: get: summary: Check the health of chart repository service. description: Check the health of chart repository service. tags: - Products - Chart Repository responses: '200': description: Health status of chart repository service is returned. schema: type: object properties: healthy: type: boolean '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' /chartrepo/{repo}/charts: get: summary: Get all the charts under the specified project description: Get all the charts under the specified project tags: - Products - Chart Repository parameters: - name: repo in: path type: string required: true description: The project name responses: '200': description: Searched for charts of project in Harbor successfully. schema: type: array items: $ref: '#/definitions/ChartInfoEntry' '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' post: summary: Upload a chart file to the specified project. description: 'Upload a chart file to the specified project. With this API, the corresponding provance file can be uploaded together with chart file at once.' tags: - Products - Chart Repository consumes: - multipart/form-data parameters: - name: repo in: path type: string required: true description: The project name - name: chart in: formData type: file required: true description: The chart file - name: prov in: formData type: file required: false description: The provance file responses: '201': description: The specified chart is successfully uploaded. '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' '507': $ref: '#/definitions/InsufficientStorageChartAPIError' /chartrepo/{repo}/charts/{name}: get: summary: Get all the versions of the specified chart description: Get all the versions of the specified chart tags: - Products - Chart Repository parameters: - name: repo in: path type: string required: true description: The project name - name: name in: path type: string required: true description: The chart name responses: '200': description: Retrieved all versions of the specified chart schema: $ref: '#/definitions/ChartVersions' '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '404': $ref: '#/definitions/NotFoundChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' delete: summary: Delete all the versions of the specified chart description: Delete all the versions of the specified chart tags: - Products - Chart Repository parameters: - name: repo in: path type: string required: true description: The project name - name: name in: path type: string required: true description: The chart name responses: '200': description: The specified chart entry is successfully deleted. '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' /chartrepo/{repo}/charts/{name}/{version}: get: summary: Get the specified chart version description: Get the specified chart version tags: - Products - Chart Repository parameters: - name: repo in: path type: string required: true description: The project name - name: name in: path type: string required: true description: The chart name - name: version in: path type: string required: true description: The chart version responses: '200': description: Successfully retrieved the chart version schema: $ref: '#/definitions/ChartVersionDetails' '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '404': $ref: '#/definitions/NotFoundChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' delete: summary: Delete the specified chart version description: Delete the specified chart version tags: - Products - Chart Repository parameters: - name: repo in: path type: string required: true description: The project name - name: name in: path type: string required: true description: The chart name - name: version in: path type: string required: true description: The chart version responses: '200': description: The specified chart entry is successfully deleted. '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '404': $ref: '#/definitions/NotFoundChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' /chartrepo/{repo}/prov: post: summary: Upload a provance file to the specified project. description: Upload a provance file to the specified project. The provance file should be targeted for an existing chart file. tags: - Products - Chart Repository consumes: - multipart/form-data parameters: - name: repo in: path type: string required: true description: The project name - name: prov in: formData type: file required: true description: The provance file responses: '201': description: The provance file is successfully uploaded. '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' '507': $ref: '#/definitions/InsufficientStorageChartAPIError' /chartrepo/charts: post: summary: Upload a chart file to the defult 'library' project. description: Upload a chart file to the default 'library' project. Uploading together with the prov file at the same time is also supported. tags: - Products - Chart Repository consumes: - multipart/form-data parameters: - name: chart in: formData type: file required: true description: The chart file - name: prov in: formData type: file required: false description: The provance file responses: '201': description: The specified chart is successfully uploaded. '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' '507': $ref: '#/definitions/InsufficientStorageChartAPIError' /chartrepo/{repo}/charts/{name}/{version}/labels: get: summary: Return the attahced labels of chart. description: Return the attahced labels of the specified chart version. tags: - Products - Chart Repository - Label parameters: - name: repo in: path type: string required: true description: The project name - name: name in: path type: string required: true description: The chart name - name: version in: path type: string required: true description: The chart version responses: '200': $ref: '#/definitions/Labels' '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '404': $ref: '#/definitions/NotFoundChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' post: summary: Mark label to chart. description: Mark label to the specified chart version. tags: - Products - Chart Repository - Label parameters: - name: repo in: path type: string required: true description: The project name - name: name in: path type: string required: true description: The chart name - name: version in: path type: string required: true description: The chart version - name: label in: body required: true schema: $ref: '#/definitions/Label' description: 'The label being marked to the chart version' responses: '200': description: The label is successfully marked to the chart version. '400': $ref: '#/definitions/BadRequestFormatedError' '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '404': $ref: '#/definitions/NotFoundChartAPIError' '409': $ref: '#/definitions/ConflictFormatedError' '500': $ref: '#/definitions/InternalChartAPIError' /chartrepo/{repo}/charts/{name}/{version}/labels/{id}: delete: summary: Remove label from chart. description: Remove label from the specified chart version. tags: - Products - Chart Repository - Label parameters: - name: repo in: path type: string required: true description: The project name - name: name in: path type: string required: true description: The chart name - name: version in: path type: string required: true description: The chart version - name: id in: path type: integer required: true description: The label ID responses: '200': description: The label is successfully unmarked from the chart version. '400': $ref: '#/definitions/BadRequestFormatedError' '401': $ref: '#/definitions/UnauthorizedChartAPIError' '403': $ref: '#/definitions/ForbiddenChartAPIError' '404': $ref: '#/definitions/NotFoundChartAPIError' '500': $ref: '#/definitions/InternalChartAPIError' '/projects/{project_id}/robots': get: summary: Get all robot accounts of specified project description: Get all robot accounts of specified project parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. tags: - Products - Robot Account responses: '200': description: Get project robot accounts successfully. schema: type: array items: $ref: '#/definitions/RobotAccount' '400': description: The project id is invalid. '401': description: User need to log in first. '403': description: User in session does not have permission to the project. '404': description: Project ID does not exist. '500': description: Unexpected internal errors. post: summary: Create a robot account for project description: Create a robot account for project tags: - Products - Robot Account parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: robot in: body description: Request body of creating a robot account. required: true schema: $ref: '#/definitions/RobotAccountCreate' responses: '201': description: Project member created successfully. schema: $ref: '#/definitions/RobotAccountPostRep' '400': description: Project id is not valid. '401': description: User need to log in first. '403': description: User in session does not have permission to the project. '409': description: An robot account with same name already exist in the project. '500': description: Unexpected internal errors. '/projects/{project_id}/robots/{robot_id}': get: summary: Return the infor of the specified robot account. description: Return the infor of the specified robot account. tags: - Products - Robot Account parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: robot_id in: path type: integer format: int64 required: true description: The ID of robot account. responses: '200': description: Robot account information. schema: $ref: '#/definitions/RobotAccount' '401': description: User need to log in first. '403': description: User in session does not have permission to the project. '404': description: The robot account is not found. '500': description: Unexpected internal errors. put: summary: Update status of robot account. description: Used to disable/enable a specified robot account. tags: - Products - Robot Account parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: robot_id in: path type: integer format: int64 required: true description: The ID of robot account. - name: robot in: body description: Request body of enable/disable a robot account. required: true schema: $ref: '#/definitions/RobotAccountUpdate' responses: '200': description: Robot account has been modified success. '500': description: Unexpected internal errors. delete: summary: Delete the specified robot account description: Delete the specified robot account tags: - Products - Robot Account parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: robot_id in: path type: integer format: int64 required: true description: The ID of robot account. responses: '200': description: The specified robot account is successfully deleted. '401': description: User need to log in first. '403': description: User in session does not have permission to the project. '404': description: The robot account is not found. '500': description: Unexpected internal errors. '/system/oidc/ping': post: summary: Test the OIDC endpoint. description: Test the OIDC endpoint, the setting of the endpoint is provided in the request. This API can only be called by system admin. tags: - Products - System parameters: - name: endpoint in: body description: Request body for OIDC endpoint to be tested. required: true schema: type: object properties: url: type: string description: The URL of OIDC endpoint to be tested. verify_cert: type: boolean description: Whether the certificate should be verified responses: '200': description: Ping succeeded. The OIDC endpoint is valid. '400': description: The ping failed '401': description: User need to log in first. '403': description: User does not have permission to call this API '/system/CVEWhitelist': get: summary: Get the system level whitelist of CVE. description: Get the system level whitelist of CVE. This API can be called by all authenticated users. tags: - Products - System responses: '200': description: Successfully retrieved the CVE whitelist. schema: $ref: "#/definitions/CVEWhitelist" '401': description: User is not authenticated. '500': description: Unexpected internal errors. put: summary: Update the system level whitelist of CVE. description: This API overwrites the system level whitelist of CVE with the list in request body. Only system Admin has permission to call this API. tags: - Products - System parameters: - in: body name: whitelist description: The whitelist with new content schema: $ref: "#/definitions/CVEWhitelist" responses: '200': description: Successfully updated the CVE whitelist. '401': description: User is not authenticated. '403': description: User does not have permission to call this API. '500': description: Unexpected internal errors. '/quotas': get: summary: List quotas description: List quotas tags: - Products parameters: - name: reference in: query description: The reference type of quota. required: false type: string - name: reference_id in: query description: The reference id of quota. required: false type: string - name: sort in: query type: string required: false description: | Sort method, valid values include: 'hard.resource_name', '-hard.resource_name', 'used.resource_name', '-used.resource_name'. Here '-' stands for descending order, resource_name should be the real resource name of the quota. - name: page in: query type: integer format: int32 required: false description: 'The page number, default is 1.' - name: page_size in: query type: integer format: int32 required: false description: 'The size of per page, default is 10, maximum is 100.' responses: '200': description: Successfully retrieved the quotas. schema: type: array items: $ref: '#/definitions/Quota' headers: X-Total-Count: description: The total count of access logs type: integer Link: description: Link refers to the previous page and next page type: string '401': description: User is not authenticated. '403': description: User does not have permission to call this API. '500': description: Unexpected internal errors. '/quotas/{id}': get: summary: Get the specified quota description: Get the specified quota tags: - Products - Quota parameters: - name: id in: path type: integer required: true description: Quota ID responses: '200': description: Successfully retrieved the quota. schema: $ref: '#/definitions/Quota' '401': description: User need to log in first. '403': description: User does not have permission to call this API '404': description: Quota does not exist. '500': description: Unexpected internal errors. put: summary: Update the specified quota description: Update hard limits of the specified quota tags: - Products - Quota parameters: - name: id in: path type: integer required: true description: Quota ID - name: hard in: body required: true description: The new hard limits for the quota schema: $ref: '#/definitions/QuotaUpdateReq' responses: '200': description: Updated quota hard limits successfully. '400': description: Illegal format of quota update request. '401': description: User need to log in first. '403': description: User does not have permission to the quota. '404': description: Quota ID does not exist. '500': description: Unexpected internal errors. '/projects/{project_id}/webhook/policies': get: summary: List project webhook policies. description: | This endpoint returns webhook policies of a project. parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. tags: - Products responses: '200': description: List project webhook policies successfully. schema: type: array items: $ref: '#/definitions/WebhookPolicy' '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to list webhook policies of the project. '500': description: Unexpected internal errors. post: summary: Create project webhook policy. description: | This endpoint create a webhook policy if the project does not have one. parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID - name: policy in: body description: Properties "targets" and "event_types" needed. required: true schema: $ref: '#/definitions/WebhookPolicy' tags: - Products responses: '201': description: Project webhook policy create successfully. '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to create webhook policy of the project. '500': description: Unexpected internal errors. '/projects/{project_id}/webhook/policies/{policy_id}': get: summary: Get project webhook policy description: | This endpoint returns specified webhook policy of a project. parameters: - name: project_id in: path description: Relevant project ID. required: true type: integer format: int64 - name: policy_id in: path description: The id of webhook policy. required: true type: integer format: int64 tags: - Products responses: '200': description: Get webhook policy successfully. schema: $ref: '#/definitions/WebhookPolicy' '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to get webhook policy of the project. '404': description: Webhook policy ID does not exist. '500': description: Internal server errors. put: summary: Update webhook policy of a project. description: | This endpoint is aimed to update the webhook policy of a project. parameters: - name: project_id in: path description: Relevant project ID. required: true type: integer format: int64 - name: policy_id in: path description: The id of webhook policy. required: true type: integer format: int64 - name: policy in: body description: All properties needed except "id", "project_id", "creation_time", "update_time". required: true schema: $ref: '#/definitions/WebhookPolicy' tags: - Products responses: '200': description: Update webhook policy successfully. '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to update webhook policy of the project. '404': description: Webhook policy ID does not exist. '500': description: Internal server errors. delete: summary: Delete webhook policy of a project description: | This endpoint is aimed to delete webhookpolicy of a project. parameters: - name: project_id in: path description: Relevant project ID. required: true type: integer format: int64 - name: policy_id in: path description: The id of webhook policy. required: true type: integer format: int64 tags: - Products responses: '200': description: Delete webhook policy successfully. '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to delete webhook policy of the project. '404': description: Webhook policy ID does not exist. '500': description: Internal server errors. '/projects/{project_id}/webhook/policies/test': post: summary: Test project webhook connection description: | This endpoint tests webhook connection of a project. parameters: - name: project_id in: path description: Relevant project ID. required: true type: integer format: int64 - name: policy in: body description: Only property "targets" needed. required: true schema: $ref: '#/definitions/WebhookPolicy' tags: - Products responses: '200': description: Test webhook connection successfully. '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to get webhook policy of the project. '500': description: Internal server errors. '/projects/{project_id}/webhook/lasttrigger': get: summary: Get project webhook policy last trigger info description: | This endpoint returns last trigger information of project webhook policy. parameters: - name: project_id in: path description: Relevant project ID. required: true type: integer format: int64 tags: - Products responses: '200': description: Test webhook connection successfully. schema: type: array items: $ref: '#/definitions/WebhookLastTrigger' '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to get webhook policy of the project. '500': description: Internal server errors. '/projects/{project_id}/webhook/jobs': get: summary: List project webhook jobs description: | This endpoint returns webhook jobs of a project. parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: policy_id in: query type: integer format: int64 required: true description: The policy ID. tags: - Products responses: '200': description: List project webhook jobs successfully. schema: type: array items: $ref: '#/definitions/WebhookJob' '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to list webhook jobs of the project. '500': description: Unexpected internal errors. '/projects/{project_id}/immutabletagrules': get: summary: List all immutable tag rules of current project description: | This endpoint returns the immutable tag rules of a project parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. tags: - Products responses: '200': description: List project immutable tag rules successfully. schema: type: array items: $ref: '#/definitions/ImmutableTagRule' '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to list immutable tag rules of the project. '500': description: Unexpected internal errors. post: summary: Add an immutable tag rule to current project description: | This endpoint add an immutable tag rule to the project parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: immutabletagrule in: body schema: $ref: '#/definitions/ImmutableTagRule' tags: - Products responses: '200': description: Add the immutable tag rule successfully. '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to get immutable tag rule of the project. '500': description: Internal server errors. '/projects/{project_id}/immutabletagrules/{id}': put: summary: Update the immutable tag rule or enable or disable the rule parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: id in: path type: integer format: int64 required: true description: Immutable tag rule ID. - name: immutabletagrule in: body schema: $ref: '#/definitions/ImmutableTagRule' tags: - Products responses: '200': description: Update the immutable tag rule successfully. '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to update the immutable tag rule of the project. '500': description: Internal server errors. delete: summary: Delete the immutable tag rule. parameters: - name: project_id in: path type: integer format: int64 required: true description: Relevant project ID. - name: id in: path type: integer format: int64 required: true description: Immutable tag rule ID. tags: - Products responses: '200': description: Delete the immutable tag rule successfully. '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission to delete immutable tags of the project. '500': description: Internal server errors. '/retentions/metadatas': get: summary: Get Retention Metadatas description: Get Retention Metadatas. tags: - Products - Retention responses: '200': description: Get Retention Metadatas successfully. schema: type: object $ref: '#/definitions/RetentionMetadata' '/retentions': post: summary: Create Retention Policy description: | Create Retention Policy, you can reference metadatas API for the policy model. You can check project metadatas to find whether a retention policy is already binded. This method should only be called when no retention policy binded to project yet. tags: - Products - Retention parameters: - name: policy in: body description: Create Retention Policy successfully. required: true schema: $ref: '#/definitions/RetentionPolicy' responses: '201': description: Project created successfully. '400': description: Illegal format of provided ID value. '401': description: User need to log in first. '403': description: User have no permission. '500': description: Unexpected internal errors. '/retentions/{id}': get: summary: Get Retention Policy description: Get Retention Policy. tags: - Products - Retention parameters: - name: id in: path type: integer format: int64 required: true description: Retention ID. responses: '200': description: Get Retention Policy successfully. schema: type: object $ref: '#/definitions/RetentionPolicy' '401': description: User need to log in first. '403': description: User have no permission. '500': description: Unexpected internal errors. put: summary: Update Retention Policy description: | Update Retention Policy, you can reference metadatas API for the policy model. You can check project metadatas to find whether a retention policy is already binded. This method should only be called when retention policy has already binded to project. tags: - Products parameters: - name: id in: path type: integer format: int64 required: true description: Retention ID. - name: policy in: body required: true schema: $ref: '#/definitions/RetentionPolicy' responses: '200': description: Update Retention Policy successfully. '401': description: User need to log in first. '403': description: User have no permission. '500': description: Unexpected internal errors. '/retentions/{id}/executions': post: summary: Trigger a Retention job description: Trigger a Retention job, if dry_run is True, nothing would be deleted actually. tags: - Products - Retention parameters: - name: id in: path type: integer format: int64 required: true description: Retention ID. - name: action in: body required: true schema: type: object properties: dry_run: type: boolean responses: '200': description: Trigger a Retention job successfully. '401': description: User need to log in first. '403': description: User have no permission. '500': description: Unexpected internal errors. get: summary: Get a Retention job description: Get a Retention job, job status may be delayed before job service schedule it up. tags: - Products - Retention parameters: - name: id in: path type: integer format: int64 required: true description: Retention ID. responses: '200': description: Get a Retention job successfully. schema: type: array items: type: object $ref: '#/definitions/RetentionExecution' '401': description: User need to log in first. '403': description: User have no permission. '500': description: Unexpected internal errors. '/retentions/{id}/executions/{eid}': patch: summary: Stop a Retention job description: Stop a Retention job, only support "stop" action now. tags: - Products - Retention parameters: - name: id in: path type: integer format: int64 required: true description: Retention ID. - name: eid in: path type: integer format: int64 required: true description: Retention execution ID. - name: action in: body description: The action, only support "stop" now. required: true schema: type: object properties: action: type: string responses: '200': description: Stop a Retention job successfully. '401': description: User need to log in first. '403': description: User have no permission. '500': description: Unexpected internal errors. '/retentions/{id}/executions/{eid}/tasks': get: summary: Get Retention job tasks description: Get Retention job tasks, each repository as a task. tags: - Products - Retention parameters: - name: id in: path type: integer format: int64 required: true description: Retention ID. - name: eid in: path type: integer format: int64 required: true description: Retention execution ID. responses: '200': description: Get Retention job tasks successfully. schema: type: array items: type: object $ref: '#/definitions/RetentionExecutionTask' '401': description: User need to log in first. '403': description: User have no permission. '500': description: Unexpected internal errors. '/retentions/{id}/executions/{eid}/tasks/{tid}': get: summary: Get Retention job task log description: Get Retention job task log, tags ratain or deletion detail will be shown in a table. tags: - Products - Retention parameters: - name: id in: path type: integer format: int64 required: true description: Retention ID. - name: eid in: path type: integer format: int64 required: true description: Retention execution ID. - name: tid in: path type: integer format: int64 required: true description: Retention execution ID. responses: '200': description: Get Retention job task log successfully. schema: type: string '401': description: User need to log in first. '403': description: User have no permission. '500': description: Unexpected internal errors. responses: OK: description: 'Success' Created: description: 'Created' BadRequest: description: 'Bad Request' Unauthorized: description: 'Unauthorized' Forbidden: description: 'Forbidden' NotFound: description: 'Not Found' Conflict: description: 'Conflict' PreconditionFailed: description: 'Precondition Failed' UnsupportedMediaType: description: 'The Media Type of the request is not supported, it has to be "application/json"' InternalServerError: description: 'Internal Server Error' definitions: Search: type: object properties: project: description: Search results of the projects that matched the filter keywords. type: array items: $ref: '#/definitions/Project' repository: description: Search results of the repositories that matched the filter keywords. type: array items: $ref: '#/definitions/SearchRepository' chart: description: Search results of the charts that macthed the filter keywords. type: array items: $ref: '#/definitions/SearchResult' RetagReq: type: object properties: tag: description: new tag to be created type: string src_image: description: Source image to be retagged, e.g. 'stage/app:v1.0' type: string override: description: If target tag already exists, whether to override it type: boolean SearchRepository: type: object properties: project_id: type: integer description: The ID of the project that the repository belongs to project_name: type: string description: The name of the project that the repository belongs to project_public: type: boolean description: 'The flag to indicate the publicity of the project that the repository belongs to (1 is public, 0 is not)' repository_name: type: string description: The name of the repository pull_count: type: integer description: The count how many times the repository is pulled tags_count: type: integer description: The count of tags in the repository ProjectReq: type: object properties: project_name: type: string description: The name of the project. metadata: description: The metadata of the project. $ref: '#/definitions/ProjectMetadata' cve_whitelist: description: The CVE whitelist of the project. $ref: '#/definitions/CVEWhitelist' count_limit: type: integer format: int64 description: The count quota of the project. storage_limit: type: integer format: int64 description: The storage quota of the project. Project: type: object properties: project_id: type: integer format: int32 description: Project ID owner_id: type: integer format: int32 description: The owner ID of the project always means the creator of the project. name: type: string description: The name of the project. creation_time: type: string description: The creation time of the project. update_time: type: string description: The update time of the project. deleted: type: boolean description: A deletion mark of the project. owner_name: type: string description: The owner name of the project. togglable: type: boolean description: Correspond to the UI about whether the project's publicity is updatable (for UI) current_user_role_id: type: integer description: The role ID of the current user who triggered the API (for UI) repo_count: type: integer description: The number of the repositories under this project. chart_count: type: integer description: The total number of charts under this project. metadata: description: The metadata of the project. $ref: '#/definitions/ProjectMetadata' cve_whitelist: description: The CVE whitelist of this project. $ref: '#/definitions/CVEWhitelist' ProjectMetadata: type: object properties: public: type: string description: 'The public status of the project. The valid values are "true", "false".' enable_content_trust: type: string description: 'Whether content trust is enabled or not. If it is enabled, user can''t pull unsigned images from this project. The valid values are "true", "false".' prevent_vul: type: string description: 'Whether prevent the vulnerable images from running. The valid values are "true", "false".' severity: type: string description: 'If the vulnerability is high than severity defined here, the images can''t be pulled. The valid values are "negligible", "low", "medium", "high", "critical".' auto_scan: type: string description: 'Whether scan images automatically when pushing. The valid values are "true", "false".' reuse_sys_cve_whitelist: type: string description: 'Whether this project reuse the system level CVE whitelist as the whitelist of its own. The valid values are "true", "false". If it is set to "true" the actual whitelist associate with this project, if any, will be ignored.' ProjectSummary: type: object properties: repo_count: type: integer description: The number of the repositories under this project. chart_count: type: integer description: The total number of charts under this project. project_admin_count: type: integer description: The total number of project admin members. master_count: type: integer description: The total number of master members. developer_count: type: integer description: The total number of developer members. guest_count: type: integer description: The total number of guest members. quota: type: object properties: hard: $ref: "#/definitions/ResourceList" description: The hard limits of the quota used: $ref: "#/definitions/ResourceList" description: The used status of the quota Manifest: type: object properties: manifest: type: object description: The detail of manifest. config: type: string description: The config of the repository. User: type: object properties: user_id: type: integer format: int description: The ID of the user. username: type: string email: type: string password: type: string realname: type: string comment: type: string deleted: type: boolean role_name: type: string role_id: type: integer format: int has_admin_role: type: boolean reset_uuid: type: string Salt: type: string creation_time: type: string update_time: type: string UserSearch: type: object properties: user_id: type: integer format: int description: The ID of the user. username: type: string Password: type: object properties: old_password: type: string description: The user's existing password. new_password: type: string description: New password for marking as to be updated. AccessLog: type: object properties: log_id: type: integer description: The ID of the log entry. username: type: string description: Username of the user in this log entry. repo_name: type: string description: Name of the repository in this log entry. repo_tag: type: string description: Tag of the repository in this log entry. operation: type: string description: The operation against the repository in this log entry. op_time: type: string description: The time when this operation is triggered. Role: type: object properties: role_id: type: integer format: int32 description: ID in table. role_code: type: string description: Description of permissions for the role. role_name: type: string description: Name the the role. role_mask: type: string RoleParam: type: object properties: roles: type: array items: type: integer format: int32 description: Role ID for updating project role member. username: type: string description: Username relevant to a project role member. StatisticMap: type: object properties: private_project_count: type: integer format: int32 description: The count of the private projects which the user is a member of. private_repo_count: type: integer format: int32 description: The count of the private repositories belonging to the projects which the user is a member of. public_project_count: type: integer format: int32 description: The count of the public projects. public_repo_count: type: integer format: int32 description: The count of the public repositories belonging to the public projects which the user is a member of. total_project_count: type: integer format: int32 description: 'The count of the total projects, only be seen when the is admin.' total_repo_count: type: integer format: int32 description: 'The count of the total repositories, only be seen when the user is admin.' JobStatus: type: object properties: id: type: integer format: int64 description: The job ID. status: type: string description: The status of the job. repository: type: string description: The repository handled by the job. policy_id: type: integer format: int64 description: The ID of the policy that triggered this job. operation: type: string description: The operation of the job. tags: type: array description: The repository's used tag list. items: $ref: '#/definitions/Tags' creation_time: type: string description: The creation time of the job. update_time: type: string description: The update time of the job. Tags: type: object properties: tag: type: string description: The repository's used tag. ReplicationPolicy: type: object properties: id: type: integer format: int64 description: The policy ID. name: type: string description: The policy name. description: type: string description: The description of the policy. src_registry: description: The source registry. $ref: '#/definitions/Registry' dest_registry: description: The destination registry. $ref: '#/definitions/Registry' dest_namespace: type: string description: The destination namespace. trigger: $ref: '#/definitions/ReplicationTrigger' filters: type: array description: The replication policy filter array. items: $ref: '#/definitions/ReplicationFilter' deletion: type: boolean description: Whether to replicate the deletion operation. override: type: boolean description: Whether to override the resources on the destination registry. enabled: type: boolean description: Whether the policy is enabled or not. creation_time: type: string description: The create time of the policy. update_time: type: string description: The update time of the policy. ReplicationTrigger: type: object properties: type: type: string description: 'The replication policy trigger type. The valid values are manual, event_based and scheduled.' trigger_settings: $ref: '#/definitions/TriggerSettings' TriggerSettings: type: object properties: cron: type: string description: The cron string for scheduled trigger ReplicationFilter: type: object properties: type: type: string description: 'The replication policy filter type.' value: type: string description: 'The value of replication policy filter.' RegistryCredential: type: object properties: type: type: string description: Credential type, such as 'basic', 'oauth'. access_key: type: string description: Access key, e.g. user name when credential type is 'basic'. access_secret: type: string description: Access secret, e.g. password when credential type is 'basic'. Registry: type: object properties: id: type: integer format: int64 description: The registry ID. url: type: string description: The registry URL string. name: type: string description: The registry name. credential: $ref: '#/definitions/RegistryCredential' type: type: string description: Type of the registry, e.g. 'harbor'. insecure: type: boolean description: Whether or not the certificate will be verified when Harbor tries to access the server. description: type: string description: Description of the registry. status: type: string description: Health status of the registry. creation_time: type: string description: The create time of the policy. update_time: type: string description: The update time of the policy. PingRegistry: type: object properties: id: type: integer description: The ID of the registry type: type: string description: Type of the registry, e.g. 'harbor'. url: type: string description: The registry address URL string. credential_type: type: string description: Credential type of the registry, e.g. 'basic'. access_key: type: string description: The registry access key. access_secret: type: string description: The registry access secret. insecure: type: boolean description: Whether or not the certificate will be verified when Harbor tries to access the server. PutRegistry: type: object properties: name: type: string description: The registry name. description: type: string description: Description of the registry. url: type: string description: The registry address URL string. credential_type: type: string description: Credential type of the registry, e.g. 'basic'. access_key: type: string description: The registry access key. access_secret: type: string description: The registry access secret. insecure: type: boolean description: Whether or not the certificate will be verified when Harbor tries to access the server. HasAdminRole: type: object properties: has_admin_role: type: boolean description: '1-has admin, 0-not.' UserProfile: type: object properties: email: type: string description: The new email. realname: type: string description: The new realname. comment: type: string description: The new comment. Storage: type: object properties: total: type: integer format: int64 description: Total volume size. free: type: integer format: int64 description: Free volume size. GeneralInfo: type: object properties: with_notary: type: boolean description: If the Harbor instance is deployed with nested notary. with_clair: type: boolean description: If the Harbor instance is deployed with nested clair. with_admiral: type: boolean description: If the Harbor instance is deployed with Admiral. admiral_endpoint: type: string description: The url of the endpoint of admiral instance. registry_url: type: string description: The url of registry against which the docker command should be issued. external_url: type: string description: The external URL of Harbor, with protocol. auth_mode: type: string description: The auth mode of current Harbor instance. project_creation_restriction: type: string description: 'Indicate who can create projects, it could be ''adminonly'' or ''everyone''.' self_registration: type: boolean description: Indicate whether the Harbor instance enable user to register himself. has_ca_root: type: boolean description: Indicate whether there is a ca root cert file ready for download in the file system. harbor_version: type: string description: The build version of Harbor. next_scan_all: type: integer description: 'The UTC time in milliseconds, after which user can call scanAll API to scan all images.' clair_vulnerability_status: type: object description: The status of vulnerability data of Clair. properties: overall_last_update: type: integer description: 'The UTC timestamp in milliseconds of last successful update for Clair vulnerability data, when all the updaters are successfully executed.' details: type: array description: Detail timestamp of different namespace. This is introduced to handle the case when some updaters are executed successfully and some not. items: $ref: '#/definitions/VulnNamespaceTimestamp' VulnNamespaceTimestamp: type: object properties: namespace: type: string description: The namespace of the Vulnerability last_update: type: integer description: The UTC timestamp in miliseconds of last successful update for vulnerability data. SystemInfo: type: object properties: storage: type: array description: The storage of system. items: $ref: '#/definitions/Storage' LdapConf: type: object properties: ldap_url: type: string description: The url of ldap service. ldap_search_dn: type: string description: The search dn of ldap service. ldap_search_password: type: string description: The search password of ldap service. ldap_base_dn: type: string description: The base dn of ldap service. ldap_filter: type: string description: The serach filter of ldap service. ldap_uid: type: string description: The serach uid from ldap service attributes. ldap_scope: type: integer format: int64 description: The serach scope of ldap service. ldap_connection_timeout: type: integer format: int64 description: The connect timeout of ldap service(second). LdapUsers: type: object properties: ldap_username: type: string description: search ldap user name based on ldapconf. ldap_realname: type: string description: system will try to guess the user realname form "uid" or "cn" attribute. ldap_email: type: string description: system will try to guess the user email address form "mail" or "email" attribute. LdapImportUsers: type: object properties: ldap_uid_list: type: array description: selected uid list items: type: string LdapFailedImportUsers: type: object properties: ldap_uid: type: string description: the uid can't add to system. error: type: string description: fail reason. EmailServerSetting: type: object properties: email_host: type: string description: The host of email server. email_port: type: integer description: The port of email server. email_username: type: string description: The username of email server. email_password: type: string description: The password of email server. email_ssl: type: boolean description: Use ssl/tls or not. email_identity: type: string description: The dentity of email server. RepoSignature: type: object properties: tag: type: string description: The tag of image. hashes: type: object description: The JSON object of the hash of the image. DetailedTag: type: object properties: digest: type: string description: The digest of the tag. name: type: string description: The name of the tag. size: type: integer description: The size of the image. architecture: type: string description: The architecture of the image. os: type: string description: The os of the image. docker_version: type: string description: The version of docker which builds the image. author: type: string description: The author of the image. created: type: string description: The build time of the image. signature: type: object description: 'The signature of image, defined by RepoSignature. If it is null, the image is unsigned.' scan_overview: type: object description: The overview of the scan result. labels: type: array description: The label list. items: $ref: '#/definitions/Label' ComponentOverviewEntry: type: object properties: severity: type: integer description: '1-None/Negligible, 2-Unknown, 3-Low, 4-Medium, 5-High' count: type: integer description: number of the components with certain severity. Repository: type: object properties: id: type: integer description: The ID of repository. name: type: string description: The name of repository. project_id: type: integer description: The project ID of repository. description: type: string description: The description of repository. pull_count: type: integer description: The pull count of repository. star_count: type: integer description: The star count of repository. tags_count: type: integer description: The tags count of repository. labels: type: array description: The label list. items: $ref: '#/definitions/Label' creation_time: type: string description: The creation time of repository. update_time: type: string description: The update time of repository. VulnerabilityItem: type: object properties: id: type: string description: 'ID of the vulnerability, normally it is the CVE ID' severity: type: integer description: '1-Negligible, 2-Unknown, 3-Low, 4-Medium, 5-High' package: type: string description: The packge that introduces the vulnerability. version: type: string description: The version of the package. description: type: string description: The description of the vulnerability. fixedVersion: type: string description: 'The version which the vulnerability is fixed, this is an optional property.' Configurations: type: object properties: auth_mode: type: string description: 'The auth mode of current system, such as "db_auth", "ldap_auth"' count_per_project: type: string description: The default count quota for the new created projects. email_from: type: string description: The sender name for Email notification. email_host: type: string description: The hostname of SMTP server that sends Email notification. email_port: type: integer description: The port of SMTP server. email_identity: type: string description: By default it's empty so the email_username is picked. email_username: type: string description: The username for authenticate against SMTP server. email_ssl: type: boolean description: 'When it''s set to true the system will access Email server via TLS by default. If it''s set to false, it still will handle "STARTTLS" from server side.' email_insecure: type: boolean description: Whether or not the certificate will be verified when Harbor tries to access the email server. ldap_url: type: string description: The URL of LDAP server. ldap_base_dn: type: string description: The Base DN for LDAP binding. ldap_filter: type: string description: The filter for LDAP binding. ldap_scope: type: integer description: '0-LDAP_SCOPE_BASE, 1-LDAP_SCOPE_ONELEVEL, 2-LDAP_SCOPE_SUBTREE' ldap_uid: type: string description: 'The attribute which is used as identity for the LDAP binding, such as "CN" or "SAMAccountname"' ldap_search_dn: type: string description: The DN of the user to do the search. ldap_timeout: type: integer description: timeout in seconds for connection to LDAP server. ldap_group_attribute_name: type: string description: 'The attribute which is used as identity of the LDAP group, default is cn.' ldap_group_base_dn: type: string description: The base DN to search LDAP group. ldap_group_search_filter: type: string description: The filter to search the ldap group. ldap_group_search_scope: type: integer description: 'The scope to search ldap. ''0-LDAP_SCOPE_BASE, 1-LDAP_SCOPE_ONELEVEL, 2-LDAP_SCOPE_SUBTREE''' ldap_group_admin_dn: type: string description: Specify the ldap group which have the same privilege with Harbor admin. project_creation_restriction: type: string description: This attribute restricts what users have the permission to create project. It can be "everyone" or "adminonly". quota_per_project_enable: type: boolean description: This attribute indicates whether quota per project enabled in harbor read_only: type: boolean description: '''docker push'' is prohibited by Harbor if you set it to true. ' self_registration: type: boolean description: 'Whether the Harbor instance supports self-registration. If it''s set to false, admin need to add user to the instance.' storage_per_project: type: string description: The default storage quota for the new created projects. token_expiration: type: integer description: 'The expiration time of the token for internal Registry, in minutes.' verify_remote_cert: type: boolean description: Whether or not the certificate will be verified when Harbor tries to access a remote Harbor instance for replication. scan_all_policy: type: object properties: type: type: string description: 'The type of scan all policy, currently the valid values are "none" and "daily"' parameter: type: object properties: daily_time: type: integer description: 'The offset in seconds of UTC 0 o''clock, only valid when the policy type is "daily"' description: 'The parameters of the policy, the values are dependant on the type of the policy.' ConfigurationsResponse: type: object properties: auth_mode: $ref: '#/definitions/StringConfigItem' description: 'The auth mode of current system, such as "db_auth", "ldap_auth"' count_per_project: $ref: '#/definitions/IntegerConfigItem' description: The default count quota for the new created projects. email_from: $ref: '#/definitions/StringConfigItem' description: The sender name for Email notification. email_host: $ref: '#/definitions/StringConfigItem' description: The hostname of SMTP server that sends Email notification. email_port: $ref: '#/definitions/IntegerConfigItem' description: The port of SMTP server. email_identity: $ref: '#/definitions/StringConfigItem' description: By default it's empty so the email_username is picked. email_username: $ref: '#/definitions/StringConfigItem' description: The username for authenticate against SMTP server. email_ssl: $ref: '#/definitions/BoolConfigItem' description: 'When it''s set to true the system will access Email server via TLS by default. If it''s set to false, it still will handle "STARTTLS" from server side.' email_insecure: $ref: '#/definitions/BoolConfigItem' description: Whether or not the certificate will be verified when Harbor tries to access the email server. ldap_url: $ref: '#/definitions/StringConfigItem' description: The URL of LDAP server. ldap_base_dn: $ref: '#/definitions/StringConfigItem' description: The Base DN for LDAP binding. ldap_filter: $ref: '#/definitions/StringConfigItem' description: The filter for LDAP binding. ldap_scope: type: integer description: '0-LDAP_SCOPE_BASE, 1-LDAP_SCOPE_ONELEVEL, 2-LDAP_SCOPE_SUBTREE' ldap_uid: $ref: '#/definitions/StringConfigItem' description: 'The attribute which is used as identity for the LDAP binding, such as "CN" or "SAMAccountname"' ldap_search_dn: type: string description: The DN of the user to do the search. ldap_timeout: $ref: '#/definitions/IntegerConfigItem' description: timeout in seconds for connection to LDAP server. ldap_group_attribute_name: $ref: '#/definitions/StringConfigItem' description: 'The attribute which is used as identity of the LDAP group, default is cn.' ldap_group_base_dn: $ref: '#/definitions/StringConfigItem' description: The base DN to search LDAP group. ldap_group_search_filter: $ref: '#/definitions/StringConfigItem' description: The filter to search the ldap group. ldap_group_search_scope: $ref: '#/definitions/IntegerConfigItem' description: 'The scope to search ldap. ''0-LDAP_SCOPE_BASE, 1-LDAP_SCOPE_ONELEVEL, 2-LDAP_SCOPE_SUBTREE''' ldap_group_admin_dn: $ref: '#/definitions/StringConfigItem' description: Specify the ldap group which have the same privilege with Harbor admin. project_creation_restriction: $ref: '#/definitions/StringConfigItem' description: This attribute restricts what users have the permission to create project. It can be "everyone" or "adminonly". quota_per_project_enable: $ref: '#/definitions/BoolConfigItem' description: This attribute indicates whether quota per project enabled in harbor read_only: $ref: '#/definitions/BoolConfigItem' description: '''docker push'' is prohibited by Harbor if you set it to true. ' self_registration: $ref: '#/definitions/BoolConfigItem' description: 'Whether the Harbor instance supports self-registration. If it''s set to false, admin need to add user to the instance.' storage_per_project: $ref: '#/definitions/IntegerConfigItem' description: The default storage quota for the new created projects. token_expiration: $ref: '#/definitions/IntegerConfigItem' description: 'The expiration time of the token for internal Registry, in minutes.' verify_remote_cert: $ref: '#/definitions/BoolConfigItem' description: Whether or not the certificate will be verified when Harbor tries to access a remote Harbor instance for replication. scan_all_policy: type: object properties: type: type: string description: 'The type of scan all policy, currently the valid values are "none" and "daily"' parameter: type: object properties: daily_time: type: integer description: 'The offset in seconds of UTC 0 o''clock, only valid when the policy type is "daily"' description: 'The parameters of the policy, the values are dependant on the type of the policy.' RepositoryDescription: type: object properties: description: type: string description: The description of the repository. Label: type: object properties: id: type: integer description: The ID of label. name: type: string description: The name of label. description: type: string description: The description of label. color: type: string description: The color of label. scope: type: string description: 'The scope of label, g for global labels and p for project labels.' project_id: type: integer description: The project ID if the label is a project label. creation_time: type: string description: The creation time of label. update_time: type: string description: The update time of label. deleted: type: boolean description: The label is deleted or not. ProjectMemberEntity: type: object properties: id: type: integer description: the project member id project_id: type: integer description: the project id entity_name: type: string description: the name of the group member. role_name: type: string description: the name of the role role_id: type: integer description: the role id entity_id: type: integer description: 'the id of entity, if the member is a user, it is user_id in user table. if the member is a user group, it is the user group''s ID in user_group table.' entity_type: type: string description: 'the entity''s type, u for user entity, g for group entity.' ProjectMember: type: object properties: role_id: type: integer description: 'The role id 1 for projectAdmin, 2 for developer, 3 for guest, 4 for master' member_user: $ref: '#/definitions/UserEntity' member_group: $ref: '#/definitions/UserGroup' RoleRequest: type: object properties: role_id: type: integer description: 'The role id 1 for projectAdmin, 2 for developer, 3 for guest, 4 for master' UserEntity: type: object properties: user_id: type: integer description: The ID of the user. username: type: string description: The name of the user. UserGroup: type: object properties: id: type: integer description: The ID of the user group group_name: type: string description: The name of the user group group_type: type: integer description: 'The group type, 1 for LDAP group, 2 for HTTP group.' ldap_group_dn: type: string description: The DN of the LDAP group if group type is 1 (LDAP group). Resource: type: object properties: replication_policies: type: array description: The replication policy list. items: $ref: '#/definitions/ReplicationPolicy' StringConfigItem: type: object properties: value: type: string description: The string value of current config item editable: type: boolean description: The configure item can be updated or not BoolConfigItem: type: object properties: value: type: boolean description: The boolean value of current config item editable: type: boolean description: The configure item can be updated or not IntegerConfigItem: type: object properties: value: type: integer description: The integer value of current config item editable: type: boolean description: The configure item can be updated or not ChartAPIError: description: The error object returned by chart repository API type: object required: - error properties: error: type: string description: The error message returned by the chart API UnauthorizedChartAPIError: description: Unauthorized type: object allOf: - $ref: '#/definitions/ChartAPIError' ForbiddenChartAPIError: description: Operation is forbidden or quota exceeded type: object allOf: - $ref: '#/definitions/ChartAPIError' InternalChartAPIError: description: Internal server error occurred type: object allOf: - $ref: '#/definitions/ChartAPIError' NotFoundChartAPIError: description: Not found type: object allOf: - $ref: '#/definitions/ChartAPIError' InsufficientStorageChartAPIError: description: Insufficient storage type: object allOf: - $ref: '#/definitions/ChartAPIError' BadRequestFormatedError: description: Bad request type: object allOf: - $ref: '#/definitions/ChartAPIError' ConflictFormatedError: description: Conflicts type: object allOf: - $ref: '#/definitions/ChartAPIError' ChartInfoEntry: type: object description: The object contains basic chart information required: - name - total_versions - created properties: name: type: string description: Name of chart total_versions: type: integer description: Total count of chart versions latest_version: type: string description: latest version of chart created: type: string description: The created time of chart updated: type: string description: The created time of chart icon: type: string description: The icon path of chart home: type: string description: The home website of chart deprecated: type: boolean description: Flag to indicate if the chart is deprecated ChartInfoList: type: array description: The chart list under the project items: $ref: '#/definitions/ChartInfoEntry' ChartMetadata: type: object description: The metadata of chart version required: - name - version - engine - icon - apiVersion - appVersion properties: name: type: string description: The name of the chart home: type: string description: The URL to the relevant project page sources: type: array description: The URL to the source code of chart items: type: string version: type: string description: A SemVer 2 version of chart description: type: string description: A one-sentence description of chart keywords: type: array description: A list of string keywords items: type: string engine: type: string description: The name of template engine icon: type: string description: The URL to an icon file apiVersion: type: string description: The API version of this chart appVersion: type: string description: The version of the application enclosed in the chart deprecated: type: boolean description: Whether or not this chart is deprecated ChartVersion: type: object description: A specified chart entry allOf: - $ref: '#/definitions/ChartMetadata' - type: object properties: created: type: string description: The created time of the chart entry removed: type: boolean description: A flag to indicate if the chart entry is removed digest: type: string description: The digest value of the chart entry urls: type: array description: The urls of the chart entry items: type: string properties: labels: $ref: '#/definitions/Labels' ChartVersions: type: array description: A list of chart entry items: $ref: '#/definitions/ChartVersion' DigitalSignature: type: object description: The signature of the chart properties: signed: type: boolean description: A flag to indicate if the chart is signed prov_file: type: string description: The URL of the provance file SecurityReport: type: object description: The security information of the chart properties: signature: $ref: '#/definitions/DigitalSignature' Dependency: type: object description: Another chart the chart depends on required: - name - version properties: name: type: string description: The name of the chart denpendency version: type: string description: The version of the chart dependency repository: type: string description: The URL to the repository ChartVersionDetails: type: object description: The detailed information of the chart entry properties: metadata: $ref: '#/definitions/ChartVersion' security: $ref: '#/definitions/SecurityReport' dependencies: type: array items: $ref: '#/definitions/Dependency' values: type: object additionalProperties: type: object files: type: object additionalProperties: type: string labels: $ref: '#/definitions/Labels' GCResult: type: object properties: id: type: integer description: the id of gc job. job_name: type: string description: the job name of gc job. job_kind: type: string description: the job kind of gc job. schedule: $ref: '#/definitions/AdminJobScheduleObj' job_status: type: string description: the status of gc job. deleted: type: boolean description: if gc job was deleted. creation_time: type: string description: the creation time of gc job. update_time: type: string description: the update time of gc job. AdminJobSchedule: type: object properties: schedule: $ref: '#/definitions/AdminJobScheduleObj' AdminJobScheduleObj: type: object properties: type: type: string description: | The schedule type. The valid values are 'Hourly', 'Daily', 'Weekly', 'Custom', 'Manually' and 'None'. 'Manually' means to trigger it right away and 'None' means to cancel the schedule. cron: type: string description: A cron expression, a time-based job scheduler. SearchResult: type: object description: The chart search result item properties: name: type: string description: The chart name with repo name score: type: integer description: The matched level chart: $ref: '#/definitions/ChartVersion' Labels: type: array description: A list of label items: $ref: '#/definitions/Label' OverallHealthStatus: type: object description: The system health status properties: status: type: string description: The overall health status. It is "healthy" only when all the components' status are "healthy" components: type: array items: $ref: '#/definitions/ComponentHealthStatus' ComponentHealthStatus: type: object description: The health status of component properties: name: type: string description: The component name status: type: string description: The health status of component error: type: string description: (optional) The error message when the status is "unhealthy" RobotAccount: type: object description: The object of robot account properties: id: type: integer description: The id of robot account name: type: string description: The name of robot account description: type: string description: The description of robot account expires_at: type: integer description: The expiration of robot account (in seconds) project_id: type: integer description: The project id of robot account disabled: type: boolean description: The robot account is disable or enable creation_time: type: string description: The creation time of the robot account update_time: type: string description: The update time of the robot account RobotAccountCreate: type: object properties: name: type: string description: The name of robot account description: type: string description: The description of robot account access: type: array description: The permission of robot account items: $ref: '#/definitions/RobotAccountAccess' RobotAccountPostRep: type: object properties: name: type: string description: the name of robot account token: type: string description: the token of robot account RobotAccountAccess: type: object properties: resource: type: string description: the resource of harbor action: type: string description: the action to resource that perdefined in harbor rbac RobotAccountUpdate: type: object properties: disabled: type: boolean description: The robot account is disable or enable Permission: type: object description: The permission properties: resource: type: string description: The permission resoruce action: type: string description: The permission action RegistryInfo: type: object description: The registry info contains the base info and capability declarations of the registry properties: type: type: string description: The registry type description: type: string description: The description supported_resource_filters: type: array description: The filters that the registry supports items: $ref: '#/definitions/FilterStyle' supported_triggers: type: array description: The triggers that the registry supports items: type: string FilterStyle: type: object description: The style of the resource filter properties: type: type: string description: The filter type style: type: string description: The filter style values: type: array description: The filter values items: type: string ReplicationExecution: type: object description: The replication execution properties: id: type: integer description: The ID policy_id: type: integer description: The policy ID status: type: string description: The status status_text: type: string description: The status text trigger: type: string description: The trigger mode total: type: integer description: The total count of all tasks failed: type: integer description: The count of failed tasks succeed: type: integer description: The count of succeed tasks in_progress: type: integer description: The count of in_progress tasks stopped: type: integer description: The count of stopped tasks start_time: type: string description: The start time end_time: type: string description: The end time ReplicationTask: type: object description: The replication task properties: id: type: integer description: The ID execution_id: type: integer description: The execution ID resource_type: type: string description: The resource type src_resource: type: string description: The source resource dst_resource: type: string description: The destination resource job_id: type: string description: The job ID status: type: string description: The status start_time: type: string description: The start time end_time: type: string description: The end time Namespace: type: object description: The namespace of registry properties: name: type: string description: The name of namespace metadata: type: object description: The metadata of namespace CVEWhitelist: type: object description: The CVE Whitelist for system or project properties: id: type: integer description: ID of the whitelist project_id: type: integer description: ID of the project which the whitelist belongs to. For system level whitelist this attribute is zero. expires_at: type: integer description: the time for expiration of the whitelist, in the form of seconds since epoch. This is an optional attribute, if it's not set the CVE whitelist does not expire. items: type: array items: $ref: "#/definitions/CVEWhitelistItem" CVEWhitelistItem: type: object description: The item in CVE whitelist properties: cve_id: type: string description: The ID of the CVE, such as "CVE-2019-10164" ResourceList: type: object additionalProperties: type: integer QuotaUpdateReq: type: object properties: hard: $ref: "#/definitions/ResourceList" description: The new hard limits for the quota QuotaRefObject: type: object additionalProperties: {} Quota: type: object description: The quota object properties: id: type: integer description: ID of the quota ref: $ref: "#/definitions/QuotaRefObject" description: The reference object of the quota hard: $ref: "#/definitions/ResourceList" description: The hard limits of the quota used: $ref: "#/definitions/ResourceList" description: The used status of the quota creation_time: type: string description: the creation time of the quota update_time: type: string description: the update time of the quota WebhookTargetObject: type: object description: The webhook policy target object. properties: type: type: string description: The webhook target notify type. address: type: string description: The webhook target address. auth_header: type: string description: The webhook auth header. skip_cert_verify: type: boolean description: Whether or not to skip cert verify. WebhookPolicy: type: object description: The webhook policy object properties: id: type: integer format: int64 description: The webhook policy ID. name: type: string description: The name of webhook policy. description: type: string description: The description of webhook policy. project_id: type: integer description: The project ID of webhook policy. targets: type: array items: $ref: '#/definitions/WebhookTargetObject' event_types: type: array items: type: string creator: type: string description: The creator of the webhook policy. creation_time: type: string description: The create time of the webhook policy. update_time: type: string description: The update time of the webhook policy. enabled: type: boolean description: Whether the webhook policy is enabled or not. WebhookLastTrigger: type: object description: The webhook policy and last trigger time group by event type. properties: event_type: type: string description: The webhook event type. enabled: type: boolean description: Whether or not the webhook policy enabled. creation_time: type: string description: The creation time of webhook policy. last_trigger_time: type: string description: The last trigger time of webhook policy. WebhookJob: type: object description: The webhook job. properties: id: type: integer format: int64 description: The webhook job ID. policy_id: type: integer format: int64 description: The webhook policy ID. event_type: type: string description: The webhook job event type. notify_type: type: string description: The webhook job notify type. status: type: string description: The webhook job status. job_detail: type: string description: The webhook job notify detailed data. creation_time: type: string description: The webhook job creation time. update_time: type: string description: The webhook job update time. RetentionMetadata: type: object description: the tag retention metadata properties: templates: type: array description: templates items: $ref: '#/definitions/RetentionRuleMetadata' scope_selectors: type: array description: supported scope selectors items: $ref: '#/definitions/RetentionSelectorMetadata' tag_selectors: type: array description: supported tag selectors items: $ref: '#/definitions/RetentionSelectorMetadata' RetentionRuleMetadata: type: object description: the tag retention rule metadata properties: rule_template: type: string description: rule id display_text: type: string description: rule display text action: type: string description: rule action params: type: array description: rule params items: $ref: '#/definitions/RetentionRuleParamMetadata' RetentionRuleParamMetadata: type: object description: rule param properties: type: type: string unit: type: string required: type: boolean RetentionSelectorMetadata: type: object description: retention selector properties: display_text: type: string kind: type: string decorations: type: array items: type: string RetentionPolicy: type: object description: retention policy properties: id: type: integer format: int64 algorithm: type: string rules: type: array items: $ref: '#/definitions/RetentionRule' trigger: type: object $ref: '#/definitions/RetentionRuleTrigger' scope: type: object $ref: '#/definitions/RetentionPolicyScope' RetentionRuleTrigger: type: object properties: kind: type: string settings: type: object references: type: object RetentionPolicyScope: type: object properties: level: type: string ref: type: integer RetentionRule: type: object properties: id: type: integer priority: type: integer disabled: type: boolean action: type: string template: type: string params: type: object additionalProperties: type: object tag_selectors: type: array items: $ref: '#/definitions/RetentionSelector' scope_selectors: type: object additionalProperties: type: array items: $ref: '#/definitions/RetentionSelector' RetentionSelector: type: object properties: kind: type: string decoration: type: string pattern: type: string RetentionExecution: type: object properties: id: type: integer format: int64 policy_id: type: integer format: int64 start_time: type: string end_time: type: string status: type: string trigger: type: string dry_run: type: boolean RetentionExecutionTask: type: object properties: id: type: integer format: int64 execution_id: type: integer format: int64 repository: type: string job_id: type: string status: type: string status_code: type: integer status_revision: type: integer format: int64 start_time: type: string end_time: type: string total: type: integer retained: type: integer QuotaSwitcher: type: object properties: enabled: type: boolean description: The quota is enable or disable ImmutableTagRule: type: object properties: id: type: integer format: int64 project_id: type: integer format: int64 tag_filter: type: string enabled: type: boolean