Artifactory REST API

Comprehensive REST API for managing artifacts, repositories, users, groups, permissions, replication, security, and system configuration in JFrog Artifactory.

OpenAPI Specification

artifactory-rest-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: JFrog Artifactory REST API
  description: >-
    Comprehensive REST API for managing artifacts, repositories, security,
    and system configuration in JFrog Artifactory. Provides endpoints for
    CRUD operations on repositories and artifacts, user and group management,
    permission targets, storage information, and system-level operations.
  version: 7.x
  contact:
    name: JFrog Support
    url: https://jfrog.com/support/
    email: [email protected]
  license:
    name: Proprietary
    url: https://jfrog.com/terms-of-service/
  termsOfService: https://jfrog.com/terms-of-service/
externalDocs:
  description: JFrog Artifactory REST API Documentation
  url: https://jfrog.com/help/r/jfrog-rest-apis/artifactory-rest-apis
servers:
  - url: https://{server}/artifactory
    description: JFrog Artifactory Server
    variables:
      server:
        default: myserver.jfrog.io
        description: Your JFrog Platform deployment URL
security:
  - BearerAuth: []
  - ApiKeyAuth: []
  - BasicAuth: []
tags:
  - name: Artifacts & Storage
    description: Deploy, retrieve, copy, move, and delete artifacts
  - name: Replication
    description: Repository replication configuration and management
  - name: Repositories
    description: Create, read, update, and delete repositories
  - name: Search
    description: Search for artifacts using various criteria
  - name: Security
    description: Users, groups, permissions, and tokens
  - name: System & Configuration
    description: System health, version, and configuration management
