info:
  name: Filter Media Items
  type: http
  seq: 1
http:
  method: GET
  url: '{{base_url}}/api/media-items/filtered?library_id={{library_id}}&genre_filter=Fiction&language_filter=en&year_min=2000&year_max=2024&limit=10&offset=0'
  auth: inherit
  body:
    type: none
  headers:
  - key: Content-Type
    value: application/json

docs: |-
  ## Filter Media Items
    
    **Method:** GET
    
    **Endpoint:** /api/media-items/filtered
    
    **Authentication:** Required (Bearer token)
    
    **Query Parameters:**
    - `library_id` (string, required): UUID of the library
    - `author_filter` (string, optional): Filter by author (partial match)
    - `series_filter` (string, optional): Filter by series (partial match)
    - `genre_filter` (string, optional): Filter by genre (exact match)
    - `language_filter` (string, optional): Filter by language (exact match, e.g., 'en', 'es', 'fr')
    - `year_min` (integer, optional): Minimum copyright year
    - `year_max` (integer, optional): Maximum copyright year
    - `has_cover` (boolean, optional): Filter for items with cover images only
    - `sort` (string, optional): Sort field and direction (same options as ListMediaItems)
    - `limit` (integer, optional): Number of items to return (default: 50, max: 1000)
    - `offset` (integer, optional): Number of items to skip (default: 0)
    
    **Response:** Object containing array of filtered media items
    
    **Status Codes:**
    - 200: Success
    - 400: Bad request (invalid parameters)
    - 401: Unauthorized
    - 500: Internal server error
    
    **Examples:**
    - Filter by genre: `/api/media-items/filtered?library_id=xxx&genre_filter=Fiction`
    - Filter by language: `/api/media-items/filtered?library_id=xxx&language_filter=es`
    - Filter by year range: `/api/media-items/filtered?library_id=xxx&year_min=2000&year_max=2024`
    - Filter by cover: `/api/media-items/filtered?library_id=xxx&has_cover=true`
    - Combine filters: `/api/media-items/filtered?library_id=xxx&genre_filter=Sci-Fi&year_min=2010&language_filter=en`
    
    **Filter Behavior:**
    - Multiple filters can be combined (AND logic)
    - Author and series filters use partial matching (ILIKE)
    - Genre and language filters use exact matching
    - Year range filters are inclusive
    - Filters are applied before sorting and pagination
    - User library visibility is respected
