Meteordub Streaming API Documentation

Meteordub Документация API для стриминга аниме

Meteordub Anime Streaming API Hujjati

Introduction

This documentation covers the Django-based API for an anime streaming platform. It includes user management, anime and episode handling, comments, likes, favorites, and more. All endpoints are under the base URL (e.g., /api/). Authentication uses JWT.

Models

User

Custom user model with email as username.

class User(AbstractBaseUser, PermissionsMixin): ...

Fields: email, full_name, avatar, is_premium, premium_expires_at, role, is_active, is_staff, created_at, last_login_at.

AnonymousSession

Tracks anonymous users.

class AnonymousSession(models.Model): ...

Fields: session_token, fingerprint_hash, ip_address, country, city, first_seen_at, last_seen_at, total_visits.

Genre

Anime genres.

class Genre(models.Model): ...

Fields: name, name_ru, slug, description, created_at, updated_at.

Anime

Main anime model.

class Anime(models.Model): ...

Fields: title, slug, english_title, russian_title, uzbek_title, description, type, status, total_episodes, duration_minutes, release_year, season, poster_url, banner_url, trailer_url, rating, total_views, total_favorites, total_likes, total_comments, is_premium_only, is_published, published_at, genres, created_at, updated_at.

Episode

Episodes of anime.

class Episode(models.Model): ...

Fields: anime, episode_number, title, title_ru, slug, description, total_likes, thumbnail_url, duration_seconds, air_date, is_premium_only, total_views, is_published, created_at.

EpisodeLanguage

Video tracks in different languages and qualities.

class EpisodeLanguage(models.Model): ...

Fields: episode, language, video_url, video_quality, file_size_mb, is_default, created_at.

WatchHistory

Tracks watched episodes.

class WatchHistory(models.Model): ...

Fields: user, anonymous_session, anime, episode, watch_duration_seconds, completed, watched_at, ip_address, device_type, country.

Like

Likes/dislikes for anime or episodes.

class Like(models.Model): ...

Fields: user, anonymous_session, anime, episode, is_like, created_at, updated_at.

Comment

Comments on anime or episodes.

class Comment(models.Model): ...

Fields: user, anonymous_session, anime, episode, parent, comment, guest_name, is_approved, created_at, updated_at.

Subscription

User subscriptions.

class Subscription(models.Model): ...

Fields: user, plan_type, price, currency, status, starts_at, expires_at, auto_renew, created_at.

Payment

Payment records.

class Payment(models.Model): ...

Fields: user, subscription, payment_gateway, transaction_id, amount, currency, status, payment_method, paid_at, created_at.

Advertisement

Ads configuration.

class Advertisement(models.Model): ...

Fields: title, type, content_url, html_code, duration_seconds, click_url, position, is_active, priority, total_impressions, total_clicks, created_at.

AdImpression

Tracks ad views and clicks.

class AdImpression(models.Model): ...

Fields: ad, user, anonymous_session, anime, episode, clicked, viewed_at, ip_address.

Favorite

User favorites.

class Favorite(models.Model): ...

Fields: user, anonymous_session, anime, added_at.

API Endpoints

POST /register/

Register a new user.

Request Body Example:

{
  "email": "user@example.com",
  "password": "password123",
  "full_name": "John Doe"
}

Response Example (201 Created):

{
  "success": true,
  "data": {
    "id": 1,
    "email": "user@example.com",
    "full_name": "John Doe"
  },
  "message": "User registered successfully"
}

POST /login/

Login user and get JWT tokens.

Request Body Example:

{
  "email": "user@example.com",
  "password": "password123"
}

Response Example (200 OK):

{
  "success": true,
  "data": {
    "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "user": {
      "id": 1,
      "email": "user@example.com"
    }
  },
  "message": "Login successful"
}

GET/PATCH /me/

Get or update current user profile (authenticated).

Request Body Example (PATCH):

{
  "full_name": "Updated Name"
}

Response Example (GET/200 OK):

{
  "success": true,
  "data": {
    "email": "user@example.com",
    "full_name": "John Doe"
  },
  "message": "Current user info"
}

POST /logout/

Logout by blacklisting refresh token (authenticated).

Request Body Example:

