YouTube Music API Proxy Documentation
Comprehensive documentation for the YouTube Music API Proxy
# YouTube Music API Proxy Documentation
Welcome to the YouTube Music API Proxy documentation! This API provides a RESTful interface to access YouTube Music data
and streaming functionality.
## 🚀 Quick Start
### Base URL
```
https://your-api-domain.com/api
```
### Authentication
Most endpoints support optional authentication via YouTube cookies:
- Pass `cookies` as a query parameter (Base64 encoded)
- Or set `YTM_COOKIES` environment variable
### Example Request
```bash
curl "https://your-api-domain.com/api/search?query=despacito&category=Songs"
```
## 📚 API Reference
### Search Endpoints
#### Search for Content
```http
GET /api/search
```
Search for songs, videos, albums, artists, and more on YouTube Music.
**Query Parameters:**
- `query` (required): Search query string
- `category` (optional): Filter by category
- `Songs` - Music tracks
- `Videos` - Music videos
- `Albums` - Music albums
- `Artists` - Music artists
- `CommunityPlaylists` - User playlists
- `Podcasts` - Podcast content
- `Episodes` - Podcast episodes
- `Profiles` - User profiles
- `location` (optional): Geographical location (default: "US")
- `cookies` (optional): Base64 encoded YouTube cookies
**Example:**
```bash
curl "https://your-api-domain.com/api/search?query=despacito&category=Songs"
```
**Response:**
```json
{
"results": [
{
"type": "SongSearchResult",
"id": "dQw4w9WgXcQ",
"title": "Despacito",
"artist": "Luis Fonsi",
"duration": "00:04:41",
"thumbnail": "https://...",
"browseId": "UC..."
}
],
"totalCount": 1,
"query": "despacito",
"category": "Songs"
}
```
### Content Information Endpoints
#### Get Song/Video Information
```http
GET /api/song/{id}
```
Get detailed information about a song or video including streaming URLs.
**Path Parameters:**
- `id` (required): YouTube video/song ID
**Query Parameters:**
- `location` (optional): Geographical location
- `cookies` (optional): Base64 encoded YouTube cookies
**Example:**
```bash
curl "https://your-api-domain.com/api/song/dQw4w9WgXcQ"
```
#### Get Album Information
```http
GET /api/album/{browseId}
```
Get detailed information about an album including songs and metadata.
**Path Parameters:**
- `browseId` (required): Album browse ID
**Example:**
```bash
curl "https://your-api-domain.com/api/album/MPREb_..."
```
#### Get Artist Information
```http
GET /api/artist/{browseId}
```
Get detailed information about an artist including albums, songs, and metadata.
**Path Parameters:**
- `browseId` (required): Artist browse ID
**Example:**
```bash
curl "https://your-api-domain.com/api/artist/UC..."
```
#### Get Playlist Information
```http
GET /api/playlist/{id}
```
Get playlist information including songs and metadata.
**Path Parameters:**
- `id` (required): Playlist ID
**Example:**
```bash
curl "https://your-api-domain.com/api/playlist/PL..."
```
### Streaming Endpoints
#### Get Streaming Data
```http
GET /api/streaming/{id}
```
Get streaming data including audio and video URLs.
**Path Parameters:**
- `id` (required): YouTube video/song ID
**Example:**
```bash
curl "https://your-api-domain.com/api/streaming/dQw4w9WgXcQ"
```
#### Direct Audio Streaming
```http
GET /api/stream/{id}.m4a
```
Stream audio directly from YouTube Music.
**Path Parameters:**
- `id` (required): YouTube video/song ID
**Query Parameters:**
- `quality` (optional): Audio quality preference
**Example:**
```bash
curl "https://your-api-domain.com/api/stream/dQw4w9WgXcQ.m4a" -o audio.m4a
```
### Library Endpoints (Requires Authentication)
#### Get Complete Library
```http
GET /api/library
```
Get user's complete library including songs, albums, artists, subscriptions, podcasts, and playlists.
**Query Parameters:**
- `cookies` (required): Base64 encoded YouTube cookies
- `location` (optional): Geographical location
**Example:**
```bash
curl "https://your-api-domain.com/api/library?cookies=eyJjb29raWVzIjoi..."
```
#### Get Library Songs
```http
GET /api/library/songs
```
Get user's library songs.
**Query Parameters:**
- `cookies` (required): Base64 encoded YouTube cookies
- `location` (optional): Geographical location
#### Get Library Albums
```http
GET /api/library/albums
```
Get user's library albums.
**Query Parameters:**
- `cookies` (required): Base64 encoded YouTube cookies
- `location` (optional): Geographical location
#### Get Library Artists
```http
GET /api/library/artists
```
Get user's library artists.
**Query Parameters:**
- `cookies` (required): Base64 encoded YouTube cookies
- `location` (optional): Geographical location
#### Get Library Subscriptions
```http
GET /api/library/subscriptions
```
Get user's library subscriptions.
**Query Parameters:**
- `cookies` (required): Base64 encoded YouTube cookies
- `location` (optional): Geographical location
#### Get Library Podcasts
```http
GET /api/library/podcasts
```
Get user's library podcasts.
**Query Parameters:**
- `cookies` (required): Base64 encoded YouTube cookies
- `location` (optional): Geographical location
#### Get Library Playlists
```http
GET /api/library/playlists
```
Get user's library playlists.
**Query Parameters:**
- `cookies` (required): Base64 encoded YouTube cookies
- `location` (optional): Geographical location
## 🔐 Authentication
### Getting YouTube Cookies
1. **Log into YouTube Music** in your browser
2. **Open Developer Tools** (F12)
3. **Go to Application/Storage tab**
4. **Find Cookies** for `music.youtube.com`
5. **Copy the cookie string** (all cookies concatenated)
6. **Base64 encode** the cookie string
### Example Cookie Extraction
```javascript
// In browser console
document.cookie.split(';').map(c => c.trim()).join('; ')
```
### Using Cookies
```bash
# Base64 encode cookies
COOKIES=$(echo "your_cookies_here" | base64)
# Use in API calls
curl "https://your-api-domain.com/api/search?query=despacito&cookies=$COOKIES"
```
## 📊 Response Models
### Error Response
```json
{
"error": "Error message",
"details": "Optional error details"
}
```
### Search Response
```json
{
"results": [
{
"type": "SongSearchResult|VideoSearchResult|AlbumSearchResult|ArtistSearchResult",
"id": "string",
"title": "string",
"artist": "string",
"duration": "string",
"thumbnail": "string",
"browseId": "string"
}
],
"totalCount": 0,
"query": "string",
"category": "string"
}
```
### Song/Video Info Response
```json
{
"id": "string",
"title": "string",
"artist": "string",
"album": "string",
"duration": "string",
"thumbnail": "string",
"description": "string",
"streamingData": {
"streamInfo": [
{
"type": "AudioStreamInfo|VideoStreamInfo",
"url": "string",
"bitrate": 0,
"contentLenght": 0
}
]
}
}
```
## 🚦 Status Codes
- `200` - Success
- `400` - Bad Request (invalid parameters)
- `401` - Unauthorized (authentication required)
- `404` - Not Found (content not found)
- `500` - Internal Server Error
## 🔧 Configuration
### Environment Variables
- `YTM_COOKIES` - Base64 encoded YouTube cookies
- `YTM_VISITORDATA` - Visitor data for session tailoring
- `YTM_POTOKEN` - Proof of Origin Token
- `YTM_GEOGRAPHICAL_LOCATION` - Geographical location (default: "US")
### Query Parameters
- `cookies` - Base64 encoded YouTube cookies
- `location` - Geographical location
## 📝 Examples
### Search Examples
```bash
# Search for songs
curl "https://your-api-domain.com/api/search?query=despacito&category=Songs"
# Search for videos
curl "https://your-api-domain.com/api/search?query=despacito&category=Videos"
# Search for artists
curl "https://your-api-domain.com/api/search?query=luis%20fonsi&category=Artists"
```
### Streaming Examples
```bash
# Get streaming data
curl "https://your-api-domain.com/api/streaming/dQw4w9WgXcQ"
# Stream audio directly
curl "https://your-api-domain.com/api/stream/dQw4w9WgXcQ.m4a" -o audio.m4a
# Stream with authentication
curl "https://your-api-domain.com/api/stream/dQw4w9WgXcQ.m4a?cookies=$COOKIES" -o audio.m4a
```
### Library Examples
```bash
# Get complete library
curl "https://your-api-domain.com/api/library?cookies=$COOKIES"
# Get specific library sections
curl "https://your-api-domain.com/api/library/songs?cookies=$COOKIES"
curl "https://your-api-domain.com/api/library/albums?cookies=$COOKIES"
curl "https://your-api-domain.com/api/library/artists?cookies=$COOKIES"
```
## 🛠️ Development
### Prerequisites
- .NET 8.0 SDK
- Node.js (for YouTubeSessionGenerator)
### Running Locally
```bash
# Clone repository
git clone https://github.com/Bluscream/youtube-music-api-proxy.git
cd youtube-music-api-proxy
# Restore dependencies
dotnet restore
# Run the application
dotnet run
```
### Swagger Documentation
Once running, visit the root URL to access interactive Swagger documentation.
## 📄 License
This project is licensed under the same license as the underlying
[YouTubeMusicAPI](https://github.com/IcySnex/YouTubeMusicAPI) library.
## 🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## 📞 Support
If you encounter any issues or have questions, please open an issue on GitHub.