lakeFS experimental API

The experimental API from lakeFS — 14 operation(s) for experimental.

OpenAPI Specification

lakefs-experimental-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  description: lakeFS HTTP API
  title: lakeFS actions experimental API
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  version: 1.0.0
servers:
- url: /api/v1
  description: lakeFS server endpoint
security:
- jwt_token: []
- basic_auth: []
- cookie_auth: []
- oidc_auth: []
- saml_auth: []
tags:
- name: experimental
paths:
  /auth/external/principal/login:
    post:
      tags:
      - experimental
      operationId: externalPrincipalLogin
      summary: perform a login using an external authenticator
      security: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalLoginInformation'
      responses:
        200:
          description: successful external login
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticationToken'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /sts/login:
    post:
      tags:
      - experimental
      operationId: stsLogin
      summary: perform a login with STS
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StsAuthRequest'
      responses:
        200:
          description: successful STS login
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticationToken'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /auth/users/{userId}/external/principals:
    parameters:
    - in: path
      name: userId
      required: true
      schema:
        type: string
    - in: query
      name: principalId
      required: true
      schema:
        type: string
    post:
      tags:
      - experimental
      operationId: createUserExternalPrincipal
      summary: attach external principal to user
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalPrincipalCreation'
      responses:
        201:
          description: external principal attached successfully
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        409:
          $ref: '#/components/responses/Conflict'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
    delete:
      tags:
      - experimental
      operationId: deleteUserExternalPrincipal
      summary: delete external principal from user
      responses:
        204:
          description: external principal detached successfully
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /auth/users/{userId}/external/principals/ls:
    parameters:
    - in: path
      name: userId
      required: true
      schema:
        type: string
    get:
      tags:
      - experimental
      parameters:
      - $ref: '#/components/parameters/PaginationPrefix'
      - $ref: '#/components/parameters/PaginationAfter'
      - $ref: '#/components/parameters/PaginationAmount'
      operationId: listUserExternalPrincipals
      summary: list user external policies attached to a user
      responses:
        200:
          description: external principals list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalPrincipalList'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /auth/external/principals:
    parameters:
    - in: query
      name: principalId
      required: true
      schema:
        type: string
    get:
      tags:
      - experimental
      operationId: getExternalPrincipal
      summary: describe external principal by id
      responses:
        200:
          description: external principal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalPrincipal'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /repositories/{repository}/branches/{branch}/hard_reset:
    parameters:
    - in: path
      name: repository
      required: true
      schema:
        type: string
    - in: path
      name: branch
      required: true
      schema:
        type: string
    put:
      tags:
      - experimental
      operationId: hardResetBranch
      summary: hard reset branch
      description: Relocate branch to refer to ref.  Branch must not contain uncommitted data.
      parameters:
      - in: query
        name: ref
        required: true
        schema:
          type: string
        description: After reset, branch will point at this reference.
      - in: query
        name: force
        required: false
        schema:
          type: boolean
          default: false
      responses:
        204:
          description: reset successful
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /repositories/{repository}/branches/{branch}/staging/pmpu:
    parameters:
    - in: path
      name: repository
      required: true
      schema:
        type: string
    - in: path
      name: branch
      required: true
      schema:
        type: string
    - in: query
      name: path
      description: relative to the branch
      required: true
      schema:
        type: string
    - in: query
      name: parts
      description: number of presigned URL parts required to upload
      schema:
        type: integer
    post:
      tags:
      - experimental
      operationId: createPresignMultipartUpload
      summary: Initiate a multipart upload
      description: 'Initiates a multipart upload and returns an upload ID with presigned URLs for each part (optional).

        Part numbers starts with 1. Each part except the last one has minimum size depends on the underlying blockstore implementation.

        For example working with S3 blockstore, minimum size is 5MB (excluding the last part).

        '
      responses:
        201:
          description: Presign multipart upload initiated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PresignMultipartUpload'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /repositories/{repository}/branches/{branch}/staging/pmpu/{uploadId}:
    parameters:
    - in: path
      name: repository
      required: true
      schema:
        type: string
    - in: path
      name: branch
      required: true
      schema:
        type: string
    - in: path
      name: uploadId
      required: true
      schema:
        type: string
    - in: query
      name: path
      description: relative to the branch
      required: true
      schema:
        type: string
    put:
      tags:
      - experimental
      operationId: completePresignMultipartUpload
      summary: Complete a presign multipart upload request
      description: Completes a presign multipart upload by assembling the uploaded parts.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompletePresignMultipartUpload'
      responses:
        200:
          description: Presign multipart upload completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectStats'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        409:
          description: conflict with a commit, try here
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StagingLocation'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
    delete:
      tags:
      - experimental
      operationId: abortPresignMultipartUpload
      summary: Abort a presign multipart upload
      description: Aborts a presign multipart upload.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AbortPresignMultipartUpload'
      responses:
        204:
          description: Presign multipart upload aborted
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /repositories/{repository}/branches/{branch}/staging/pmpu/{uploadId}/parts/{partNumber}:
    parameters:
    - in: path
      name: repository
      required: true
      schema:
        type: string
    - in: path
      name: branch
      required: true
      schema:
        type: string
    - in: path
      name: uploadId
      required: true
      schema:
        type: string
    - in: query
      name: path
      required: true
      schema:
        type: string
    - in: path
      name: partNumber
      required: true
      schema:
        type: integer
        maximum: 10000
        minimum: 1
    put:
      tags:
      - experimental
      operationId: uploadPart
      description: Return a presigned URL to upload into a presigned multipart upload.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadPartFrom'
      responses:
        200:
          description: presigned URL to use for upload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadTo'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /repositories/{repository}/branches/{branch}/staging/pmpu/{uploadId}/parts/{partNumber}/copy:
    parameters:
    - in: path
      name: repository
      required: true
      schema:
        type: string
    - in: path
      name: branch
      required: true
      schema:
        type: string
    - in: path
      name: uploadId
      required: true
      schema:
        type: string
    - in: query
      name: path
      required: true
      schema:
        type: string
    - in: path
      name: partNumber
      required: true
      schema:
        type: integer
        maximum: 10000
        minimum: 1
    put:
      tags:
      - experimental
      operationId: uploadPartCopy
      description: Upload a part by copying part of another object.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadPartCopyFrom'
      responses:
        204:
          description: part copied
          headers:
            ETag:
              schema:
                type: string
                description: ETag of the uploaded part, pass in completion
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /repositories/{repository}/branches/{branch}/objects/stat/user_metadata:
    parameters:
    - in: path
      name: repository
      required: true
      schema:
        type: string
    - in: path
      name: branch
      required: true
      schema:
        type: string
      description: branch to update
    - in: query
      name: path
      description: path to object relative to the branch
      required: true
      schema:
        type: string
    put:
      tags:
      - experimental
      operationId: updateObjectUserMetadata
      summary: rewrite (all) object metadata
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateObjectUserMetadata'
      responses:
        201:
          description: User metadata updated
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        400:
          $ref: '#/components/responses/BadRequest'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /repositories/{repository}/pulls:
    parameters:
    - in: path
      name: repository
      required: true
      schema:
        type: string
    get:
      tags:
      - experimental
      operationId: listPullRequests
      summary: list pull requests
      parameters:
      - $ref: '#/components/parameters/PaginationPrefix'
      - $ref: '#/components/parameters/PaginationAfter'
      - $ref: '#/components/parameters/PaginationAmount'
      - in: query
        name: status
        schema:
          type: string
          enum:
          - open
          - closed
          - all
          default: all
          description: filter pull requests by status
      responses:
        200:
          description: list of pull requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestsList'
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
    post:
      tags:
      - experimental
      operationId: createPullRequest
      summary: create pull request
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PullRequestCreation'
      responses:
        201:
          description: pull request created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestCreationResponse'
        400:
          $ref: '#/components/responses/ValidationError'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        409:
          $ref: '#/components/responses/Conflict'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /repositories/{repository}/pulls/{pull_request}:
    parameters:
    - in: path
      name: repository
      required: true
      schema:
        type: string
    - in: path
      name: pull_request
      required: true
      description: pull request id
      schema:
        type: string
    get:
      tags:
      - experimental
      operationId: getPullRequest
      summary: get pull request
      responses:
        200:
          description: pull request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequest'
        400:
          $ref: '#/components/responses/ValidationError'
        401:
          $ref: '#/components/responses/Unauthorized'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
    patch:
      tags:
      - experimental
      operationId: updatePullRequest
      summary: update pull request
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PullRequestBasic'
      responses:
        200:
          description: pull request updated successfully
        400:
          $ref: '#/components/responses/ValidationError'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
  /repositories/{repository}/pulls/{pull_request}/merge:
    parameters:
    - in: path
      name: repository
      required: true
      schema:
        type: string
    - in: path
      name: pull_request
      required: true
      description: pull request id
      schema:
        type: string
    put:
      tags:
      - experimental
      operationId: mergePullRequest
      summary: merge pull request
      responses:
        200:
          description: merge completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MergeResult'
        400:
          $ref: '#/components/responses/ValidationError'
        401:
          $ref: '#/components/responses/Unauthorized'
        403:
          $ref: '#/components/responses/Forbidden'
        404:
          $ref: '#/components/responses/NotFound'
        409:
          description: 'Conflict

            Deprecated: content schema will return Error format and not an empty MergeResult

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MergeResult'
        412:
          description: precondition failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        429:
          description: too many requests
        default:
          $ref: '#/components/responses/ServerError'