paths:
  /api/system/ping:
    get:
      operationId: systemPing
      summary: JFrog Artifactory System Health Ping
      description: Returns a simple "OK" if Artifactory is accessible. Used for health checks.
      tags:
        - System & Configuration
      security: []
      responses:
        '200':
          description: Artifactory is accessible
          content:
            text/plain:
              schema:
                type: string
                example: OK
  /api/system/version:
    get:
      operationId: getSystemVersion
      summary: JFrog Artifactory Get Version Information
      description: Returns the Artifactory version and revision information along with enabled addons.
      tags:
        - System & Configuration
      responses:
        '200':
          description: Version information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/system/configuration:
    get:
      operationId: getSystemConfiguration
      summary: JFrog Artifactory Get System Configuration
      description: Returns the global system configuration XML (artifactory.config.xml).
      tags:
        - System & Configuration
      responses:
        '200':
          description: System configuration XML
          content:
            application/xml:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    patch:
      operationId: updateSystemConfiguration
      summary: JFrog Artifactory Update System Configuration
      description: Applies a YAML patch to update specific parts of the system configuration.
      tags:
        - System & Configuration
      requestBody:
        required: true
        content:
          application/yaml:
            schema:
              type: string
      responses:
        '200':
          description: Configuration updated successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /api/system/licenses:
    get:
      operationId: getLicenseInfo
      summary: JFrog Artifactory Get License Information
      description: Returns the license details for the current Artifactory instance.
      tags:
        - System & Configuration
      responses:
        '200':
          description: License information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/storage/{repoKey}/{itemPath}:
    get:
      operationId: getStorageInfo
      summary: JFrog Artifactory Get File or Folder Info
      description: >-
        Returns storage information for a file or folder. For files, returns
        checksums, size, timestamps, and download URI. For folders, returns
        child items.
      tags:
        - Artifacts & Storage
      parameters:
        - $ref: '#/components/parameters/RepoKey'
        - $ref: '#/components/parameters/ItemPath'
      responses:
        '200':
          description: Item storage information
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/FileInfo'
                  - $ref: '#/components/schemas/FolderInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/repositories:
    get:
      operationId: listRepositories
      summary: JFrog Artifactory List All Repositories
      description: Returns a list of all repositories configured in the system, optionally filtered by type or package type.
      tags:
        - Repositories
      parameters:
        - name: type
          in: query
          description: Filter by repository type
          schema:
            type: string
            enum:
              - local
              - remote
              - virtual
              - federated
        - name: packageType
          in: query
          description: Filter by package type (e.g., maven, docker, npm, pypi, etc.)
          schema:
            type: string
      responses:
        '200':
          description: List of repositories
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RepositoryListItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/repositories/{repoKey}:
    get:
      operationId: getRepository
      summary: JFrog Artifactory Get Repository Configuration
      description: Returns the configuration for a single repository identified by its key.
      tags:
        - Repositories
      parameters:
        - $ref: '#/components/parameters/RepoKey'
      responses:
        '200':
          description: Repository configuration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RepositoryConfiguration'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: createOrReplaceRepository
      summary: JFrog Artifactory Create or Replace Repository
      description: Creates a new repository or replaces an existing one with the provided configuration.
      tags:
        - Repositories
      parameters:
        - $ref: '#/components/parameters/RepoKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RepositoryConfiguration'
      responses:
        '200':
          description: Repository created or replaced successfully
          content:
            text/plain:
              schema:
                type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      operationId: updateRepository
      summary: JFrog Artifactory Update Repository Configuration
      description: Updates an existing repository configuration. Only provided fields are updated.
      tags:
        - Repositories
      parameters:
        - $ref: '#/components/parameters/RepoKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RepositoryConfiguration'
      responses:
        '200':
          description: Repository updated successfully
          content:
            text/plain:
              schema:
                type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteRepository
      summary: JFrog Artifactory Delete Repository
      description: Removes a repository configuration. Content is deleted unless backed up.
      tags:
        - Repositories
      parameters:
        - $ref: '#/components/parameters/RepoKey'
      responses:
        '200':
          description: Repository deleted successfully
          content:
            text/plain:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /{repoKey}/{itemPath}:
    get:
      operationId: retrieveArtifact
      summary: JFrog Artifactory Retrieve Artifact
      description: Downloads a specific artifact from the given repository and path.
      tags:
        - Artifacts & Storage
      parameters:
        - $ref: '#/components/parameters/RepoKey'
        - $ref: '#/components/parameters/ItemPath'
      responses:
        '200':
          description: Artifact content
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: deployArtifact
      summary: JFrog Artifactory Deploy Artifact
      description: >-
        Deploys an artifact to the specified repository and path. Supports setting
        properties and checksums via headers.
      tags:
        - Artifacts & Storage
      parameters:
        - $ref: '#/components/parameters/RepoKey'
        - $ref: '#/components/parameters/ItemPath'
        - name: X-Checksum-Sha1
          in: header
          description: SHA1 checksum of the artifact for verification
          schema:
            type: string
        - name: X-Checksum-Sha256
          in: header
          description: SHA256 checksum of the artifact for verification
          schema:
            type: string
        - name: X-Checksum-Md5
          in: header
          description: MD5 checksum of the artifact for verification
          schema:
            type: string
        - name: X-Checksum-Deploy
          in: header
          description: >-
            If true, deploy by checksum. Artifact content is not required if
            the checksum already exists in the system.
          schema:
            type: boolean
      requestBody:
        required: true
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
      responses:
        '201':
          description: Artifact deployed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeployResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    delete:
      operationId: deleteArtifact
      summary: JFrog Artifactory Delete Artifact
      description: Deletes an artifact or folder from the specified repository and path.
      tags:
        - Artifacts & Storage
      parameters:
        - $ref: '#/components/parameters/RepoKey'
        - $ref: '#/components/parameters/ItemPath'
      responses:
        '204':
          description: Artifact deleted successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/copy/{srcRepoKey}/{srcItemPath}:
    post:
      operationId: copyArtifact
      summary: JFrog Artifactory Copy Artifact
      description: Copies an artifact or folder from one location to another.
      tags:
        - Artifacts & Storage
      parameters:
        - name: srcRepoKey
          in: path
          required: true
          description: Source repository key
          schema:
            type: string
        - name: srcItemPath
          in: path
          required: true
          description: Source item path
          schema:
            type: string
        - name: to
          in: query
          required: true
          description: Destination path in format /repoKey/path
          schema:
            type: string
        - name: dry
          in: query
          description: If 1, performs a dry run without actual copy
          schema:
            type: integer
            enum: [0, 1]
        - name: suppressLayouts
          in: query
          description: If 1, suppresses cross-layout translation
          schema:
            type: integer
            enum: [0, 1]
      responses:
        '200':
          description: Copy operation result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MoveOrCopyResult'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/move/{srcRepoKey}/{srcItemPath}:
    post:
      operationId: moveArtifact
      summary: JFrog Artifactory Move Artifact
      description: Moves an artifact or folder from one location to another.
      tags:
        - Artifacts & Storage
      parameters:
        - name: srcRepoKey
          in: path
          required: true
          description: Source repository key
          schema:
            type: string
        - name: srcItemPath
          in: path
          required: true
          description: Source item path
          schema:
            type: string
        - name: to
          in: query
          required: true
          description: Destination path in format /repoKey/path
          schema:
            type: string
        - name: dry
          in: query
          description: If 1, performs a dry run without actual move
          schema:
            type: integer
            enum: [0, 1]
        - name: suppressLayouts
          in: query
          description: If 1, suppresses cross-layout translation
          schema:
            type: integer
            enum: [0, 1]
      responses:
        '200':
          description: Move operation result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MoveOrCopyResult'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/search/artifact:
    get:
      operationId: searchArtifactByName
      summary: JFrog Artifactory Artifact Search (Quick Search)
      description: Searches for artifacts by name in the specified repositories.
      tags:
        - Search
      parameters:
        - name: name
          in: query
          required: true
          description: Artifact name or partial name to search for
          schema:
            type: string
        - name: repos
          in: query
          description: Comma-separated list of repository keys to search in
          schema:
            type: string
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResults'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/search/gavc:
    get:
      operationId: searchByGAVC
      summary: JFrog Artifactory GAVC Search
      description: Searches for Maven artifacts by groupId, artifactId, version, and classifier coordinates.
      tags:
        - Search
      parameters:
        - name: g
          in: query
          description: Maven groupId
          schema:
            type: string
        - name: a
          in: query
          description: Maven artifactId
          schema:
            type: string
        - name: v
          in: query
          description: Maven version
          schema:
            type: string
        - name: c
          in: query
          description: Maven classifier
          schema:
            type: string
        - name: repos
          in: query
          description: Comma-separated list of repository keys to search in
          schema:
            type: string
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResults'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/search/checksum:
    get:
      operationId: searchByChecksum
      summary: JFrog Artifactory Checksum Search
      description: Searches for artifacts matching a specific checksum (SHA-1, SHA-256, or MD5).
      tags:
        - Search
      parameters:
        - name: sha1
          in: query
          description: SHA-1 checksum value
          schema:
            type: string
        - name: sha256
          in: query
          description: SHA-256 checksum value
          schema:
            type: string
        - name: md5
          in: query
          description: MD5 checksum value
          schema:
            type: string
        - name: repos
          in: query
          description: Comma-separated list of repository keys to search in
          schema:
            type: string
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResults'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/search/prop:
    get:
      operationId: searchByProperty
      summary: JFrog Artifactory Property Search
      description: Searches for artifacts with specific properties.
      tags:
        - Search
      parameters:
        - name: repos
          in: query
          description: Comma-separated list of repository keys to search in
          schema:
            type: string
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResults'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/search/dates:
    get:
      operationId: searchByDate
      summary: JFrog Artifactory Date-based Search
      description: Searches for artifacts created or modified within a date range.
      tags:
        - Search
      parameters:
        - name: from
          in: query
          description: Start date in milliseconds since epoch
          schema:
            type: integer
            format: int64
        - name: to
          in: query
          description: End date in milliseconds since epoch
          schema:
            type: integer
            format: int64
        - name: repos
          in: query
          description: Comma-separated list of repository keys to search in
          schema:
            type: string
        - name: dateFields
          in: query
          description: Date fields to search on (created, lastModified, lastDownloaded)
          schema:
            type: string
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResults'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/search/creation:
    get:
      operationId: searchByCreationDate
      summary: JFrog Artifactory Creation Date Search
      description: Searches for artifacts created in a specific date range.
      tags:
        - Search
      parameters:
        - name: from
          in: query
          description: Start date in milliseconds since epoch
          schema:
            type: integer
            format: int64
        - name: to
          in: query
          description: End date in milliseconds since epoch
          schema:
            type: integer
            format: int64
        - name: repos
          in: query
          description: Comma-separated list of repository keys to search in
          schema:
            type: string
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResults'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/security/users:
    get:
      operationId: listUsers
      summary: JFrog Artifactory List Users
      description: Returns a list of all users in the system.
      tags:
        - Security
      responses:
        '200':
          description: List of users
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserListItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /api/security/users/{username}:
    get:
      operationId: getUser
      summary: JFrog Artifactory Get User Details
      description: Returns the details for a specific user.
      tags:
        - Security
      parameters:
        - name: username
          in: path
          required: true
          description: The username
          schema:
            type: string
      responses:
        '200':
          description: User details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: createOrReplaceUser
      summary: JFrog Artifactory Create or Replace User
      description: Creates a new user or replaces an existing one.
      tags:
        - Security
      parameters:
        - name: username
          in: path
          required: true
          description: The username
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        '201':
          description: User created successfully
        '200':
          description: User replaced successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteUser
      summary: JFrog Artifactory Delete User
      description: Deletes an existing user.
      tags:
        - Security
      parameters:
        - name: username
          in: path
          required: true
          description: The username
          schema:
            type: string
      responses:
        '200':
          description: User deleted successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/security/groups:
    get:
      operationId: listGroups
      summary: JFrog Artifactory List Groups
      description: Returns a list of all groups in the system.
      tags:
        - Security
      responses:
        '200':
          description: List of groups
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GroupListItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/security/groups/{groupName}:
    get:
      operationId: getGroup
      summary: JFrog Artifactory Get Group Details
      description: Returns the details for a specific group.
      tags:
        - Security
      parameters:
        - name: groupName
          in: path
          required: true
          description: The group name
          schema:
            type: string
      responses:
        '200':
          description: Group details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: createOrReplaceGroup
      summary: JFrog Artifactory Create or Replace Group
      description: Creates a new group or replaces an existing one.
      tags:
        - Security
      parameters:
        - name: groupName
          in: path
          required: true
          description: The group name
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Group'
      responses:
        '201':
          description: Group created successfully
        '200':
          description: Group replaced successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteGroup
      summary: JFrog Artifactory Delete Group
      description: Deletes an existing group.
      tags:
        - Security
      parameters:
        - name: groupName
          in: path
          required: true
          description: The group name
          schema:
            type: string
      responses:
        '200':
          description: Group deleted successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/security/permissions:
    get:
      operationId: listPermissionTargets
      summary: JFrog Artifactory List Permission Targets
      description: Returns a list of all permission targets in the system.
      tags:
        - Security
      responses:
        '200':
          description: List of permission targets
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PermissionTargetListItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/security/permissions/{permissionName}:
    get:
      operationId: getPermissionTarget
      summary: JFrog Artifactory Get Permission Target
      description: Returns the details for a specific permission target.
      tags:
        - Security
      parameters:
        - name: permissionName
          in: path
          required: true
          description: The permission target name
          schema:
            type: string
      responses:
        '200':
          description: Permission target details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermissionTarget'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: createOrReplacePermissionTarget
      summary: JFrog Artifactory Create or Replace Permission Target
      description: Creates a new permission target or replaces an existing one.
      tags:
        - Security
      parameters:
        - name: permissionName
          in: path
          required: true
          description: The permission target name
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PermissionTarget'
      responses:
        '201':
          description: Permission target created
        '200':
          description: Permission target replaced
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deletePermissionTarget
      summary: JFrog Artifactory Delete Permission Target
      description: Deletes an existing permission target.
      tags:
        - Security
      parameters:
        - name: permissionName
          in: path
          required: true
          description: The permission target name
          schema:
            type: string
      responses:
        '200':
          description: Permission target deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/security/token:
    post:
      operationId: createAccessToken
      summary: JFrog Artifactory Create Access Token
      description: Creates an access token for authenticating with Artifactory.
      tags:
        - Security
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: The username for which the token is created
                scope:
                  type: string
                  description: >-
                    The scope of the token. Format:
                    member-of-groups:group1,group2
                expires_in:
                  type: integer
                  description: Token expiration in seconds. 0 means no expiration.
                refreshable:
                  type: boolean
                  description: Whether the token is refreshable
                audience:
                  type: string
                  description: The audience for the token
      responses:
        '200':
          description: Access token created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessToken'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/security/apiKey:
    get:
      operationId: getApiKey
      summary: JFrog Artifactory Get API Key
      description: Returns the API key for the currently authenticated user.
      tags:
        - Security
      responses:
        '200':
          description: API key information
          content:
            application/json:
              schema:
                type: object
                properties:
                  apiKey:
                    type: string
                    description: The API key value
        '401':
          $ref: '#/components/responses/Unauthorized'
    put:
      operationId: createApiKey
      summary: JFrog Artifactory Create API Key
      description: Creates a new API key for the currently authenticated user.
      tags:
        - Security
      responses:
        '201':
          description: API key created
          content:
            application/json:
              schema:
                type: object
                properties:
                  apiKey:
                    type: string
                    description: The newly created API key
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: revokeApiKey
      summary: JFrog Artifactory Revoke API Key
      description: Revokes the API key for the currently authenticated user.
      tags:
        - Security
      responses:
        '200':
          description: API key revoked
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/storage/{repoKey}/{itemPath}?properties:
    get:
      operationId: getItem

# --- truncated at 32 KB (57 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/artifactory/refs/heads/main/openapi/artifactory-rest-api-openapi.yml