# Search Movies & Series API ## Overview Search endpoints for movies and series content. The search is case-insensitive, accent-insensitive, and supports multi-word queries (all words must match in the title or description). --- ## Endpoints ### Search Movies | Client | Method | URL | |---------|--------|---------------------------------------| | Web | GET | `/client/v1/contents/movies/search` | | TV | GET | `/tv/v1/contents/movies/search` | | Mobile | GET | `/mobile/v1/contents/movies/search` | ### Search Series | Client | Method | URL | |---------|--------|---------------------------------------| | Web | GET | `/client/v1/contents/series/search` | | TV | GET | `/tv/v1/contents/series/search` | | Mobile | GET | `/mobile/v1/contents/series/search` | --- ## Query Parameters | Parameter | Type | Required | Description | |------------|--------|----------|--------------------------------------| | `q` | string | Yes | Search query text | | `page` | int | Yes | Page number (starts at 1) | | `pageSize` | int | Yes | Items per page (max 15) | ### Example Request ``` GET /client/v1/contents/movies/search?q=egjeli episodi&page=1&pageSize=10 ``` --- ## Search Behavior - The query is split into individual words - Each word is matched against **title** and **description** fields - All words must match (AND logic) -- each word can match in either field (OR logic) - Matching is **case-insensitive** and **accent-insensitive** (e.g. "cafe" matches "Café") - `page` values below 1 are treated as 1 - `pageSize` is capped between 1 and 15 ### Example Searching `"egjeli episodi 1"` matches a movie titled **"Stupcat Egjeli 2017 - Episodi 1"** because all three words ("egjeli", "episodi", "1") are found in the title, even though they are not adjacent. --- ## Response Format Both endpoints return the same paginated wrapper: ```json { "items": [ ... ], "totalCount": 42 } ``` ### Movie Item ```json { "id": "abc123", "title": "Stupcat Egjeli 2017 - Episodi 1", "description": "...", "handle": "stupcat-egjeli-2017", "type": 1, "visibility": 1, "releaseDate": "2017-06-15T00:00:00Z", "metadata": {}, "thumbnail": "https://cdn.example.com/thumb.jpg", "banner": "https://cdn.example.com/banner.jpg", "landscapeBanner": "https://cdn.example.com/landscape.jpg", "mobileBanner": "https://cdn.example.com/mobile.jpg", "payToViewConfig": { "isLocked": false, "payToViewProductId": null }, "payToView": null } ``` ### Series Item ```json { "id": "xyz789", "title": "Stupcat", "description": "...", "handle": "stupcat-series", "type": 2, "visibility": 1, "releaseDate": "2015-01-01T00:00:00Z", "thumbnail": "https://cdn.example.com/thumb.jpg", "banner": "https://cdn.example.com/banner.jpg", "landscapeBanner": "https://cdn.example.com/landscape.jpg", "mobileBanner": "https://cdn.example.com/mobile.jpg", "payToViewConfig": { "isLocked": false, "payToViewProductId": null }, "payToView": null, "metrics": { "totalSeasons": 3, "totalEpisodes": 24 } } ``` --- ## Type Reference ### ContentType (`type` field) | Value | Meaning | |-------|---------| | 1 | Movie | | 2 | Series | ### VisibilityStatus (`visibility` field) | Value | Meaning | |-------|---------| | 1 | Public | Only public content is returned by these search endpoints. --- ## Notes - Results are ordered by creation date (newest first) - Only publicly visible content is returned - Series results only include series that have at least one season with episodes - The `metrics` field (with `totalSeasons` and `totalEpisodes`) is only present in series results, not movie results - The `payToView` field is always `null` in search results (access info is resolved on the detail endpoint) - These endpoints follow the same pattern as the existing channel search (`/channels/search`)