components:
  responses:
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Conflict:
      description: Resource Conflicts With Target
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ValidationError:
      description: Validation Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    StagingLocation:
      type: object
      description: location for placing an object when staging it
      properties:
        physical_address:
          type: string
        presigned_url:
          type: string
          nullable: true
          description: if presign=true is passed in the request, this field will contain a pre-signed URL to use when uploading
        presigned_url_expiry:
          type: integer
          format: int64
          description: 'If present and nonzero, physical_address is a pre-signed URL and

            will expire at this Unix Epoch time.  This will be shorter than

            the pre-signed URL lifetime if an authentication token is about

            to expire.


            This field is *optional*.

            '
    StsAuthRequest:
      type: object
      required:
      - code
      - state
      - redirect_uri
      properties:
        code:
          type: string
        state:
          type: string
        redirect_uri:
          type: string
        ttl_seconds:
          type: integer
          format: int64
          description: 'The time-to-live for the generated token in seconds.  The default

            value is 3600 seconds (1 hour) maximum time allowed is 12 hours.

            '
    ObjectStats:
      type: object
      required:
      - checksum
      - physical_address
      - path
      - path_type
      - mtime
      properties:
        path:
          type: string
        path_type:
          type: string
          enum:
          - common_prefix
          - object
        physical_address:
          type: string
          description: 'The location of the object on the underlying object store.

            Formatted as a native URI with the object store type as scheme ("s3://...", "gs://...", etc.)

            Or, in the case of presign=true, will be an HTTP URL to be consumed via regular HTTP GET

            '
        physical_address_expiry:
          type: integer
          format: int64
          description: 'If present and nonzero, physical_address is a pre-signed URL and

            will expire at this Unix Epoch time.  This will be shorter than

            the pre-signed URL lifetime if an authentication token is about

            to expire.


            This field is *optional*.

            '
        checksum:
          type: string
        size_bytes:
          type: integer
          format: int64
          description: 'The number of bytes in the object.  lakeFS always populates this

            field when returning ObjectStats.  This field is optional _for

            the client_ to supply, for instance on upload.

            '
        mtime:
          type: integer
          format: int64
          description: Unix Epoch in seconds
        metadata:
          $ref: '#/components/schemas/ObjectUserMetadata'
        content_type:
          type: string
          description: Object media type
    ExternalPrincipal:
      type: object
      required:
      - user_id
      - id
      properties:
        id:
          type: string
          description: A unique identifier for the external principal i.e aws:sts::123:assumed-role/role-name
        user_id:
          type: string
          description: 'lakeFS user ID to associate with an external principal.

            '
        settings:
          type: object
          items:
            $ref: '#/components/schemas/ExternalPrincipalSettings'
    AbortPresignMultipartUpload:
      type: object
      properties:
        physical_address:
          type: string
      required:
      - physical_address
    PullRequest:
      allOf:
      - $ref: '#/components/schemas/PullRequestBasic'
      - required:
        - status
        - title
        - description
      - type: object
        required:
        - id
        - creation_date
        - author
        - source_branch
        - destination_branch
        properties:
          id:
            type: string
          creation_date:
            type: string
            format: date-time
          author:
            type: string
          source_branch:
            type: string
          destination_branch:
            type: string
          merged_commit_id:
            type: string
            description: the commit id of merged PRs
          closed_date:
            type: string
            format: date-time
    PullRequestsList:
      type: object
      required:
      - pagination
      - results
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        results:
          type: array
          items:
            $ref: '#/components/schemas/PullRequest'
    ObjectUserMetadata:
      type: object
      additionalProperties:
        type: string
    CopyPartSource:
      type: object
      properties:
        repository:
          type: string
        ref:
          type: string
        path:
          type: string
        range:
          description: Range of bytes to copy
          type: string
          pattern: ^bytes=((\d*-\d*,? ?)+)$
      required:
      - repository
      - ref
      - path
    UpdateObjectUserMetadata:
      type: object
      required:
      - set
      properties:
        set:
          description: Set this object user metadata
          $ref: '#/components/schemas/ObjectUserMetadata'
    PresignMultipartUpload:
      type: object
      properties:
        upload_id:
          type: string
        physical_address:
          type: string
        presigned_urls:
          type: array
          items:
            type: string
      required:
      - upload_id
      - physical_address
    Pagination:
      type: object
      required:
      - has_more
      - max_per_page
      - results
      - next_offset
      properties:
        has_more:
          type: boolean
          description: Next page is available
        next_offset:
          type: string
          description: Token used to retrieve the next page
        results:
          type: integer
          minimum: 0
          description: Number of values found in the results
        max_per_page:
          type: integer
          minimum: 0
          description: Maximal number of entries per page
    ExternalPrincipalCreation:
      type: object
      properties:
        settings:
          type: object
          items:
            $ref: '#/components/schemas/ExternalPrincipalSettings'
    Error:
      type: object
      required:
      - message
      properties:
        message:
          description: short message explaining the error
          type: string
    MergeResult:
      type: object
      required:
      - reference
      properties:
        reference:
          type: string
    PullRequestBasic:
      type: object
      properties:
        status:
          type: string
          enum:
          - open
          - closed
          - merged
        title:
          type: string
        description:
          type: string
    ExternalPrincipalList:
      type: object
      required:
      - pagination
      - results
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        results:
          type: array
          items:
            $ref: '#/components/schemas/ExternalPrincipal'
    PullRequestCreationResponse:
      type: object
      required:
      - id
      properties:
        id:
          type: string
          description: ID of the pull request
    AuthenticationToken:
      type: object
      required:
      - token
      properties:
        token:
          description: a JWT token that could be used to authenticate requests
          type: string
        token_expiration:
          type: integer
          format: int64
          description: Unix Epoch in seconds
    ExternalLoginInformation:
      type: object
      required:
      - identityRequest
      properties:
        token_expiration_duration:
          type: integer
        identityRequest:
          type: object
    UploadPartFrom:
      type: object
      properties:
        physical_address:
          description: 'The physical address (of the entire intended object) returned from

            createPresignMultipartUpload.

            '
          type: string
      required:
      - physical_address
    PullRequestCreation:
      type: object
      required:
      - title
      - source_branch
      - destination_branch
      properties:
        title:
          type: string
        description:
          type: string
        source_branch:
          type: string
        destination_branch:
          type: string
    UploadPart:
      type: object
      properties:
        part_number:
          type: integer
        etag:
          type: string
      required:
      - part_number
      - etag
    UploadPartCopyFrom:
      allOf:
      - $ref: '#/components/schemas/UploadPartFrom'
      - type: object
        properties:
          copy_source:
            description: Source of copy
            $ref: '#/components/schemas/CopyPartSource'
        required:
        - copy_source
    ExternalPrincipalSettings:
      type: object
      additionalProperties:
        type: string
      description: Additional settings to be consumed by the remote authenticator
    UploadTo:
      type: object
      properties:
        presigned_url:
          type: string
      required:
      - presigned_url
    CompletePresignMultipartUpload:
      type: object
      properties:
        physical_address:
          type: string
        parts:
          type: array
          description: List of uploaded parts, should be ordered by ascending part number
          items:
            $ref: '#/components/schemas/UploadPart'
        user_metadata:
          type: object
          additionalProperties:
            type: string
        content_type:
          type: string
          description: Object media type
      required:
      - physical_address
      - parts
  parameters:
    PaginationAfter:
      in: query
      name: after
      description: return items after this value
      allowEmptyValue: true
      schema:
        type: string
    PaginationAmount:
      in: query
      name: amount
      description: how many items to return
      schema:
        type: integer
        minimum: -1
        maximum: 1000
        default: 100
    PaginationPrefix:
      in: query
      name: prefix
      allowEmptyValue: true
      description: return items prefixed with this value
      schema:
        type: string
  securitySchemes:
    basic_auth:
      type: http
      scheme: basic
    jwt_token:
      type: http
      scheme: bearer
      bearerFormat: JWT
    cookie_auth:
      type: apiKey
      in: cookie
      name: internal_auth_session
    oidc_auth:
      type: apiKey
      in: cookie
      name: oidc_auth_session
    saml_auth:
      type: apiKey
      in: cookie
      name: saml_auth_session