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

# List project roles

> Returns explicit project role assignments, paginated. Exactly one of `project_id`, `user_id`, or `team_id` must be supplied; none or more than one is a `400`.

`project_id` returns every row on that project. `user_id` returns rows naming that user directly, org-wide; `team_id` does the same for a team. Listing by `user_id` or `team_id` is Org Admin only — a `403` otherwise. Neither resolves effective access: a `user_id` request does not return rows naming a team the user belongs to, and a `team_id` request does not return rows naming the team's members individually.

Listing by `project_id` requires permission to read both users and the project. By default that means Org Admins, Project Admins on that project, and Org Members who hold Project Viewer or Project Writer on it. Anyone else gets a `403`.

A `project_id`, `user_id` or `team_id` naming something outside the caller's organization is a `404`, indistinguishable from one that names nothing at all.

On deployments where Org Admins are granted implicit Project Admin access to every project, a `project_id` listing omits rows that name an Org Admin user, since that access is inferred rather than stored. Rows that name a team are always listed. A `user_id` request that names an Org Admin is rejected with `422`, because their explicit rows would understate their access. A `team_id` request is unaffected. The implicit grant is never itself a row.




## OpenAPI

````yaml GET /v3/project-roles
openapi: 3.0.3
info:
  title: Fiddler API - 2.0
  description: APIs to interact with Fiddler
  termsOfService: https://fiddler.ai/about/terms
  contact:
    email: support@fiddler.ai
  license:
    name: Proprietary
    url: '2.0'
  version: '2.0'
servers: []
security:
  - BearerAuth: []
