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

# List Categories

> List categories through SoluDesks APIs.

Tenant API keys operate inside the tenant LearnHub workspace. Service-provider API keys use the same endpoint family for service-provider-owned admin training content where supported.



## OpenAPI

````yaml api-reference/openapi.json GET /v1/external/learnhub/categories
openapi: 3.0.3
info:
  title: SoluDesks APIs
  version: 1.0.0
  description: >-
    REST API reference for documented SoluDesks API families. This generated
    file currently includes the LearnHub external endpoints.
servers:
  - url: https://staging.api.soludesks.com
    description: SoluDesks staging API
security:
  - apiKeyAuth: []
tags:
  - name: Categories
  - name: Courses
  - name: Sections
  - name: Lessons
  - name: Assessments
  - name: Assignments
  - name: Quizzes
  - name: Uploads
paths:
  /v1/external/learnhub/categories:
    get:
      tags:
        - Categories
      summary: List categories
      description: >-
        List categories through SoluDesks APIs.


        Tenant API keys operate inside the tenant LearnHub workspace.
        Service-provider API keys use the same endpoint family for
        service-provider-owned admin training content where supported.
      operationId: v1_external_learnhub_categories_list
      parameters:
        - name: page
          required: false
          in: query
          description: A page number within the paginated result set.
          schema:
            type: integer
        - name: search
          required: false
          in: query
          description: A search term.
          schema:
            type: string
        - name: size
          required: false
          in: query
          description: Number of results to return per page.
          schema:
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/ExternalLearnHubCategoryListExternalLearnHubPaginatedAPIResponse
          description: ''
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalLearnHubErrorResponse'
              examples:
                error:
                  summary: Bad request.
                  value:
                    status: 400
                    success: false
                    code: REQUEST_FAILED
                    message: Bad request.
                    data: null
                    errors: []
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalLearnHubErrorResponse'
              examples:
                error:
                  summary: Missing or invalid API key.
                  value:
                    status: 401
                    success: false
                    code: REQUEST_FAILED
                    message: Missing or invalid API key.
                    data: null
                    errors: []
        '403':
          description: >-
            Permission denied, inactive service provider, or unsupported key
            mode.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalLearnHubErrorResponse'
              examples:
                error:
                  summary: >-
                    Permission denied, inactive service provider, or unsupported
                    key mode.
                  value:
                    status: 403
                    success: false
                    code: REQUEST_FAILED
                    message: >-
                      Permission denied, inactive service provider, or
                      unsupported key mode.
                    data: null
                    errors: []
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalLearnHubErrorResponse'
              examples:
                error:
                  summary: Resource not found.
                  value:
                    status: 404
                    success: false
                    code: REQUEST_FAILED
                    message: Resource not found.
                    data: null
                    errors: []
        '409':
          description: Idempotency conflict or request already in progress.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalLearnHubErrorResponse'
              examples:
                error:
                  summary: Idempotency conflict or request already in progress.
                  value:
                    status: 409
                    success: false
                    code: REQUEST_FAILED
                    message: Idempotency conflict or request already in progress.
                    data: null
                    errors: []
        '422':
          description: Validation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalLearnHubErrorResponse'
              examples:
                error:
                  summary: Validation failed.
                  value:
                    status: 422
                    success: false
                    code: REQUEST_FAILED
                    message: Validation failed.
                    data: null
                    errors: []
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalLearnHubErrorResponse'
              examples:
                error:
                  summary: Rate limit exceeded.
                  value:
                    status: 429
                    success: false
                    code: REQUEST_FAILED
                    message: Rate limit exceeded.
                    data: null
                    errors: []
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalLearnHubErrorResponse'
              examples:
                error:
                  summary: Internal server error.
                  value:
                    status: 500
                    success: false
                    code: REQUEST_FAILED
                    message: Internal server error.
                    data: null
                    errors: []
      security:
        - apiKeyAuth: []
components:
  schemas:
    ExternalLearnHubCategoryListExternalLearnHubPaginatedAPIResponse:
      type: object
      properties:
        status:
          type: integer
        success:
          type: boolean
        code:
          type: string
        message:
          type: string
        data:
          $ref: >-
            #/components/schemas/ExternalLearnHubCategoryListExternalLearnHubPaginatedData
        errors:
          type: array
          items:
            type: object
            additionalProperties: {}
      required:
        - code
        - data
        - errors
        - message
        - status
        - success
    ExternalLearnHubErrorResponse:
      type: object
      required:
        - status
        - success
        - code
        - message
        - data
        - errors
      properties:
        status:
          type: integer
          example: 422
        success:
          type: boolean
          example: false
        code:
          type: string
          example: VALIDATION_ERROR
        message:
          type: string
          example: Some fields contain invalid values.
        data:
          nullable: true
          example: null
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ExternalLearnHubErrorItem'
    ExternalLearnHubCategoryListExternalLearnHubPaginatedData:
      type: object
      properties:
        paginator:
          $ref: >-
            #/components/schemas/ExternalLearnHubCategoryListExternalLearnHubPaginator
        results:
          type: array
          items:
            $ref: '#/components/schemas/ExternalLearnHubCourseCategoryResponse'
      required:
        - paginator
        - results
    ExternalLearnHubErrorItem:
      type: object
      properties:
        field:
          type: string
          example: title
        code:
          type: string
          example: required
        message:
          type: string
          example: This field is required.
    ExternalLearnHubCategoryListExternalLearnHubPaginator:
      type: object
      properties:
        count:
          type: integer
        page:
          type: integer
        page_size:
          type: integer
        total_pages:
          type: integer
        next:
          type: string
          format: uri
          nullable: true
        next_page_number:
          type: integer
          nullable: true
        previous:
          type: string
          format: uri
          nullable: true
        previous_page_number:
          type: integer
          nullable: true
      required:
        - count
        - next
        - next_page_number
        - page
        - page_size
        - previous
        - previous_page_number
        - total_pages
    ExternalLearnHubCourseCategoryResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          readOnly: true
        created_datetime:
          type: string
          format: date-time
          readOnly: true
          description: datetime of object creation
        updated_datetime:
          type: string
          format: date-time
          readOnly: true
          description: datetime of object update
      required:
        - created_datetime
        - id
        - name
        - updated_datetime
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: 'External API key. Format: Bearer <API_KEY>'

````