{
  "info": {
    "description": "Local Laftel cache server",
    "title": "lafdb",
    "version": "1.0.0"
  },
  "openapi": "3.0.3",
  "paths": {
    "/api/comments/v1/count": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "episode_id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "comment_count": {
                      "format": "float",
                      "type": "number"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Comment count for an episode",
        "tags": [
          "comments"
        ]
      }
    },
    "/api/comments/v1/list": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "episode_id",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "parent_comment_id",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 20,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "sorting",
            "required": false,
            "schema": {
              "enum": [
                "top",
                "newest",
                "oldest"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "format": "float",
                      "type": "number"
                    },
                    "episode_id": {
                      "format": "float",
                      "type": "number"
                    },
                    "results": {
                      "items": {
                        "properties": {
                          "content": {
                            "type": "string"
                          },
                          "count_like": {
                            "format": "float",
                            "type": "number"
                          },
                          "count_reply_comment": {
                            "format": "float",
                            "type": "number"
                          },
                          "created": {
                            "type": "string"
                          },
                          "episode": {
                            "properties": {
                              "episode_num": {
                                "type": "string"
                              },
                              "id": {
                                "format": "float",
                                "type": "number"
                              },
                              "subject": {
                                "nullable": true,
                                "type": "string"
                              },
                              "thumbnail_path": {
                                "nullable": true
                              }
                            },
                            "type": "object"
                          },
                          "id": {
                            "format": "float",
                            "type": "number"
                          },
                          "is_click_like": {
                            "type": "boolean"
                          },
                          "is_spoiler": {
                            "type": "boolean"
                          },
                          "item": {
                            "properties": {
                              "id": {
                                "format": "float",
                                "type": "number"
                              },
                              "medium": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "rating": {
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "modified": {
                            "type": "string"
                          },
                          "parent_comment_id": {
                            "nullable": true
                          },
                          "profile": {
                            "properties": {
                              "id": {
                                "format": "float",
                                "type": "number"
                              },
                              "image": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "profile_rank": {
                                "properties": {
                                  "continued_membership_days": {
                                    "nullable": true
                                  },
                                  "rank": {
                                    "format": "float",
                                    "type": "number"
                                  }
                                },
                                "type": "object"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Comment list (episode or replies)",
        "tags": [
          "comments"
        ]
      }
    },
    "/api/episode/{episodeId}/episodes": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "episodeId",
            "required": true,
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "format": "float",
                      "type": "number"
                    },
                    "item_id": {
                      "format": "float",
                      "type": "number"
                    },
                    "results": {
                      "items": {
                        "properties": {
                          "access_info_list": {
                            "items": {},
                            "type": "array"
                          },
                          "access_type": {
                            "nullable": true
                          },
                          "description": {
                            "nullable": true,
                            "type": "string"
                          },
                          "episode_num": {
                            "type": "string"
                          },
                          "episode_order": {
                            "format": "float",
                            "type": "number"
                          },
                          "episode_products": {
                            "items": {
                              "properties": {
                                "id": {
                                  "format": "float",
                                  "type": "number"
                                },
                                "list_price": {
                                  "format": "float",
                                  "type": "number"
                                },
                                "name": {
                                  "type": "string"
                                },
                                "period": {
                                  "type": "string"
                                },
                                "promotion": {
                                  "nullable": true
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "has_preview": {
                            "type": "boolean"
                          },
                          "id": {
                            "format": "float",
                            "type": "number"
                          },
                          "in_app_download": {
                            "type": "boolean"
                          },
                          "is_avod": {
                            "type": "boolean"
                          },
                          "is_final": {
                            "type": "boolean"
                          },
                          "is_free": {
                            "type": "boolean"
                          },
                          "is_viewing": {
                            "type": "boolean"
                          },
                          "item_expire_datetime": {
                            "nullable": true,
                            "type": "string"
                          },
                          "progressbar": {
                            "nullable": true
                          },
                          "published_datetime": {
                            "type": "string"
                          },
                          "rating": {
                            "properties": {
                              "broadcast_channel_name": {
                                "type": "string"
                              },
                              "broadcast_date": {
                                "nullable": true,
                                "type": "string"
                              },
                              "classification_number": {
                                "type": "string"
                              },
                              "rating": {
                                "format": "float",
                                "type": "number"
                              },
                              "rating_components": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "rating_type": {
                                "nullable": true,
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "running_time": {
                            "type": "string"
                          },
                          "subject": {
                            "nullable": true,
                            "type": "string"
                          },
                          "thumbnail_path": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Episode list via episode ID",
        "tags": [
          "episodes"
        ]
      }
    },
    "/api/episode/{episodeId}/item": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "episodeId",
            "required": true,
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "air_year_quarter": {
                      "nullable": true,
                      "type": "string"
                    },
                    "author": {
                      "items": {},
                      "type": "array"
                    },
                    "avg_rating": {
                      "format": "float",
                      "type": "number"
                    },
                    "awards": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "casts": {
                      "items": {
                        "properties": {
                          "character_name": {
                            "type": "string"
                          },
                          "voice_actor_names": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "color_code": {
                      "nullable": true
                    },
                    "content": {
                      "type": "string"
                    },
                    "copyright": {
                      "type": "string"
                    },
                    "description": {
                      "nullable": true
                    },
                    "directors": {
                      "items": {
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "role": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "expire_datetime": {
                      "nullable": true,
                      "type": "string"
                    },
                    "genre": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "highlight_video": {
                      "nullable": true,
                      "properties": {
                        "content_id": {
                          "type": "string"
                        },
                        "dash_url": {
                          "type": "string"
                        },
                        "hls_url": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "id": {
                      "format": "float",
                      "type": "number"
                    },
                    "illustrator": {
                      "items": {},
                      "type": "array"
                    },
                    "images": {
                      "items": {
                        "properties": {
                          "crop_ratio": {
                            "type": "string"
                          },
                          "img_url": {
                            "type": "string"
                          },
                          "option_name": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "is_adult": {
                      "type": "boolean"
                    },
                    "is_avod": {
                      "type": "boolean"
                    },
                    "is_dubbed": {
                      "type": "boolean"
                    },
                    "is_ending": {
                      "type": "boolean"
                    },
                    "is_episode_existed": {
                      "type": "boolean"
                    },
                    "is_exclusive": {
                      "type": "boolean"
                    },
                    "is_laftel_only": {
                      "type": "boolean"
                    },
                    "is_laftel_original": {
                      "type": "boolean"
                    },
                    "is_new_release": {
                      "type": "boolean"
                    },
                    "is_svod": {
                      "type": "boolean"
                    },
                    "is_uncensored": {
                      "type": "boolean"
                    },
                    "is_upcoming_release": {
                      "type": "boolean"
                    },
                    "is_viewing": {
                      "type": "boolean"
                    },
                    "latest_episode_release_datetime": {
                      "nullable": true,
                      "type": "string"
                    },
                    "logo_img": {
                      "nullable": true
                    },
                    "max_episode_rating": {
                      "properties": {
                        "broadcast_channel_name": {
                          "type": "string"
                        },
                        "broadcast_date": {
                          "nullable": true,
                          "type": "string"
                        },
                        "classification_number": {
                          "type": "string"
                        },
                        "rating": {
                          "format": "float",
                          "nullable": true,
                          "type": "number"
                        },
                        "rating_components": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "rating_type": {
                          "nullable": true,
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "medium": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "notice": {
                      "type": "string"
                    },
                    "production": {
                      "nullable": true,
                      "type": "string"
                    },
                    "production_companies": {
                      "items": {
                        "properties": {
                          "name": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "release_weekdays": {
                      "items": {},
                      "type": "array"
                    },
                    "series_id": {
                      "format": "float",
                      "nullable": true,
                      "type": "number"
                    },
                    "simulcast_channel": {
                      "nullable": true
                    },
                    "tags": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "uid": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Item containing the episode",
        "tags": [
          "episodes"
        ]
      }
    },
    "/api/episodes/v3/list": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "item_id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 30,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "enum": [
                "oldest",
                "newest"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "format": "float",
                      "type": "number"
                    },
                    "item_id": {
                      "format": "float",
                      "type": "number"
                    },
                    "results": {
                      "items": {
                        "properties": {
                          "access_info_list": {
                            "items": {},
                            "type": "array"
                          },
                          "access_type": {
                            "nullable": true
                          },
                          "description": {
                            "nullable": true,
                            "type": "string"
                          },
                          "episode_num": {
                            "type": "string"
                          },
                          "episode_order": {
                            "format": "float",
                            "type": "number"
                          },
                          "episode_products": {
                            "items": {
                              "properties": {
                                "id": {
                                  "format": "float",
                                  "type": "number"
                                },
                                "list_price": {
                                  "format": "float",
                                  "type": "number"
                                },
                                "name": {
                                  "type": "string"
                                },
                                "period": {
                                  "type": "string"
                                },
                                "promotion": {
                                  "nullable": true
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "has_preview": {
                            "type": "boolean"
                          },
                          "id": {
                            "format": "float",
                            "type": "number"
                          },
                          "in_app_download": {
                            "type": "boolean"
                          },
                          "is_avod": {
                            "type": "boolean"
                          },
                          "is_final": {
                            "type": "boolean"
                          },
                          "is_free": {
                            "type": "boolean"
                          },
                          "is_viewing": {
                            "type": "boolean"
                          },
                          "item_expire_datetime": {
                            "nullable": true,
                            "type": "string"
                          },
                          "progressbar": {
                            "nullable": true
                          },
                          "published_datetime": {
                            "type": "string"
                          },
                          "rating": {
                            "properties": {
                              "broadcast_channel_name": {
                                "type": "string"
                              },
                              "broadcast_date": {
                                "nullable": true,
                                "type": "string"
                              },
                              "classification_number": {
                                "type": "string"
                              },
                              "rating": {
                                "format": "float",
                                "type": "number"
                              },
                              "rating_components": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "rating_type": {
                                "nullable": true,
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "running_time": {
                            "type": "string"
                          },
                          "subject": {
                            "nullable": true,
                            "type": "string"
                          },
                          "thumbnail_path": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Episode list for an item",
        "tags": [
          "episodes"
        ]
      }
    },
    "/api/episodes/v3/{episodeId}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "episodeId",
            "required": true,
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "access_info_list": {
                      "items": {},
                      "type": "array"
                    },
                    "access_type": {
                      "nullable": true
                    },
                    "description": {
                      "type": "string"
                    },
                    "episode_num": {
                      "type": "string"
                    },
                    "episode_order": {
                      "format": "float",
                      "type": "number"
                    },
                    "episode_products": {
                      "items": {
                        "properties": {
                          "id": {
                            "format": "float",
                            "type": "number"
                          },
                          "list_price": {
                            "format": "float",
                            "type": "number"
                          },
                          "name": {
                            "type": "string"
                          },
                          "period": {
                            "type": "string"
                          },
                          "promotion": {
                            "nullable": true
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "has_preview": {
                      "type": "boolean"
                    },
                    "id": {
                      "format": "float",
                      "type": "number"
                    },
                    "in_app_download": {
                      "type": "boolean"
                    },
                    "is_avod": {
                      "type": "boolean"
                    },
                    "is_final": {
                      "type": "boolean"
                    },
                    "is_free": {
                      "type": "boolean"
                    },
                    "is_viewing": {
                      "type": "boolean"
                    },
                    "item_expire_datetime": {
                      "nullable": true,
                      "type": "string"
                    },
                    "progressbar": {
                      "nullable": true
                    },
                    "published_datetime": {
                      "type": "string"
                    },
                    "rating": {
                      "properties": {
                        "broadcast_channel_name": {
                          "type": "string"
                        },
                        "broadcast_date": {
                          "nullable": true,
                          "type": "string"
                        },
                        "classification_number": {
                          "type": "string"
                        },
                        "rating": {
                          "format": "float",
                          "type": "number"
                        },
                        "rating_components": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "rating_type": {
                          "nullable": true,
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "running_time": {
                      "type": "string"
                    },
                    "subject": {
                      "nullable": true,
                      "type": "string"
                    },
                    "thumbnail_path": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Episode detail",
        "tags": [
          "episodes"
        ]
      }
    },
    "/api/episodes/v3/{episodeId}/video": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "episodeId",
            "required": true,
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "dash_url": {
                      "type": "string"
                    },
                    "keys": {
                      "items": {
                        "properties": {
                          "key": {
                            "type": "string"
                          },
                          "key_id": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Episode video / DRM keys",
        "tags": [
          "episodes"
        ]
      }
    },
    "/api/items/v1/{id}/statistics/": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "average_score": {
                      "type": "string"
                    },
                    "count_score": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_05": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_10": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_15": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_20": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_25": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_30": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_35": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_40": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_45": {
                      "format": "float",
                      "type": "number"
                    },
                    "count_score_50": {
                      "format": "float",
                      "type": "number"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Item statistics",
        "tags": [
          "items"
        ]
      }
    },
    "/api/items/v2/series/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "format": "float",
                      "type": "number"
                    },
                    "next": {
                      "nullable": true
                    },
                    "previous": {
                      "nullable": true
                    },
                    "results": {
                      "items": {
                        "properties": {
                          "content_rating": {
                            "format": "float",
                            "type": "number"
                          },
                          "id": {
                            "format": "float",
                            "type": "number"
                          },
                          "images": {
                            "items": {
                              "properties": {
                                "crop_ratio": {
                                  "type": "string"
                                },
                                "img_url": {
                                  "type": "string"
                                },
                                "option_name": {
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "img": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Series list",
        "tags": [
          "items"
        ]
      }
    },
    "/api/items/v4/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "air_year_quarter": {
                      "nullable": true,
                      "type": "string"
                    },
                    "author": {
                      "items": {},
                      "type": "array"
                    },
                    "avg_rating": {
                      "format": "float",
                      "type": "number"
                    },
                    "awards": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "casts": {
                      "items": {
                        "properties": {
                          "character_name": {
                            "type": "string"
                          },
                          "voice_actor_names": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "color_code": {
                      "nullable": true
                    },
                    "content": {
                      "type": "string"
                    },
                    "copyright": {
                      "type": "string"
                    },
                    "description": {
                      "nullable": true
                    },
                    "directors": {
                      "items": {
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "role": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "expire_datetime": {
                      "nullable": true,
                      "type": "string"
                    },
                    "genre": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "highlight_video": {
                      "nullable": true,
                      "properties": {
                        "content_id": {
                          "type": "string"
                        },
                        "dash_url": {
                          "type": "string"
                        },
                        "hls_url": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "id": {
                      "format": "float",
                      "type": "number"
                    },
                    "illustrator": {
                      "items": {},
                      "type": "array"
                    },
                    "images": {
                      "items": {
                        "properties": {
                          "crop_ratio": {
                            "type": "string"
                          },
                          "img_url": {
                            "type": "string"
                          },
                          "option_name": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "is_adult": {
                      "type": "boolean"
                    },
                    "is_avod": {
                      "type": "boolean"
                    },
                    "is_dubbed": {
                      "type": "boolean"
                    },
                    "is_ending": {
                      "type": "boolean"
                    },
                    "is_episode_existed": {
                      "type": "boolean"
                    },
                    "is_exclusive": {
                      "type": "boolean"
                    },
                    "is_laftel_only": {
                      "type": "boolean"
                    },
                    "is_laftel_original": {
                      "type": "boolean"
                    },
                    "is_new_release": {
                      "type": "boolean"
                    },
                    "is_svod": {
                      "type": "boolean"
                    },
                    "is_uncensored": {
                      "type": "boolean"
                    },
                    "is_upcoming_release": {
                      "type": "boolean"
                    },
                    "is_viewing": {
                      "type": "boolean"
                    },
                    "latest_episode_release_datetime": {
                      "nullable": true,
                      "type": "string"
                    },
                    "logo_img": {
                      "nullable": true
                    },
                    "max_episode_rating": {
                      "properties": {
                        "broadcast_channel_name": {
                          "type": "string"
                        },
                        "broadcast_date": {
                          "nullable": true,
                          "type": "string"
                        },
                        "classification_number": {
                          "type": "string"
                        },
                        "rating": {
                          "format": "float",
                          "nullable": true,
                          "type": "number"
                        },
                        "rating_components": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "rating_type": {
                          "nullable": true,
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "medium": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "notice": {
                      "type": "string"
                    },
                    "production": {
                      "nullable": true,
                      "type": "string"
                    },
                    "production_companies": {
                      "items": {
                        "properties": {
                          "name": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "release_weekdays": {
                      "items": {},
                      "type": "array"
                    },
                    "series_id": {
                      "format": "float",
                      "nullable": true,
                      "type": "number"
                    },
                    "simulcast_channel": {
                      "nullable": true
                    },
                    "tags": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "uid": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Item detail",
        "tags": [
          "items"
        ]
      }
    },
    "/api/reviews/v1/count": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "item_id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Review count for an item",
        "tags": [
          "reviews"
        ]
      }
    },
    "/api/reviews/v2/list": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "item_id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 20,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "sorting",
            "required": false,
            "schema": {
              "enum": [
                "like",
                "newest",
                "created"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "format": "float",
                      "type": "number"
                    },
                    "item_id": {
                      "format": "float",
                      "type": "number"
                    },
                    "results": {
                      "items": {
                        "properties": {
                          "content": {
                            "type": "string"
                          },
                          "count_like": {
                            "format": "float",
                            "type": "number"
                          },
                          "created": {
                            "type": "string"
                          },
                          "id": {
                            "format": "float",
                            "type": "number"
                          },
                          "is_click_like": {
                            "type": "boolean"
                          },
                          "is_spoiler": {
                            "type": "boolean"
                          },
                          "modified": {
                            "type": "string"
                          },
                          "profile": {
                            "properties": {
                              "id": {
                                "format": "float",
                                "type": "number"
                              },
                              "image": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "profile_rank": {
                                "properties": {
                                  "continued_membership_days": {
                                    "nullable": true
                                  },
                                  "rank": {
                                    "format": "float",
                                    "type": "number"
                                  }
                                },
                                "type": "object"
                              }
                            },
                            "type": "object"
                          },
                          "score": {
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Review list for an item",
        "tags": [
          "reviews"
        ]
      }
    },
    "/api/search/v1/auto_complete": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "keyword",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Autocomplete suggestions",
        "tags": [
          "search"
        ]
      }
    },
    "/api/search/v1/discover": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "size",
            "required": false,
            "schema": {
              "default": 24,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "enum": [
                "recent",
                "update",
                "rank",
                "avg_rating",
                "cnt_eval"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "genres",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "tags",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "exclude_genres",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "exclude_tags",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "ending",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "medium",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "years",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "nullable": true,
                      "type": "string"
                    },
                    "results": {
                      "items": {
                        "properties": {
                          "air_year_quarter": {
                            "nullable": true,
                            "type": "string"
                          },
                          "author": {
                            "items": {},
                            "type": "array"
                          },
                          "avg_rating": {
                            "format": "float",
                            "type": "number"
                          },
                          "awards": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "casts": {
                            "items": {
                              "properties": {
                                "character_name": {
                                  "type": "string"
                                },
                                "voice_actor_names": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "color_code": {
                            "nullable": true
                          },
                          "content": {
                            "type": "string"
                          },
                          "copyright": {
                            "type": "string"
                          },
                          "description": {
                            "nullable": true
                          },
                          "directors": {
                            "items": {
                              "properties": {
                                "name": {
                                  "type": "string"
                                },
                                "role": {
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "expire_datetime": {
                            "nullable": true,
                            "type": "string"
                          },
                          "genre": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "highlight_video": {
                            "nullable": true,
                            "properties": {
                              "content_id": {
                                "type": "string"
                              },
                              "dash_url": {
                                "type": "string"
                              },
                              "hls_url": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "id": {
                            "format": "float",
                            "type": "number"
                          },
                          "illustrator": {
                            "items": {},
                            "type": "array"
                          },
                          "images": {
                            "items": {
                              "properties": {
                                "crop_ratio": {
                                  "type": "string"
                                },
                                "img_url": {
                                  "type": "string"
                                },
                                "option_name": {
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "is_adult": {
                            "type": "boolean"
                          },
                          "is_avod": {
                            "type": "boolean"
                          },
                          "is_dubbed": {
                            "type": "boolean"
                          },
                          "is_ending": {
                            "type": "boolean"
                          },
                          "is_episode_existed": {
                            "type": "boolean"
                          },
                          "is_exclusive": {
                            "type": "boolean"
                          },
                          "is_laftel_only": {
                            "type": "boolean"
                          },
                          "is_laftel_original": {
                            "type": "boolean"
                          },
                          "is_new_release": {
                            "type": "boolean"
                          },
                          "is_svod": {
                            "type": "boolean"
                          },
                          "is_uncensored": {
                            "type": "boolean"
                          },
                          "is_upcoming_release": {
                            "type": "boolean"
                          },
                          "is_viewing": {
                            "type": "boolean"
                          },
                          "latest_episode_release_datetime": {
                            "nullable": true,
                            "type": "string"
                          },
                          "logo_img": {
                            "nullable": true
                          },
                          "max_episode_rating": {
                            "properties": {
                              "broadcast_channel_name": {
                                "type": "string"
                              },
                              "broadcast_date": {
                                "nullable": true,
                                "type": "string"
                              },
                              "classification_number": {
                                "type": "string"
                              },
                              "rating": {
                                "format": "float",
                                "nullable": true,
                                "type": "number"
                              },
                              "rating_components": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "rating_type": {
                                "nullable": true,
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "medium": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "notice": {
                            "type": "string"
                          },
                          "production": {
                            "nullable": true,
                            "type": "string"
                          },
                          "production_companies": {
                            "items": {
                              "properties": {
                                "name": {
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "release_weekdays": {
                            "items": {},
                            "type": "array"
                          },
                          "series_id": {
                            "format": "float",
                            "nullable": true,
                            "type": "number"
                          },
                          "simulcast_channel": {
                            "nullable": true
                          },
                          "tags": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "uid": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Discover / browse",
        "tags": [
          "search"
        ]
      }
    },
    "/api/search/v3/keyword": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "keyword",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "size",
            "required": false,
            "schema": {
              "default": 24,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "next": {
                      "nullable": true,
                      "type": "string"
                    },
                    "results": {
                      "items": {
                        "properties": {
                          "air_year_quarter": {
                            "nullable": true,
                            "type": "string"
                          },
                          "author": {
                            "items": {},
                            "type": "array"
                          },
                          "avg_rating": {
                            "format": "float",
                            "type": "number"
                          },
                          "awards": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "casts": {
                            "items": {
                              "properties": {
                                "character_name": {
                                  "type": "string"
                                },
                                "voice_actor_names": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "color_code": {
                            "nullable": true
                          },
                          "content": {
                            "type": "string"
                          },
                          "copyright": {
                            "type": "string"
                          },
                          "description": {
                            "nullable": true
                          },
                          "directors": {
                            "items": {
                              "properties": {
                                "name": {
                                  "type": "string"
                                },
                                "role": {
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "expire_datetime": {
                            "nullable": true,
                            "type": "string"
                          },
                          "genre": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "highlight_video": {
                            "nullable": true,
                            "properties": {
                              "content_id": {
                                "type": "string"
                              },
                              "dash_url": {
                                "type": "string"
                              },
                              "hls_url": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "id": {
                            "format": "float",
                            "type": "number"
                          },
                          "illustrator": {
                            "items": {},
                            "type": "array"
                          },
                          "images": {
                            "items": {
                              "properties": {
                                "crop_ratio": {
                                  "type": "string"
                                },
                                "img_url": {
                                  "type": "string"
                                },
                                "option_name": {
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "is_adult": {
                            "type": "boolean"
                          },
                          "is_avod": {
                            "type": "boolean"
                          },
                          "is_dubbed": {
                            "type": "boolean"
                          },
                          "is_ending": {
                            "type": "boolean"
                          },
                          "is_episode_existed": {
                            "type": "boolean"
                          },
                          "is_exclusive": {
                            "type": "boolean"
                          },
                          "is_laftel_only": {
                            "type": "boolean"
                          },
                          "is_laftel_original": {
                            "type": "boolean"
                          },
                          "is_new_release": {
                            "type": "boolean"
                          },
                          "is_svod": {
                            "type": "boolean"
                          },
                          "is_uncensored": {
                            "type": "boolean"
                          },
                          "is_upcoming_release": {
                            "type": "boolean"
                          },
                          "is_viewing": {
                            "type": "boolean"
                          },
                          "latest_episode_release_datetime": {
                            "nullable": true,
                            "type": "string"
                          },
                          "logo_img": {
                            "nullable": true
                          },
                          "max_episode_rating": {
                            "properties": {
                              "broadcast_channel_name": {
                                "type": "string"
                              },
                              "broadcast_date": {
                                "nullable": true,
                                "type": "string"
                              },
                              "classification_number": {
                                "type": "string"
                              },
                              "rating": {
                                "format": "float",
                                "nullable": true,
                                "type": "number"
                              },
                              "rating_components": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "rating_type": {
                                "nullable": true,
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "medium": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "notice": {
                            "type": "string"
                          },
                          "production": {
                            "nullable": true,
                            "type": "string"
                          },
                          "production_companies": {
                            "items": {
                              "properties": {
                                "name": {
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "release_weekdays": {
                            "items": {},
                            "type": "array"
                          },
                          "series_id": {
                            "format": "float",
                            "nullable": true,
                            "type": "number"
                          },
                          "simulcast_channel": {
                            "nullable": true
                          },
                          "tags": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "uid": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Keyword search",
        "tags": [
          "search"
        ]
      }
    },
    "/api/users/v1/banned_words": {
      "get": {
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "banned_word_list": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "replacement_word": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Banned word list",
        "tags": [
          "users"
        ]
      }
    },
    "/mediacloud/{path}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Mediacloud file (local cache + upstream proxy)",
        "tags": [
          "media"
        ]
      }
    },
    "/streaming-bp/{path}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Streaming segment",
        "tags": [
          "media"
        ]
      }
    },
    "/thumbnail/{path}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Thumbnail image",
        "tags": [
          "media"
        ]
      }
    }
  }
}