tags:
  - name: access-key
    description: CRUD operations for API keys
  - name: agent-v3
    description: CRUD for the Agent Registry (Stage 1, manual entries)
  - name: aggregation-invalidation-request-v3
    description: Endpoints related to retrieving aggregation invalidation requests
  - name: alert-rules-v3
    description: CRUD for Alert Rules, Summary, and Stats APIs
  - name: application-v3
  - name: auth
    description: Authentication strategies and login flows
  - name: baseline-v3
    description: CRUD for baseline
  - name: catalog-v3
    description: >-
      Entity catalog provides paginated, searchable discovery of entity names
      (attribute keys, agent names, span types, span names, score names,
      evaluator config names) and their distinct values. Powered by ClickHouse
      materialized views — no worker or PostgreSQL dependency.
  - name: chart-annotation-v3
    description: Endpoints related to retrieving chart annotations
  - name: chart-v3
    description: CRUD for chart
  - name: queries-v3
    description: v3 queries API
  - name: configuration-v3
    description: >
      Read and change runtime configurations (Config Manager) for your
      organization, its projects, and its models.


      **Private preview.** These endpoints accept requests on every deployment.

      Whether a saved value takes effect depends on two deployment settings that
      are off by default:

      one makes Fiddler read stored values,

      and the other runs the configuration worker, which applies retention
      changes to stored data.

      Contact your Fiddler Customer Success Manager before using these
      endpoints.


      This reference documents the data retention (TTL) settings:

      `PROD_EVENTS_TTL_DAYS`, `GENAI_TRACES_TTL_DAYS`, and
      `GENAI_METRICS_TTL_DAYS`.

      The API accepts other registered settings too;

      contact your Fiddler Customer Success Manager before changing any of them.

      **Retention settings permanently delete data** once it is older than the
      configured period.

      When existing data is affected depends on the setting; see each setting's
      description.
  - name: cost-evaluators-v3
    description: >
      Paginated roll-up of per-evaluator LLM cost and token usage, aggregated
      hourly. Available only on deployments with evaluator cost reporting
      enabled.
  - name: custom-metrics-v3
  - name: dimensionality-reduction-v3
  - name: environment-v3
    description: Endpoints related to environment management
  - name: evals
  - name: datasets
  - name: evaluation-v3
  - name: evaluator-v3
  - name: rule-evaluators-v3
  - name: experiment-v3
  - name: explainability-v3
  - name: llm_rca-v3
  - name: file-upload
    description: Endpoints related to file uploading.
  - name: fql-expressions-v3
    description: >
      Endpoints for listing FQL (Fiddler Query Language) functions available for
      GenAI custom metrics. Used by the frontend for autocomplete and signature
      hints in the FQL editor.
  - name: genai-alert-rules-v3
    description: CRUD API for GenAI Alert Rules
  - name: genai-custom-metrics-v3
    description: API for GenAI Custom Metrics
  - name: genai-filters-v3
    description: API for GenAI Filters
  - name: genai-metrics-v3
    description: >-
      Endpoints for pre-aggregated GenAI metrics. All metric data is
      pre-aggregated hourly by a Celery-based metric collector; no real-time
      aggregation is performed at request time.
  - name: guardrails-api
    description: Endpoints related to retrieving Guardrails specific data
  - name: ingestion-v3
  - name: intercom-api
    description: Endpoints related to intercom APIs
  - name: jobs-v3
  - name: llm-gateway-v3
  - name: auth-login
  - name: auth-logout
  - name: mcp-client-setup-v3
    description: Endpoints for retrieving MCP client setup instructions.
  - name: metrics-v3
    description: Metrics endpoints
  - name: model-v3
  - name: dashboard-v3
  - name: model-deployment-v3
  - name: monitoring-summary-v3
  - name: histograms-v3
  - name: organization-roles-v3
    description: Update user org role
  - name: organization-settings-v3
    description: Update organization settings such as timezone, email configuration, etc.
  - name: pagerduty-api
    description: CRUD for Pagerduty services.
  - name: project-v3
  - name: project-roles-v3
    description: Project role assignment management
  - name: scores-v3
    description: Unified CRUD for scores and annotations
  - name: searchable-text-key-v3
    description: >-
      Manage the global searchable text keys table that controls which OTel
      attribute keys are routed to the full-text-searchable `ValueContent`
      column in the unified attributes table. Changes propagate to the backing
      ClickHouse dictionary within 1-2 minutes and affect all tenants.
  - name: segments-v3
  - name: semantic-mapping-v3
    description: >-
      Manage the global semantic name mappings table that maps raw OTel
      attribute keys to canonical semantic concepts. Changes propagate to the
      backing ClickHouse dictionary within 1-2 minutes and affect all tenants.
  - name: server-info-v3
    description: Endpoints related to retrieving server information
  - name: service-account
    description: >
      Service accounts and their API keys. A human Org Admin manages the service
      accounts of their own organization: create, read, update, and
      enable/disable (there is no delete — an account is disabled instead), and
      issue, rename, enable/disable, and revoke each account's API keys (a key's
      expiry is fixed at creation and changed only by rotating the key). An API
      key is an `fks_` secret that inherits the account's grants and cannot
      manage service accounts; an active, unexpired key must be disabled before
      it can be revoked, and it authenticates only while both it and its account
      are active. Scopes here are capability scopes (what the account may do),
      not OAuth scopes.
  - name: sessions-v3
    description: v3 session APIs
  - name: span-v3
  - name: team-roles-v3
  - name: team-v3
  - name: traces-v3
    description: v3 trace api for monitoring
  - name: fetch-sessions-v3
    description: v3 fetch sessions api for monitoring
  - name: user-access-key
    description: >
      CRUD operations for user API keys. All endpoints are user-scoped — each
      user can only operate on their own API keys. No one including Org admins
      have access to other users' API keys.
  - name: users-v3
  - name: version-compatibility-v3
  - name: webhooks
externalDocs:
  url: https://docs.fiddler.ai
  description: Find out more about Fiddler
