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

# List taxonomy categories

> List the security categories an assessment run can be focused on, with the display name and description of each. The 'key' of each entry is exactly what the 'categories' field of POST /api/v1/run accepts; a key this endpoint did not return is rejected there with a 400. Use the descriptions to pick the categories relevant to a change instead of running the full taxonomy on every deploy.

Responses are static platform metadata, so a polling caller can cache one for an hour.



## OpenAPI

````yaml /openapi.json get /api/v1/category
openapi: 3.1.0
info:
  title: Enoki External API
  description: >-
    Programmatic API for CI/CD integration. Authenticate with `Authorization:
    Bearer egk_...`.
  version: 0.1.0
servers:
  - url: https://api.enokilabs.ai
    description: Enoki API
security: []
paths:
  /api/v1/category:
    get:
      tags:
        - taxonomy
      summary: List taxonomy categories
      description: >-
        List the security categories an assessment run can be focused on, with
        the display name and description of each. The 'key' of each entry is
        exactly what the 'categories' field of POST /api/v1/run accepts; a key
        this endpoint did not return is rejected there with a 400. Use the
        descriptions to pick the categories relevant to a change instead of
        running the full taxonomy on every deploy.


        Responses are static platform metadata, so a polling caller can cache
        one for an hour.
      operationId: api_list_categories_api_v1_category_get
      parameters:
        - name: lens
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/TaxonomyLens'
            description: >-
              Optional. Which part of the taxonomy to list; defaults to
              'security', the only lens a run can be focused on. The other
              values list categories Enoki covers elsewhere — passing one of
              their keys to POST /api/v1/run is rejected with a 400.
            default: security
          description: >-
            Optional. Which part of the taxonomy to list; defaults to
            'security', the only lens a run can be focused on. The other values
            list categories Enoki covers elsewhere — passing one of their keys
            to POST /api/v1/run is rejected with a 400.
        - name: Authorization
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Bearer token with API key
            title: Authorization
          description: Bearer token with API key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiCategoryListResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    TaxonomyLens:
      type: string
      enum:
        - security
        - safety
        - compliance
      title: TaxonomyLens
      description: >-
        A top-level taxonomy bucket, as a public listing vocabulary.


        Every canonical category key is ``"{bucket}.{name}"``. These members are
        the

        buckets that name a real testing surface; ``quality`` and ``policy``
        exist

        in ``categories.yaml`` as planned rows only and are deliberately not
        listed

        (see ``_UNLISTED_BUCKETS``). Members are hand-written rather than
        derived

        (unlike ``AttackCategory``) so they are statically known: a type checker
        can

        resolve ``TaxonomyLens.SECURITY`` and FastAPI can render the vocabulary
        into

        the public API schema. The import-time check below is what keeps

        hand-written members from drifting away from the registry.


        This is the canonical comparison of the three lens-shaped enums; the
        other

        two point here rather than restating it. They are deliberately not
        shared,

        because each follows a different thing:


        * ``TaxonomyLens`` (this one) follows the *registry*, and is what the
        public
          category listing (``GET /api/v1/category``) is keyed on.
        * ``domain.testing.findings.attack.Lens`` follows *Finding storage* — it
          discriminates a persisted Finding, so it has no ``COMPLIANCE`` member
          (there is no compliance Finding subtype) and its member set moves for
          storage reasons.
        * ``domain.testing.run_lens.RunLens`` follows how *runs* are classified,
        and
          has no ``QUALITY`` / ``POLICY`` member.
    ApiCategoryListResponse:
      properties:
        categories:
          items:
            $ref: '#/components/schemas/ApiCategory'
          type: array
          title: Categories
          description: Active categories in the requested lens, sorted by key.
        lens:
          $ref: '#/components/schemas/TaxonomyLens'
          description: The lens these categories belong to.
      type: object
      required:
        - categories
        - lens
      title: ApiCategoryListResponse
      description: Response for GET /api/v1/category — one lens' active categories.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ApiCategory:
      properties:
        key:
          type: string
          title: Key
          description: >-
            Canonical category key. This is the exact value to pass in the
            'categories' list when triggering a run.
        display_name:
          type: string
          title: Display Name
          description: Short human-readable label.
        description:
          type: string
          title: Description
          description: >-
            What this category tests for. Also the grading criterion the judge
            evaluates a response against, so it is the field to read when
            choosing which categories are relevant to a change.
      type: object
      required:
        - key
        - display_name
        - description
      title: ApiCategory
      description: One taxonomy category, as exposed to external consumers.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError

````