Gitpod gitpod.v1.ServiceAccountService API

The gitpod.v1.ServiceAccountService API from Gitpod — 10 operation(s) for gitpod.v1.serviceaccountservice.

OpenAPI Specification

gitpod-gitpod-v1-serviceaccountservice-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: gitpod.v1 gitpod.v1.AccountService gitpod.v1.ServiceAccountService API
  version: v1.0.0
servers:
- url: https://api.gitpod.io
  description: Gitpod API
tags:
- name: gitpod.v1.ServiceAccountService
  x-displayName: gitpod.v1.ServiceAccountService
paths:
  /gitpod.v1.ServiceAccountService/CreateServiceAccount:
    servers: []
    post:
      description: "Creates a new service account in an organization.\n\n Use this method to:\n - Create service accounts for automation\n - Set up CI/CD credentials\n - Configure programmatic access\n\n ### Examples\n\n - Create service account:\n\n   Creates a service account for automation.\n\n   ```yaml\n   name: \"ci-pipeline\"\n   description: \"CI/CD Pipeline\"\n   validUntil: \"2025-12-31T23:59:59Z\"\n   ```"
      operationId: gitpod.v1.ServiceAccountService.CreateServiceAccount
      parameters: []
      requestBody:
        content:
          application/json:
            examples:
              create_service_account:
                description: Creates a service account for automation.
                value:
                  description: CI/CD Pipeline
                  name: ci-pipeline
                  validUntil: '2025-12-31T23:59:59Z'
            schema:
              $ref: '#/components/schemas/gitpod.v1.CreateServiceAccountRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.CreateServiceAccountResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: CreateServiceAccount
      tags:
      - gitpod.v1.ServiceAccountService
  /gitpod.v1.ServiceAccountService/CreateServiceAccountAccessToken:
    servers: []
    post:
      description: "Creates a short-lived access token for configuring a service account.\n\n The token expires after 30 minutes and can be used as a Bearer token\n in the Authorization header to perform operations on behalf of the\n service account, such as configuring OAuth.\n\n ### Examples\n\n - Create access token:\n\n   ```yaml\n   serviceAccountId: \"d2c94c27-3b76-4a42-b88c-95a85e392c68\"\n   ```"
      operationId: gitpod.v1.ServiceAccountService.CreateServiceAccountAccessToken
      parameters: []
      requestBody:
        content:
          application/json:
            examples:
              create_access_token:
                description: 'serviceAccountId: "d2c94c27-3b76-4a42-b88c-95a85e392c68"

                  '
                value:
                  serviceAccountId: d2c94c27-3b76-4a42-b88c-95a85e392c68
            schema:
              $ref: '#/components/schemas/gitpod.v1.CreateServiceAccountAccessTokenRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.CreateServiceAccountAccessTokenResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: CreateServiceAccountAccessToken
      tags:
      - gitpod.v1.ServiceAccountService
  /gitpod.v1.ServiceAccountService/CreateServiceAccountToken:
    servers: []
    post:
      description: "Creates a long-lived token for a service account.\n\n Use this method to:\n - Create tokens for CI/CD pipelines\n - Set up automation credentials\n - Generate API access tokens\n\n The token is returned only once and cannot be retrieved later.\n Token validity is capped to the service account's expiry.\n\n Requires impersonation: First obtain a short-lived access token via\n CreateServiceAccountAccessToken, then use it to call this method.\n The service account ID is derived from the caller's identity.\n\n ### Examples\n\n - Create token with 90-day validity:\n\n   ```yaml\n   description: \"GitHub Actions\"\n   validFor: \"7776000s\"\n   ```"
      operationId: gitpod.v1.ServiceAccountService.CreateServiceAccountToken
      parameters: []
      requestBody:
        content:
          application/json:
            examples:
              create_token_with_90_day_validity:
                description: 'description: "GitHub Actions"

                  validFor: "7776000s"

                  '
                value:
                  description: GitHub Actions
                  validFor: 7776000s
            schema:
              $ref: '#/components/schemas/gitpod.v1.CreateServiceAccountTokenRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.CreateServiceAccountTokenResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: CreateServiceAccountToken
      tags:
      - gitpod.v1.ServiceAccountService
  /gitpod.v1.ServiceAccountService/DeleteServiceAccount:
    servers: []
    post:
      description: "Deletes a service account.\n\n Use this method to:\n - Remove unused service accounts\n - Revoke service account access\n - Clean up expired accounts\n\n ### Examples\n\n - Delete service account:\n\n   Permanently removes a service account.\n\n   ```yaml\n   serviceAccountId: \"d2c94c27-3b76-4a42-b88c-95a85e392c68\"\n   ```"
      operationId: gitpod.v1.ServiceAccountService.DeleteServiceAccount
      parameters: []
      requestBody:
        content:
          application/json:
            examples:
              delete_service_account:
                description: Permanently removes a service account.
                value:
                  serviceAccountId: d2c94c27-3b76-4a42-b88c-95a85e392c68
            schema:
              $ref: '#/components/schemas/gitpod.v1.DeleteServiceAccountRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.DeleteServiceAccountResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: DeleteServiceAccount
      tags:
      - gitpod.v1.ServiceAccountService
  /gitpod.v1.ServiceAccountService/DeleteServiceAccountToken:
    servers: []
    post:
      description: "Deletes a service account token.\n\n Use this method to:\n - Revoke token access\n - Remove compromised tokens\n - Rotate credentials\n\n ### Examples\n\n - Delete token:\n\n   ```yaml\n   serviceAccountTokenId: \"d2c94c27-3b76-4a42-b88c-95a85e392c68\"\n   ```"
      operationId: gitpod.v1.ServiceAccountService.DeleteServiceAccountToken
      parameters: []
      requestBody:
        content:
          application/json:
            examples:
              delete_token:
                description: 'serviceAccountTokenId: "d2c94c27-3b76-4a42-b88c-95a85e392c68"

                  '
                value:
                  serviceAccountTokenId: d2c94c27-3b76-4a42-b88c-95a85e392c68
            schema:
              $ref: '#/components/schemas/gitpod.v1.DeleteServiceAccountTokenRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.DeleteServiceAccountTokenResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: DeleteServiceAccountToken
      tags:
      - gitpod.v1.ServiceAccountService
  /gitpod.v1.ServiceAccountService/GetServiceAccount:
    servers: []
    post:
      description: "Gets details about a specific service account.\n\n Use this method to:\n - View service account details\n - Check service account status\n - Retrieve service account metadata\n\n ### Examples\n\n - Get service account:\n\n   Retrieves details about a specific service account.\n\n   ```yaml\n   serviceAccountId: \"d2c94c27-3b76-4a42-b88c-95a85e392c68\"\n   ```"
      operationId: gitpod.v1.ServiceAccountService.GetServiceAccount
      parameters: []
      requestBody:
        content:
          application/json:
            examples:
              get_service_account:
                description: Retrieves details about a specific service account.
                value:
                  serviceAccountId: d2c94c27-3b76-4a42-b88c-95a85e392c68
            schema:
              $ref: '#/components/schemas/gitpod.v1.GetServiceAccountRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.GetServiceAccountResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: GetServiceAccount
      tags:
      - gitpod.v1.ServiceAccountService
  /gitpod.v1.ServiceAccountService/GetServiceAccountToken:
    servers: []
    post:
      description: "Gets details about a specific service account token.\n\n Use this method to:\n - View token metadata\n - Check token expiration\n - Monitor token usage\n\n ### Examples\n\n - Get token details:\n\n   ```yaml\n   serviceAccountTokenId: \"d2c94c27-3b76-4a42-b88c-95a85e392c68\"\n   ```"
      operationId: gitpod.v1.ServiceAccountService.GetServiceAccountToken
      parameters: []
      requestBody:
        content:
          application/json:
            examples:
              get_token_details:
                description: 'serviceAccountTokenId: "d2c94c27-3b76-4a42-b88c-95a85e392c68"

                  '
                value:
                  serviceAccountTokenId: d2c94c27-3b76-4a42-b88c-95a85e392c68
            schema:
              $ref: '#/components/schemas/gitpod.v1.GetServiceAccountTokenRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.GetServiceAccountTokenResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: GetServiceAccountToken
      tags:
      - gitpod.v1.ServiceAccountService
  /gitpod.v1.ServiceAccountService/ListServiceAccountTokens:
    servers: []
    post:
      description: "Lists tokens for a service account.\n\n Use this method to:\n - View all tokens for a service account\n - Audit token usage\n - Identify tokens to revoke\n\n Requires impersonation: First obtain a short-lived access token via\n CreateServiceAccountAccessToken, then use it to call this method.\n The service account ID is derived from the caller's identity.\n\n ### Examples\n\n - List tokens:\n\n   ```yaml\n   pagination:\n     pageSize: 20\n   ```"
      operationId: gitpod.v1.ServiceAccountService.ListServiceAccountTokens
      parameters:
      - in: query
        name: pageSize
        schema:
          default: 25
          maximum: 100
          minimum: 0
          type: integer
      - in: query
        name: token
        schema:
          default: ''
          type: string
      requestBody:
        content:
          application/json:
            examples:
              list_tokens:
                description: "pagination:\n  pageSize: 20\n"
                value:
                  pagination:
                    pageSize: 20
            schema:
              $ref: '#/components/schemas/gitpod.v1.ListServiceAccountTokensRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.ListServiceAccountTokensResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: ListServiceAccountTokens
      tags:
      - gitpod.v1.ServiceAccountService
  /gitpod.v1.ServiceAccountService/ListServiceAccounts:
    servers: []
    post:
      description: "Lists service accounts in an organization.\n\n Use this method to:\n - View all service accounts\n - Audit service account usage\n - Manage service account lifecycle\n\n ### Examples\n\n - List service accounts:\n\n   Shows all service accounts in an organization.\n\n   ```yaml\n   pagination:\n     pageSize: 20\n   ```"
      operationId: gitpod.v1.ServiceAccountService.ListServiceAccounts
      parameters:
      - in: query
        name: pageSize
        schema:
          default: 25
          maximum: 100
          minimum: 0
          type: integer
      - in: query
        name: token
        schema:
          default: ''
          type: string
      requestBody:
        content:
          application/json:
            examples:
              list_service_accounts:
                description: Shows all service accounts in an organization.
                value:
                  pagination:
                    pageSize: 20
            schema:
              $ref: '#/components/schemas/gitpod.v1.ListServiceAccountsRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.ListServiceAccountsResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: ListServiceAccounts
      tags:
      - gitpod.v1.ServiceAccountService
  /gitpod.v1.ServiceAccountService/UpdateServiceAccount:
    servers: []
    post:
      description: "Updates a service account.\n\n Use this method to:\n - Update service account name or description\n\n ### Examples\n\n - Update name and description:\n\n   Updates the service account name and description.\n\n   ```yaml\n   serviceAccountId: \"d2c94c27-3b76-4a42-b88c-95a85e392c68\"\n   name: \"updated-ci-pipeline\"\n   description: \"Updated CI/CD Pipeline\"\n   ```"
      operationId: gitpod.v1.ServiceAccountService.UpdateServiceAccount
      parameters: []
      requestBody:
        content:
          application/json:
            examples:
              update_name_and_description:
                description: Updates the service account name and description.
                value:
                  description: Updated CI/CD Pipeline
                  name: updated-ci-pipeline
                  serviceAccountId: d2c94c27-3b76-4a42-b88c-95a85e392c68
            schema:
              $ref: '#/components/schemas/gitpod.v1.UpdateServiceAccountRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gitpod.v1.UpdateServiceAccountResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
          description: Error
      security:
      - bearerAuth: []
      summary: UpdateServiceAccount
      tags:
      - gitpod.v1.ServiceAccountService
