{
  "openapi": "3.0.0",
  "info": {
    "title": "API Documentation",
    "version": "1.0.0",
    "description": "Generated automatically from HAR files and enriched with AI descriptions.",
    "contact": {
      "name": "API Support",
      "url": "https://example.com/support",
      "email": "support@example.com"
    },
    "license": {
      "name": "MIT",
      "url": "https://opensource.org/licenses/MIT"
    }
  },
  "servers": [
    {
      "url": "https://vbee.vn",
      "description": "Production Server"
    },
    {
      "url": "http://localhost:3000",
      "description": "Local Development Server"
    }
  ],
  "paths": {
    "/api/v1/devices/check": {
      "post": {
        "summary": "POST /api/v1/devices/check",
        "description": "🔓 No authentication required",
        "operationId": "post_api_v1_devices_check",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Response with status 200",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "check": {
                      "type": "string"
                    },
                    "fingerprint": {
                      "type": "string"
                    },
                    "status": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {}
              }
            }
          }
        }
      }
    },
    "/api/v3/languages": {
      "get": {
        "summary": "GET /api/v3/languages",
        "description": "🔓 No authentication required",
        "operationId": "get_api_v3_languages",
        "parameters": [
          {
            "name": "voiceOwnership",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "COMMUNITY"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Response with status 200",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "result": {
                      "type": "object",
                      "properties": {
                        "languages": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "object",
                                "properties": {
                                  "en": {
                                    "type": "string"
                                  },
                                  "vi": {
                                    "type": "string"
                                  }
                                }
                              },
                              "primary_language_sub_tag": {
                                "type": "string"
                              },
                              "rank": {
                                "type": "number"
                              },
                              "regions": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "name": {
                                      "type": "object",
                                      "properties": {
                                        "en": {
                                          "type": "string"
                                        },
                                        "vi": {
                                          "type": "string"
                                        }
                                      }
                                    },
                                    "region_sub_tag": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "status": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/favourite-voices": {
      "get": {
        "summary": "GET /api/v1/favourite-voices",
        "description": "🔓 No authentication required",
        "operationId": "get_api_v1_favourite-voices",
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "createdAt_desc"
            }
          }
        ],
        "responses": {
          "304": {
            "description": "Response with status 304",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "result": {
                      "type": "object",
                      "properties": {
                        "favourite_voices": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        }
                      }
                    },
                    "status": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v3/voices": {
      "get": {
        "summary": "GET /api/v3/voices",
        "description": "🔓 No authentication required",
        "operationId": "get_api_v3_voices",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "voiceOwnership",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "COMMUNITY"
            }
          }
        ],
        "responses": {
          "304": {
            "description": "Response with status 304",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "result": {
                      "type": "object",
                      "properties": {
                        "pagination": {
                          "type": "object",
                          "properties": {
                            "has_next_page": {
                              "type": "boolean"
                            },
                            "has_prev_page": {
                              "type": "boolean"
                            },
                            "next_cursor": {
                              "type": "string"
                            },
                            "prev_cursor": {
                              "type": "null"
                            }
                          }
                        },
                        "voices": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "active": {
                                "type": "boolean"
                              },
                              "age_group": {
                                "type": "string"
                              },
                              "category": {
                                "type": "string"
                              },
                              "code": {
                                "type": "string"
                              },
                              "created_at": {
                                "type": "string"
                              },
                              "credit_factor": {
                                "type": "number"
                              },
                              "default_sample_rate": {
                                "type": "number"
                              },
                              "demo": {
                                "type": "string"
                              },
                              "description": {
                                "type": "string"
                              },
                              "features": {
                                "type": "array",
                                "items": {
                                  "type": "object"
                                }
                              },
                              "gender": {
                                "type": "string"
                              },
                              "language": {
                                "type": "object",
                                "properties": {
                                  "code": {
                                    "type": "string"
                                  },
                                  "global_name": {
                                    "type": "string"
                                  },
                                  "name": {
                                    "type": "object",
                                    "properties": {
                                      "en": {
                                        "type": "string"
                                      },
                                      "vi": {
                                        "type": "string"
                                      }
                                    }
                                  },
                                  "rank": {
                                    "type": "number"
                                  },
                                  "rectangle_image": {
                                    "type": "string"
                                  },
                                  "round_image": {
                                    "type": "string"
                                  },
                                  "vietnamese_name": {
                                    "type": "string"
                                  }
                                }
                              },
                              "language_code": {
                                "type": "string"
                              },
                              "level": {
                                "type": "string"
                              },
                              "locale": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "profile_page": {
                                "type": "object",
                                "properties": {
                                  "cover_image": {
                                    "type": "string"
                                  },
                                  "sample_audio_ids": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "slug": {
                                    "type": "string"
                                  },
                                  "status": {
                                    "type": "string"
                                  },
                                  "sub_cover_image": {
                                    "type": "string"
                                  }
                                }
                              },
                              "provider": {
                                "type": "string"
                              },
                              "rank": {
                                "type": "number"
                              },
                              "retention_days": {
                                "type": "number"
                              },
                              "round_image": {
                                "type": "string"
                              },
                              "sample_audios": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "audio_link": {
                                      "type": "string"
                                    },
                                    "text": {
                                      "type": "string"
                                    },
                                    "title": {
                                      "type": "string"
                                    }
                                  }
                                }
                              },
                              "sample_rates": {
                                "type": "array",
                                "items": {
                                  "type": "number"
                                }
                              },
                              "square_image": {
                                "type": "string"
                              },
                              "stats": {
                                "type": "object",
                                "properties": {
                                  "total_characters": {
                                    "type": "number"
                                  },
                                  "total_credits": {
                                    "type": "number"
                                  },
                                  "total_money_usd": {
                                    "type": "number"
                                  },
                                  "total_money_vnd": {
                                    "type": "number"
                                  },
                                  "total_requests": {
                                    "type": "number"
                                  },
                                  "total_users": {
                                    "type": "number"
                                  }
                                }
                              },
                              "stats30d": {
                                "type": "object",
                                "properties": {
                                  "total_characters": {
                                    "type": "number"
                                  },
                                  "total_credits": {
                                    "type": "number"
                                  },
                                  "total_money_usd": {
                                    "type": "number"
                                  },
                                  "total_money_vnd": {
                                    "type": "number"
                                  },
                                  "total_requests": {
                                    "type": "number"
                                  },
                                  "total_users": {
                                    "type": "number"
                                  }
                                }
                              },
                              "status": {
                                "type": "string"
                              },
                              "updated_at": {
                                "type": "string"
                              },
                              "user_id": {
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "status": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/images/voices/round/thien-tam.png": {
      "get": {
        "summary": "GET /images/voices/round/thien-tam.png",
        "description": "🔓 No authentication required",
        "operationId": "get_images_voices_round_thien-tam.png",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Response with status 200",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/static/media/verified-rounded.2190d8f5.svg": {
      "get": {
        "summary": "GET /static/media/verified-rounded.2190d8f5.svg",
        "description": "🔓 No authentication required",
        "operationId": "get_static_media_verified-rounded.2190d8f5.svg",
        "parameters": [],
        "responses": {
          "304": {
            "description": "Response with status 304",
            "content": {
              "image/svg+xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/images/voices/round/ngan-ke-chuyen.png": {
      "get": {
        "summary": "GET /images/voices/round/ngan-ke-chuyen.png",
        "description": "🔓 No authentication required",
        "operationId": "get_images_voices_round_ngan-ke-chuyen.png",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Response with status 200",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/images/voice-cloning/{uuid}-1751815717932.jpg": {
      "get": {
        "summary": "GET /images/voice-cloning/ace7c714-3c5a-4ecc-870b-0de0f38dc498-1751815717932.jpg",
        "description": "🔓 No authentication required",
        "operationId": "get_images_voice-cloning_ace7c714-3c5a-4ecc-870b-0de0f38dc498-1751815717932.jpg",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Response with status 200",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/images/voices/round/duy-onyx.png": {
      "get": {
        "summary": "GET /images/voices/round/duy-onyx.png",
        "description": "🔓 No authentication required",
        "operationId": "get_images_voices_round_duy-onyx.png",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Response with status 200",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/images/voice-cloning/{id}-8-_1136c3a5-7bfd-45b1-a75b-6b42aef0f491-e4fb0ea2-4d7a-4234-aef5-15cb9ce32a42%7D-1757060611777.jpg": {
      "get": {
        "summary": "GET /images/voice-cloning/0905-8-_1136c3a5-7bfd-45b1-a75b-6b42aef0f491-e4fb0ea2-4d7a-4234-aef5-15cb9ce32a42%7D-1757060611777.jpg",
        "description": "🔓 No authentication required",
        "operationId": "get_images_voice-cloning_0905-8-_1136c3a5-7bfd-45b1-a75b-6b42aef0f491-e4fb0ea2-4d7a-4234-aef5-15cb9ce32a42%7D-1757060611777.jpg",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Response with status 200",
            "content": {
              "application/x-www-form-urlencoded": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/images/voice-cloning/{uuid}-1753959051088.jpg": {
      "get": {
        "summary": "GET /images/voice-cloning/c3e9bd84-bd3c-4f80-b06f-5f4003ae7c0d-1753959051088.jpg",
        "description": "🔓 No authentication required",
        "operationId": "get_images_voice-cloning_c3e9bd84-bd3c-4f80-b06f-5f4003ae7c0d-1753959051088.jpg",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Response with status 200",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/images/logo/voice-cloning.svg": {
      "get": {
        "summary": "GET /images/logo/voice-cloning.svg",
        "description": "🔓 No authentication required",
        "operationId": "get_images_logo_voice-cloning.svg",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Response with status 200",
            "content": {
              "image/svg+xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "example": 400
          },
          "message": {
            "type": "string",
            "example": "Bad Request"
          },
          "error": {
            "type": "string",
            "example": "Invalid parameters"
          }
        }
      },
      "SuccessResponse": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "example": 200
          },
          "data": {
            "type": "object",
            "example": {}
          }
        }
      }
    },
    "securitySchemes": {}
  }
}