paths:
  /v3/project-roles:
    get:
      tags:
        - project-roles-v3
      summary: List project roles
      description: >
        Returns explicit project role assignments, paginated. Exactly one of
        `project_id`, `user_id`, or `team_id` must be supplied; none or more
        than one is a `400`.


        `project_id` returns every row on that project. `user_id` returns rows
        naming that user directly, org-wide; `team_id` does the same for a team.
        Listing by `user_id` or `team_id` is Org Admin only — a `403` otherwise.
        Neither resolves effective access: a `user_id` request does not return
        rows naming a team the user belongs to, and a `team_id` request does not
        return rows naming the team's members individually.


        Listing by `project_id` requires permission to read both users and the
        project. By default that means Org Admins, Project Admins on that
        project, and Org Members who hold Project Viewer or Project Writer on
        it. Anyone else gets a `403`.


        A `project_id`, `user_id` or `team_id` naming something outside the
        caller's organization is a `404`, indistinguishable from one that names
        nothing at all.


        On deployments where Org Admins are granted implicit Project Admin
        access to every project, a `project_id` listing omits rows that name an
        Org Admin user, since that access is inferred rather than stored. Rows
        that name a team are always listed. A `user_id` request that names an
        Org Admin is rejected with `422`, because their explicit rows would
        understate their access. A `team_id` request is unaffected. The implicit
        grant is never itself a row.
      operationId: getProjectRolesV3
      parameters:
        - name: project_id
          in: query
          description: >-
            Project to list role assignments for. Returns every row on that
            project. Exactly one of `project_id`, `user_id`, or `team_id` must
            be supplied — none, or more than one, is a `400`.
          required: false
          schema:
            type: string
            format: uuid
        - name: user_id
          in: query
          description: >-
            User to list role assignments for, across the caller's organization.
            Org Admin only. Exactly one of `project_id`, `user_id`, or `team_id`
            must be supplied — none, or more than one, is a `400`.
          required: false
          schema:
            type: string
            format: uuid
        - name: team_id
          in: query
          description: >-
            Team to list role assignments for, across the caller's organization.
            Org Admin only. Exactly one of `project_id`, `user_id`, or `team_id`
            must be supplied — none, or more than one, is a `400`.
          required: false
          schema:
            type: string
            format: uuid
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
        - $ref: '#/components/parameters/ordering'
      responses:
        '200':
          description: Paginated list of explicit project role assignments
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedApiResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          items:
                            type: array
                            items:
                              $ref: '#/components/schemas/ProjectRoleV3'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
        '500':
          $ref: '#/components/responses/500'
