> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloud.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Projects

> List the projects in a workspace. Results are paginated using a cursor. Use the `project_id` of a project when you create or list virtual keys for it. Administrators can list the projects in any workspace of the account. Workspace Administrators can list the projects only in workspaces where they hold the Workspace Administrator role. A workspace outside the caller's reach returns `404`.




## OpenAPI

````yaml en/API/Management-API.yaml GET /workspaces/{workspace_id}/projects
openapi: 3.1.0
info:
  title: CData Connect AI Management API
  version: v1
  description: >
    The Connect AI Management API provides programmatic control over enterprise
    platform administration. Base path: /api/v1/admin. Use it to manage users,
    service accounts, roles, and resource permissions without manual UI
    operations. The API follows OAS 3.0 standards with OAuth 2.0 scoped
    authentication.

    On versioning: the version prefix is incremented when breaking changes
    require it. A new /api/v2/admin path will be introduced with a 6-month
    deprecation notice before any v1 endpoint is retired.

    On human users vs. service accounts: human users are provisioned and
    lifecycle-managed by SCIM; the Management API handles direct overrides and
    atomic deprovisioning. Service accounts (CI/CD pipelines, IaC tooling,
    Terraform) are fully managed via the Management API and are not SCIM-owned.
servers:
  - url: https://cloud.cdata.com/api/v1/admin
    description: Production base URL
security:
  - oauth2: []
tags:
  - name: Users
    description: >
      Lifecycle management for human users: create, update, deprovision, and
      manage direct role assignments, workspace-scoped roles, and direct
      resource permissions. SCIM handles group-based provisioning and user
      creation at scale; this API handles direct overrides and atomic
      deprovisioning.
  - name: Service Accounts
    description: >
      Full lifecycle management for machine identities (CI/CD pipelines, IaC
      tooling, Terraform automation). Service accounts are not SCIM-owned and
      authenticate via OAuth 2.0 client credentials using the `client_id`
      returned on creation.
  - name: Projects
    description: >
      List the projects in a workspace. Use a project's `project_id` when you
      create or list virtual keys for that project.
  - name: Virtual Keys
    description: >
      Create, list, disable, re-enable, and revoke LLM Gateway virtual keys. A
      virtual key is the credential a client sends to the LLM Gateway to
      authenticate, and it is issued to a user or service account for a project.
      The full key secret is returned only once, in the create response.
      Revoking a key is permanent, and the record is kept for auditing. Callers
      must be an Admin, or a Workspace Admin of the workspace in the path. The
      account must have the AI Gateway and LLM Gateway enabled; revoking a key
      requires only the AI Gateway. Each account is limited to 600 Management
      API calls per minute, and revoking or disabling a key never counts against
      the limit.
paths:
  /workspaces/{workspace_id}/projects:
    get:
      tags:
        - Projects
      summary: List Projects
      description: >
        List the projects in a workspace. Results are paginated using a cursor.
        Use the `project_id` of a project when you create or list virtual keys
        for it. Administrators can list the projects in any workspace of the
        account. Workspace Administrators can list the projects only in
        workspaces where they hold the Workspace Administrator role. A workspace
        outside the caller's reach returns `404`.
      operationId: listProjects
      parameters:
        - name: workspace_id
          in: path
          required: true
          description: Workspace identifier (UUID).
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          description: Maximum number of results to return per page.
          schema:
            type: integer
            default: 20
        - name: cursor
          in: query
          description: >-
            Opaque pagination cursor from `next_cursor` in the previous
            response. Omit to start from the beginning.
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectCollection'
              example:
                items:
                  - project_id: a7b8c9d0-e1f2-3456-abcd-567890123456
                    name: Month-end close
                    description: null
                    active: true
                limit: 20
                next_cursor: null
        '403':
          $ref: '#/components/responses/VirtualKeyForbidden'
        '404':
          $ref: '#/components/responses/WorkspaceNotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      security:
        - oauth2: []
components:
  schemas:
    ProjectCollection:
      allOf:
        - $ref: '#/components/schemas/CollectionEnvelope'
        - type: object
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/Project'
    CollectionEnvelope:
      type: object
      properties:
        limit:
          type: integer
          description: Maximum number of items per page as requested.
        next_cursor:
          type: string
          nullable: true
          description: >-
            Pagination cursor for the next page. null when no further pages
            exist. Total count is not returned.
    Project:
      type: object
      properties:
        project_id:
          type: string
          format: uuid
          description: Unique identifier of the project.
        name:
          type: string
          description: Display name of the project.
        description:
          type: string
          nullable: true
          description: >-
            Description of the project. null when the project has no
            description.
        active:
          type: boolean
          description: Whether the project is active.
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          description: Error details.
          properties:
            code:
              type: string
              description: SCREAMING_SNAKE_CASE error code.
            message:
              type: string
              description: Human-readable error description.
            details:
              type: array
              description: Additional error context, present only where needed.
              items:
                type: object
                additionalProperties: true
  responses:
    VirtualKeyForbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            insufficient_role:
              summary: Caller has a role that cannot manage virtual keys
              value:
                error:
                  code: INSUFFICIENT_ROLE
                  message: Your role in this workspace does not permit this operation.
            caller_type_not_permitted:
              summary: Service account has no role in the workspace
              value:
                error:
                  code: CALLER_TYPE_NOT_PERMITTED
                  message: This caller type is not permitted to perform this operation.
    WorkspaceNotFound:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: WORKSPACE_NOT_FOUND
              message: The specified workspace does not exist.
    TooManyRequests:
      description: >-
        Too Many Requests. The account exceeded 600 Management API calls per
        minute.
      headers:
        Retry-After:
          description: Number of seconds to wait before you retry the request.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://cloud-login.cdata.com/oauth/token
          scopes:
            management:users:read: Read access to user resources.
            management:users:write: Write access to user resources.
            management:service-accounts:read: Read access to service account resources.
            management:service-accounts:write: Write access to service account resources.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.