components:
  schemas:
    gitpod.v1.Principal:
      enum:
      - PRINCIPAL_UNSPECIFIED
      - PRINCIPAL_ACCOUNT
      - PRINCIPAL_USER
      - PRINCIPAL_RUNNER
      - PRINCIPAL_ENVIRONMENT
      - PRINCIPAL_SERVICE_ACCOUNT
      - PRINCIPAL_RUNNER_MANAGER
      title: Principal
      type: string
    gitpod.v1.DeleteServiceAccountRequest:
      additionalProperties: false
      properties:
        serviceAccountId:
          format: uuid
          title: service_account_id
          type: string
      title: DeleteServiceAccountRequest
      type: object
    gitpod.v1.UpdateServiceAccountResponse:
      additionalProperties: false
      properties:
        serviceAccount:
          $ref: '#/components/schemas/gitpod.v1.ServiceAccount'
          title: service_account
      required:
      - serviceAccount
      title: UpdateServiceAccountResponse
      type: object
    gitpod.v1.GetServiceAccountResponse:
      additionalProperties: false
      properties:
        serviceAccount:
          $ref: '#/components/schemas/gitpod.v1.ServiceAccount'
          title: service_account
      required:
      - serviceAccount
      title: GetServiceAccountResponse
      type: object
    gitpod.v1.DeleteServiceAccountTokenRequest:
      additionalProperties: false
      properties:
        serviceAccountTokenId:
          format: uuid
          title: service_account_token_id
          type: string
      title: DeleteServiceAccountTokenRequest
      type: object
    gitpod.v1.GetServiceAccountTokenResponse:
      additionalProperties: false
      properties:
        token:
          $ref: '#/components/schemas/gitpod.v1.ServiceAccountToken'
          title: token
      required:
      - token
      title: GetServiceAccountTokenResponse
      type: object
    gitpod.v1.GetServiceAccountRequest:
      additionalProperties: false
      properties:
        serviceAccountId:
          format: uuid
          title: service_account_id
          type: string
      title: GetServiceAccountRequest
      type: object
    gitpod.v1.Subject:
      additionalProperties: false
      properties:
        id:
          description: id is the UUID of the subject
          format: uuid
          title: id
          type: string
        principal:
          $ref: '#/components/schemas/gitpod.v1.Principal'
          description: Principal is the principal of the subject
          title: principal
      title: Subject
      type: object
    gitpod.v1.DeleteServiceAccountResponse:
      additionalProperties: false
      title: DeleteServiceAccountResponse
      type: object
    connect.error:
      additionalProperties: true
      description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
      properties:
        code:
          description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
          enum:
          - canceled
          - unknown
          - invalid_argument
          - deadline_exceeded
          - not_found
          - already_exists
          - permission_denied
          - resource_exhausted
          - failed_precondition
          - aborted
          - out_of_range
          - unimplemented
          - internal
          - unavailable
          - data_loss
          - unauthenticated
          example:
          - not_found
          type: string
        message:
          description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
          type: string
      title: Connect Error
      type: object
    gitpod.v1.CreateServiceAccountResponse:
      additionalProperties: false
      properties:
        serviceAccount:
          $ref: '#/components/schemas/gitpod.v1.ServiceAccount'
          title: service_account
      required:
      - serviceAccount
      title: CreateServiceAccountResponse
      type: object
    gitpod.v1.CreateServiceAccountRequest:
      additionalProperties: false
      properties:
        description:
          maxLength: 500
          title: description
          type: string
        name:
          maxLength: 64
          minLength: 1
          title: name
          type: string
        validUntil:
          $ref: '#/components/schemas/google.protobuf.Timestamp'
          description: "valid_until specifies when this service account expires.\n Note: In the current design, the service account itself has an expiry.\n All authentication using this service account will fail after this time."
          title: valid_until
      required:
      - validUntil
      title: CreateServiceAccountRequest
      type: object
    gitpod.v1.PaginationRequest:
      additionalProperties: false
      properties:
        pageSize:
          description: "Page size is the maximum number of results to retrieve per page.\n Defaults to 25. Maximum 100."
          format: int32
          maximum: 100
          title: page_size
          type: integer
        token:
          description: "Token for the next set of results that was returned as next_token of a\n PaginationResponse"
          title: token
          type: string
      title: PaginationRequest
      type: object
    google.protobuf.Duration:
      description: "A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n     Timestamp start = ...;\n     Timestamp end = ...;\n     Duration duration = ...;\n\n     duration.seconds = end.seconds - start.seconds;\n     duration.nanos = end.nanos - start.nanos;\n\n     if (duration.seconds < 0 && duration.nanos > 0) {\n       duration.seconds += 1;\n       duration.nanos -= 1000000000;\n     } else if (duration.seconds > 0 && duration.nanos < 0) {\n       duration.seconds -= 1;\n       duration.nanos += 1000000000;\n     }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n     Timestamp start = ...;\n     Duration duration = ...;\n     Timestamp end = ...;\n\n     end.seconds = start.seconds + duration.seconds;\n     end.nanos = start.nanos + duration.nanos;\n\n     if (end.nanos < 0) {\n       end.seconds -= 1;\n       end.nanos += 1000000000;\n     } else if (end.nanos >= 1000000000) {\n       end.seconds += 1;\n       end.nanos -= 1000000000;\n     }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n     td = datetime.timedelta(days=3, minutes=10)\n     duration = Duration()\n     duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\"."
      format: regex
      pattern: ^[-\+]?([0-9]+\.?[0-9]*|\.[0-9]+)s$
      type: string
    gitpod.v1.ListServiceAccountTokensRequest:
      additionalProperties: false
      properties:
        pagination:
          $ref: '#/components/schemas/gitpod.v1.PaginationRequest'
          title: pagination
      title: ListServiceAccountTokensRequest
      type: object
    gitpod.v1.CreateServiceAccountTokenResponse:
      additionalProperties: false
      properties:
        serviceAccountToken:
          $ref: '#/components/schemas/gitpod.v1.ServiceAccountToken'
          description: service_account_token contains the token metadata.
          title: service_account_token
        token:
          description: token is the actual JWT token value. This is only returned once during creation.
          title: token
          type: string
      required:
      - token
      title: CreateServiceAccountTokenResponse
      type: object
    gitpod.v1.CreateServiceAccountAccessTokenRequest:
      additionalProperties: false
      properties:
        serviceAccountId:
          format: uuid
          title: service_account_id
          type: string
      title: CreateServiceAccountAccessTokenRequest
      type: object
    gitpod.v1.ListServiceAccountsResponse:
      additionalProperties: false
      properties:
        pagination:
          $ref: '#/components/schemas/gitpod.v1.PaginationResponse'
          title: pagination
        serviceAccounts:
          items:
            $ref: '#/components/schemas/gitpod.v1.ServiceAccount'
          title: service_accounts
          type: array
      title: ListServiceAccountsResponse
      type: object
    gitpod.v1.PaginationResponse:
      additionalProperties: false
      properties:
        nextToken:
          description: "Token passed for retrieving the next set of results. Empty if there are no\n more results"
          title: next_token
          type: string
      title: PaginationResponse
      type: object
    gitpod.v1.CreateServiceAccountTokenRequest:
      additionalProperties: false
      properties:
        description:
          title: description
          type: string
        validFor:
          $ref: '#/components/schemas/google.protobuf.Duration'
          description: "valid_for specifies how long the token should be valid.\n A large value (e.g. reaching year 2099) represents \"no expiry\".\n The actual expiry is always capped to the service account's own expiry."
          title: valid_for
      title: CreateServiceAccountTokenRequest
      type: object
    google.protobuf.Timestamp:
      description: "A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n     Timestamp timestamp;\n     timestamp.set_seconds(time(NULL));\n     timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n     struct timeval tv;\n     gettimeofday(&tv, NULL);\n\n     Timestamp timestamp;\n     timestamp.set_seconds(tv.tv_sec);\n     timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n     FILETIME ft;\n     GetSystemTimeAsFileTime(&ft);\n     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n     Timestamp timestamp;\n     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n     long millis = System.currentTimeMillis();\n\n     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n         .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n     Instant now = Instant.now();\n\n     Timestamp timestamp =\n         Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n             .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n     timestamp = Timestamp()\n     timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A proto3 JSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format."
      format: date-time
      type: string
    gitpod.v1.ListServiceAccountsRequest:
      additionalProperties: false
      properties:
        filter:
          $ref: '#/components/schemas/gitpod.v1.ListServiceAccountsRequest.Filter'
          description: filter contains options for filtering the list of service accounts.
          title: filter
        pagination:
          $ref: '#/components/schemas/gitpod.v1.PaginationRequest'
          title: pagination
      title: ListServiceAccountsRequest
      type: object
    gitpod.v1.CreateServiceAccountAccessTokenResponse:
      additionalProperties: false
      properties:
        token:
          title: token
          type: string
      title: CreateServiceAccountAccessTokenResponse
      type: object
    gitpod.v1.ServiceAccount:
      additionalProperties: false
      properties:
        createdAt:
          $ref: '#/components/schemas/google.protobuf.Timestamp'
          title: created_at
        creator:
          $ref: '#/components/schemas/gitpod.v1.Subject'
          title: creator
        description:
          title: description
          type: string
        id:
          format: uuid
          title: id
          type: string
        name:
          title: name
          type: string
        organizationId:
          format: uuid
          title: organization_id
          type: string
        suspended:
          description: "suspended indicates whether the service account has been deleted (soft-delete).\n Suspended service accounts cannot be used for authentication."
          title: suspended
          type: boolean
        validUntil:
          $ref: '#/components/schemas/google.protobuf.Timestamp'
          title: valid_until
      title: ServiceAccount
      type: object
    gitpod.v1.UpdateServiceAccountRequest:
      additionalProperties: false
      properties:
        description:
          description: 'Note: valid_until is immutable and cannot be updated'
          maxLength: 500
          nullable: true
          title: description
          type: string
        name:
          description: Optional fields for update
          maxLength: 64
          minLength: 1
          nullable: true
          title: name
          type: string
        serviceAccountId:
          format: uuid
          title: service_account_id
          type: string
      title: UpdateServiceAccountRequest
      type: object
    gitpod.v1

# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/gitpod/refs/heads/main/openapi/gitpod-gitpod-v1-serviceaccountservice-api-openapi.yml