components:
  parameters:
    limit:
      name: limit
      in: query
      description: Limit for the pagination
      required: false
      schema:
        type: integer
    offset:
      name: offset
      in: query
      description: Offset for the pagination
      required: false
      schema:
        type: integer
    ordering:
      name: ordering
      in: query
      description: >-
        Allows you to order results by any field. For desc order prefix field
        name with `-` and provide comman separated values for multiple fields
      required: false
      schema:
        type: string
  schemas:
    PaginatedApiResponse:
      type: object
      description: |
        Response object for paginated API responses.
      properties:
        api_version:
          type: string
          default: '3.0'
          enum:
            - '2.0'
            - '3.0'
          description: |
            API version of the response.
        kind:
          type: string
          default: PAGINATED
          enum:
            - PAGINATED
          description: |
            Type of response, indicating a paginated response.
        data:
          type: object
          properties:
            page_size:
              type: integer
              default: 10
              example: 10
              description: |
                Number of items per page in the response.
            item_count:
              type: integer
              default: 10
              example: 10
              description: |
                Number of items in the current page.
            total:
              type: integer
              example: 100
              default: 100
              description: |
                Total number of items across all pages.
            page_count:
              type: integer
              default: 10
              example: 10
              description: |
                Total number of pages.
            page_index:
              type: integer
              default: 1
              example: 1
              description: |
                Current page index.
            offset:
              type: integer
              default: 0
              example: 0
              description: |
                Offset of the first item in the current page.
    ProjectRoleV3:
      title: ProjectRoleV3
      description: >
        Represents an explicit project role assignment: a permission level on a
        single project, given either to a user or to a team. For a user
        assignment `user` is set and `team` is `null`; for a team assignment
        `team` is set and `user` is `null`.
      oneOf:
        - $ref: '#/components/schemas/ProjectRoleUserAssignmentV3'
        - $ref: '#/components/schemas/ProjectRoleTeamAssignmentV3'
    ProjectRoleUserAssignmentV3:
      title: ProjectRoleUserAssignmentV3
      description: A project role assigned to a user.
      allOf:
        - type: object
          properties:
            id:
              type: string
              format: uuid
              description: Unique identifier of the project role assignment.
            role:
              $ref: '#/components/schemas/ProjectRoleEnum'
            user:
              $ref: '#/components/schemas/UserCompact'
            team:
              type: object
              nullable: true
              description: >
                Always null for a user assignment. Present so that user and team
                assignments return the same keys.
            principal_type:
              type: string
              enum:
                - human
                - service_account
              description: |
                Type of the member principal.
            project:
              $ref: '#/components/schemas/ProjectCompact'
            organization:
              $ref: '#/components/schemas/OrganizationCompact'
          required:
            - id
            - role
            - user
            - principal_type
            - project
            - organization
        - $ref: '#/components/schemas/CreateUpdateTimestamp'
    ProjectRoleTeamAssignmentV3:
      title: ProjectRoleTeamAssignmentV3
      description: A project role assigned to a team.
      allOf:
        - type: object
          properties:
            id:
              type: string
              format: uuid
              description: Unique identifier of the project role assignment.
            role:
              $ref: '#/components/schemas/ProjectRoleEnum'
            team:
              $ref: '#/components/schemas/TeamCompact'
            user:
              type: object
              nullable: true
              description: >
                Always null for a team assignment. Present so that user and team
                assignments return the same keys.
            principal_type:
              type: string
              nullable: true
              enum:
                - human
                - service_account
                - null
              description: >
                Always null for a team assignment. Present on every project-role
                response for uniformity; it names a principal type only for a
                user assignment.
            project:
              $ref: '#/components/schemas/ProjectCompact'
            organization:
              $ref: '#/components/schemas/OrganizationCompact'
          required:
            - id
            - role
            - team
            - principal_type
            - project
            - organization
        - $ref: '#/components/schemas/CreateUpdateTimestamp'
    ErrorResponse:
      type: object
      description: |
        Response object for errors returned by the API.
      properties:
        api_version:
          type: string
          default: '3.0'
          enum:
            - '2.0'
            - '3.0'
          description: |
            API version of the response.
        kind:
          type: string
          default: ERROR
          enum:
            - ERROR
          description: |
            Type of response, usually indicating an error.
        error:
          type: object
          properties:
            code:
              type: integer
              format: int32
              description: >
                Represents the code for this error, typically an HTTP response
                code.
              default: 400
              enum:
                - 400
                - 401
                - 403
                - 404
                - 409
                - 410
                - 422
                - 429
                - 500
                - 501
                - 503
            message:
              type: string
              description: >
                A human-readable message providing more details about the error.
                If there are multiple errors, it will be the message for the
                first error.
              example: Resource Not Found
            errors:
              type: array
              description: >
                Container for additional information regarding the error,
                especially for multiple errors.
              items:
                type: object
                properties:
                  reason:
                    type: string
                    description: >
                      Unique identifier for this error, different from the error
                      code.
                    example: ResourceNotFoundException
                  message:
                    type: string
                    description: >
                      A human-readable message providing more details about the
                      error. If there is only one error, this field will match
                      error.message.
                    example: Resource Not Found
                  help:
                    type: string
                    description: >
                      Link to support or documentation providing more
                      information on the error.
    ProjectRoleEnum:
      type: string
      description: >
        Defines the different types of project roles that can be assigned to
        users or teams.
      enum:
        - Project Admin
        - Project Writer
        - Project Viewer
        - Project Dashboard Viewer
    UserCompact:
      type: object
      title: UserCompactV3
      description: >
        Compact version of a user which can be included in the response of
        relevant APIs.
      required:
        - id
        - email
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          description: |
            Unique identifier for the user.
        full_name:
          type: string
          readOnly: true
          description: |
            Full name of the user.
        email:
          type: string
          format: email
          description: |
            Email address of the user.
    ProjectCompact:
      type: object
      title: ProjectCompact
      description: >
        Compact version of a project which can be included in the response of
        relevant APIs.
      required:
        - id
        - name
      properties:
        id:
          type: string
          format: uuid
          description: |
            Unique identifier of the project.
        name:
          type: string
          description: |
            Name of the project.
        asset_type:
          type: string
          enum:
            - ML_MODEL
            - GEN_AI_APP
          description: |
            Type of assets the project can have.
    OrganizationCompact:
      type: object
      title: OrganizationCompact
      description: >
        Compact version of an organization which can be included in the response
        of relevant APIs.
      required:
        - id
        - name
      properties:
        id:
          type: string
          format: uuid
          description: |
            Unique identifier of the organization.
        name:
          type: string
          description: |
            Name of the organization.
    CreateUpdateTimestamp:
      type: object
      required:
        - created_at
        - updated_at
      properties:
        created_at:
          type: string
          format: date-time
          readOnly: true
          description: |
            Date and time when the object was created.
        updated_at:
          type: string
          format: date-time
          readOnly: true
          description: |
            Date and time when the object was last updated.
    TeamCompact:
      type: object
      title: TeamCompactV3
      description: >
        Compact version of a team which can be included in the response of
        relevant APIs.
      required:
        - id
        - name
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          description: |
            Unique identifier for the team.
        name:
          type: string
          description: |
            Name of the team.
  responses:
    '400':
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    '401':
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    '403':
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    '404':
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    '422':
      description: Unprocessable Entity
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    '500':
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer

````