{
  "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}

Response Example (200 OK):

{
  "success": true,
  "message": "Successfully logged out"
}

GET /animes/

List published anime with filters, search, ordering, and pagination.

Example Query Params: ?type=TV&status=ONGOING&search=title&ordering=-release_year

Response Example (200 OK):

{
  "success": true,
  "data": [
    {"id": 1, "title": "Anime Title", "slug": "anime-title", ...}
  ],
  "message": "Anime list retrieved",
  "meta": {"count": 10, "next": "/api/animes/?page=2", "previous": null}
}

GET /animes/<int:pk>/

Retrieve details of a specific published anime by ID.

Response Example (200 OK):

{
  "success": true,
  "data": {"id": 1, "title": "Anime Title", ...},
  "message": "Anime details retrieved"
}

Error Response Example (404 Not Found):

{
  "success": false,
  "message": "Anime not found"
}

GET /animes/<str:anime_identifier>/episodes/

List episodes for a specific anime (by ID or slug) with filters and pagination.

Example Query Params: ?episode_number__gt=5&ordering=air_date

Response Example (200 OK):

{
  "success": true,
  "data": [
    {"id": 1, "episode_number": 1, "title": "Episode 1", ...}
  ],
  "message": "Episodes retrieved",
  "meta": {"count": 5, "next": null, "previous": null}
}

GET /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/

Retrieve details of a specific episode (by ID or slug) for an anime.

Response Example (200 OK):

{
  "success": true,
  "data": {"id": 1, "episode_number": 1, "title": "Episode 1", ...},
  "message": "Episode details retrieved"
}

POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/watch/

Record watch history for an episode (authenticated or anonymous).

Request Body Example:

{
  "watch_duration_seconds": 300,
  "completed": true
}

Response Example (201 Created or 200 OK):

{
  "success": true,
  "message": "Watch history recorded successfully"
}

GET /genres/

List all genres with search, ordering, and pagination.

Example Query Params: ?search=action&ordering=name

Response Example (200 OK):

{
  "success": true,
  "data": [
    {"id": 1, "name": "Action", "slug": "action", ...}
  ],
  "message": "Genres retrieved"
}

GET /genres/<str:identifier>/

Retrieve details of a specific genre (by ID or slug).

Response Example (200 OK):

{
  "success": true,
  "data": {"id": 1, "name": "Action", ...},
  "message": "Genre details retrieved"
}

GET /genres/<str:identifier>/animes/

List anime for a specific genre (by ID or slug) with filters and pagination.

Response Example (200 OK):

{
  "success": true,
  "data": [
    {"id": 1, "title": "Action Anime", ...}
  ],
  "message": "Anime list retrieved"
}

POST /animes/<str:anime_identifier>/like/

Toggle like/dislike for an anime (authenticated or anonymous).

Request Body Example:

{
  "is_like": true
}

Response Example (201 Created):

{
  "success": true,
  "data": {"action": "created", "is_like": true},
  "message": "Like added successfully"
}

POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/like/

Toggle like/dislike for an episode (authenticated or anonymous).

Request Body Example:

{
  "is_like": false
}

Response Example (200 OK):

{
  "success": true,
  "data": {"action": "updated", "is_like": false},
  "message": "Like updated successfully"
}

GET/POST /animes/<str:anime_identifier>/comments/

List or create comments for an anime (authenticated or anonymous for POST).

Request Body Example (POST):

{
  "comment": "Great anime!",
  "parent": 1
}

Response Example (GET/200 OK):

{
  "success": true,
  "data": [
    {"id": 1, "comment": "Great anime!", ...}
  ],
  "message": "Comments retrieved"
}

GET/POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/comments/

List or create comments for an episode (authenticated or anonymous for POST).

Request Body Example (POST):

{
  "comment": "Awesome episode!"
}

Response Example (POST/201 Created):

{
  "success": true,
  "data": {"id": 2, "comment": "Awesome episode!", ...},
  "message": "Comment posted successfully"
}

PUT/DELETE /comments/<int:comment_id>/

Update or delete a comment (authenticated or anonymous, owner only).

Request Body Example (PUT):

{
  "comment": "Updated comment"
}

Response Example (PUT/200 OK):

{
  "success": true,
  "data": {"id": 1, "comment": "Updated comment", ...},
  "message": "Comment updated successfully"
}

Response Example (DELETE/200 OK):

{
  "success": true,
  "message": "Comment deleted successfully"
}

POST/DELETE /animes/<str:anime_identifier>/favorite/

Add or remove anime from favorites (authenticated or anonymous).

Response Example (POST/201 Created):

{
  "success": true,
  "message": "Anime added to favorites"
}

Response Example (DELETE/200 OK):

{
  "success": true,
  "message": "Anime removed from favorites"
}

GET /favorites/

List user's or anonymous session's favorite anime with pagination.

Response Example (200 OK):

{
  "success": true,
  "data": [
    {"id": 1, "title": "Favorite Anime", ...}
  ],
  "message": "Favorite anime retrieved"
}