Files
easystream-main/EASYSTREAM_API_DOCUMENTATION.md
SamiAhmed7777 0b7e2d0a5b feat: Add comprehensive documentation suite and reorganize project structure
- Created complete documentation in docs/ directory
- Added PROJECT_OVERVIEW.md with feature highlights and getting started guide
- Added ARCHITECTURE.md with system design and technical details
- Added SECURITY.md with comprehensive security implementation guide
- Added DEVELOPMENT.md with development workflows and best practices
- Added DEPLOYMENT.md with production deployment instructions
- Added API.md with complete REST API documentation
- Added CONTRIBUTING.md with contribution guidelines
- Added CHANGELOG.md with version history and migration notes
- Reorganized all documentation files into docs/ directory for better organization
- Updated README.md with proper documentation links and quick navigation
- Enhanced project structure with professional documentation standards
2025-10-21 00:39:45 -07:00

871 lines
19 KiB
Markdown

# 📚 EasyStream REST API Documentation
## 🎯 **Complete Guide to Using the EasyStream API**
The EasyStream API is a comprehensive RESTful API that allows you to integrate with the EasyStream video platform. This API enables mobile app development, third-party integrations, content syndication, and automation.
---
## 🚀 **Getting Started**
### **Base URL**
```
https://yourdomain.com/api/v1/
```
### **Content Type**
All requests and responses use JSON format:
```
Content-Type: application/json
```
### **CORS Support**
The API supports Cross-Origin Resource Sharing (CORS) for web applications.
---
## 🔐 **Authentication**
### **1. JWT Bearer Token (Recommended)**
**Step 1: Login to get JWT token**
```bash
curl -X POST "https://yourdomain.com/api/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{
"username": "your_username",
"password": "your_password"
}'
```
**Response:**
```json
{
"status": 200,
"data": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"user": {
"id": 123,
"username": "your_username",
"email": "user@example.com",
"display_name": "Your Name"
},
"expires_in": 86400
},
"timestamp": 1642518000,
"version": "v1"
}
```
**Step 2: Use token in subsequent requests**
```bash
curl -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
```
### **2. API Key Authentication**
**Generate API Key** (via admin panel or user settings)
```bash
curl -H "Authorization: ApiKey your_api_key_here"
```
---
## 📊 **Rate Limiting**
| Endpoint Type | Limit | Window |
|---------------|-------|--------|
| Authentication | 10 requests | 5 minutes |
| Upload | 5 requests | 1 hour |
| Default | 100 requests | 1 hour |
**Rate limit headers in response:**
```
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1642521600
```
---
## 🎬 **Video Endpoints**
### **Get Videos**
```bash
GET /api/v1/videos
```
**Parameters:**
- `page` (int): Page number (default: 1)
- `limit` (int): Items per page (max: 50, default: 20)
- `category` (string): Filter by category
- `sort` (string): Sort order (`recent`, `popular`, `rating`)
- `search` (string): Search query
**Example:**
```bash
curl -X GET "https://yourdomain.com/api/v1/videos?limit=10&category=gaming&sort=popular" \
-H "Authorization: Bearer your_token"
```
**Response:**
```json
{
"status": 200,
"data": {
"videos": [
{
"id": "video_123",
"title": "Epic Gaming Moments",
"description": "Amazing highlights from today's stream",
"views": 1250,
"rating": 4.8,
"duration": 300,
"size": 52428800,
"uploaded_at": "2025-01-18 10:30:00",
"uploader": {
"username": "gamer_pro",
"display_name": "Pro Gamer"
},
"thumbnail_url": "/thumbnails/video_123_medium.jpg",
"video_url": "/watch/video_123"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 150
}
}
}
```
### **Get Single Video**
```bash
GET /api/v1/videos/{video_id}
```
**Example:**
```bash
curl -X GET "https://yourdomain.com/api/v1/videos/video_123" \
-H "Authorization: Bearer your_token"
```
**Response:**
```json
{
"status": 200,
"data": {
"id": "video_123",
"title": "Epic Gaming Moments",
"description": "Amazing highlights from today's stream",
"full_description": "Full detailed description with timestamps...",
"views": 1250,
"rating": 4.8,
"duration": 300,
"size": 52428800,
"category": "gaming",
"tags": ["gaming", "highlights", "stream"],
"privacy": "public",
"uploaded_at": "2025-01-18 10:30:00",
"uploader": {
"id": 456,
"username": "gamer_pro",
"display_name": "Pro Gamer"
},
"thumbnail_urls": {
"small": "/thumbnails/video_123_small.jpg",
"medium": "/thumbnails/video_123_medium.jpg",
"large": "/thumbnails/video_123_large.jpg"
},
"video_files": {
"1080p": "/videos/video_123_1080p.mp4",
"720p": "/videos/video_123_720p.mp4",
"480p": "/videos/video_123_480p.mp4"
},
"hls_url": "/hls/video_123/master.m3u8"
}
}
```
### **Upload Video**
```bash
POST /api/v1/videos
```
**Multipart form data:**
```bash
curl -X POST "https://yourdomain.com/api/v1/videos" \
-H "Authorization: Bearer your_token" \
-F "video=@video.mp4" \
-F "title=My Amazing Video" \
-F "description=This is my video description" \
-F "category=entertainment" \
-F "tags=fun,awesome,video" \
-F "privacy=public"
```
**Response:**
```json
{
"status": 201,
"data": {
"id": "video_456",
"title": "My Amazing Video",
"status": "processing",
"upload_progress": 100,
"processing_status": "queued"
}
}
```
### **Update Video**
```bash
PUT /api/v1/videos/{video_id}
```
**Example:**
```bash
curl -X PUT "https://yourdomain.com/api/v1/videos/video_123" \
-H "Authorization: Bearer your_token" \
-H "Content-Type: application/json" \
-d '{
"title": "Updated Video Title",
"description": "Updated description",
"privacy": "unlisted"
}'
```
### **Delete Video**
```bash
DELETE /api/v1/videos/{video_id}
```
### **Like Video**
```bash
POST /api/v1/videos/{video_id}/like
```
### **Comment on Video**
```bash
POST /api/v1/videos/{video_id}/comment
```
**Body:**
```json
{
"comment": "Great video! Love the content."
}
```
### **Get Video Comments**
```bash
GET /api/v1/videos/{video_id}/comments?page=1&limit=20
```
---
## 👤 **User Endpoints**
### **Get Users**
```bash
GET /api/v1/users?page=1&limit=20&search=username
```
### **Get User Profile**
```bash
GET /api/v1/users/{user_id}
```
**Response:**
```json
{
"status": 200,
"data": {
"id": 123,
"username": "gamer_pro",
"display_name": "Pro Gamer",
"email": "gamer@example.com",
"avatar_url": "/avatars/123.jpg",
"bio": "Professional gamer and content creator",
"followers_count": 1250,
"following_count": 89,
"videos_count": 45,
"total_views": 125000,
"joined_at": "2024-01-15 09:30:00",
"is_verified": true,
"social_links": {
"twitter": "https://twitter.com/gamer_pro",
"youtube": "https://youtube.com/c/gamerpro"
}
}
}
```
### **Update Profile**
```bash
PUT /api/v1/users/me
```
**Body:**
```json
{
"display_name": "New Display Name",
"bio": "Updated bio",
"social_links": {
"twitter": "https://twitter.com/newhandle"
}
}
```
### **Follow User**
```bash
POST /api/v1/users/{user_id}/follow
```
### **Unfollow User**
```bash
DELETE /api/v1/users/{user_id}/follow
```
### **Get User's Videos**
```bash
GET /api/v1/users/{user_id}/videos?page=1&limit=20
```
### **Get User's Followers**
```bash
GET /api/v1/users/{user_id}/followers?page=1&limit=20
```
### **Get User's Following**
```bash
GET /api/v1/users/{user_id}/following?page=1&limit=20
```
---
## 🎥 **Live Streaming Endpoints**
### **Get Live Streams**
```bash
GET /api/v1/live?category=gaming&status=live
```
**Response:**
```json
{
"status": 200,
"data": {
"streams": [
{
"id": 789,
"title": "Live Gaming Session",
"description": "Playing the latest games",
"category": "gaming",
"status": "live",
"viewer_count": 45,
"started_at": "2025-01-18 14:30:00",
"streamer": {
"username": "live_gamer",
"display_name": "Live Gamer"
},
"thumbnail_url": "/live/thumbnails/789.jpg",
"hls_url": "https://yourdomain.com/live/hls/stream_789.m3u8"
}
]
}
}
```
### **Create Live Stream**
```bash
POST /api/v1/live
```
**Body:**
```json
{
"title": "My Live Stream",
"description": "Live gaming session",
"category": "gaming",
"privacy": "public"
}
```
**Response:**
```json
{
"status": 201,
"data": {
"stream_id": 789,
"stream_key": "stream_123_abc456_1642518000",
"rtmp_url": "rtmp://yourdomain.com:1935/live",
"stream_url": "rtmp://yourdomain.com:1935/live/stream_123_abc456_1642518000",
"hls_url": "https://yourdomain.com/live/hls/stream_123_abc456_1642518000.m3u8",
"dashboard_url": "/live/dashboard/789"
}
}
```
### **Get Stream Details**
```bash
GET /api/v1/live/{stream_id}
```
### **Start Stream**
```bash
POST /api/v1/live/{stream_id}/start
```
### **Stop Stream**
```bash
POST /api/v1/live/{stream_id}/stop
```
### **Update Stream**
```bash
PUT /api/v1/live/{stream_id}
```
---
## 🔍 **Search Endpoint**
### **Search Content**
```bash
GET /api/v1/search?q=gaming&type=videos&limit=20
```
**Parameters:**
- `q` (string): Search query
- `type` (string): Content type (`videos`, `users`, `channels`, `all`)
- `category` (string): Filter by category
- `sort` (string): Sort order (`relevance`, `recent`, `popular`)
**Response:**
```json
{
"status": 200,
"data": {
"query": "gaming",
"results": {
"videos": [...],
"users": [...],
"total_results": 150
},
"suggestions": ["gaming highlights", "gaming tutorial", "gaming review"]
}
}
```
---
## 📊 **Analytics Endpoints**
### **Get Platform Overview**
```bash
GET /api/v1/analytics/overview?start_date=2025-01-01&end_date=2025-01-31
```
**Response:**
```json
{
"status": 200,
"data": {
"users": {
"total_users": 10000,
"active_users": 2500,
"new_users": 150
},
"content": {
"total_videos": 5000,
"new_videos": 45,
"total_views": 1000000
},
"engagement": {
"total_likes": 50000,
"total_comments": 25000,
"total_shares": 5000
},
"streaming": {
"total_streams": 500,
"live_streams": 12,
"total_viewers": 1500
}
}
}
```
### **Get Video Analytics**
```bash
GET /api/v1/analytics/videos/{video_id}?period=30d
```
### **Get User Analytics**
```bash
GET /api/v1/analytics/users/{user_id}?period=7d
```
### **Generate Report**
```bash
POST /api/v1/analytics/reports
```
**Body:**
```json
{
"report_type": "user_growth",
"parameters": {
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"format": "json"
}
}
```
---
## 🔧 **Error Handling**
### **HTTP Status Codes**
- `200` - Success
- `201` - Created
- `400` - Bad Request
- `401` - Unauthorized
- `403` - Forbidden
- `404` - Not Found
- `405` - Method Not Allowed
- `429` - Rate Limited
- `500` - Internal Server Error
### **Error Response Format**
```json
{
"status": 400,
"data": {
"error": "Invalid request parameters",
"details": {
"field": "title",
"message": "Title is required"
}
},
"timestamp": 1642518000,
"version": "v1"
}
```
---
## 💻 **Code Examples**
### **JavaScript/Node.js**
```javascript
// Login and get token
const login = async (username, password) => {
const response = await fetch('https://yourdomain.com/api/v1/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
});
const data = await response.json();
return data.data.token;
};
// Get videos
const getVideos = async (token, limit = 20) => {
const response = await fetch(`https://yourdomain.com/api/v1/videos?limit=${limit}`, {
headers: { 'Authorization': `Bearer ${token}` }
});
const data = await response.json();
return data.data.videos;
};
// Upload video
const uploadVideo = async (token, videoFile, title, description) => {
const formData = new FormData();
formData.append('video', videoFile);
formData.append('title', title);
formData.append('description', description);
const response = await fetch('https://yourdomain.com/api/v1/videos', {
method: 'POST',
headers: { 'Authorization': `Bearer ${token}` },
body: formData
});
return await response.json();
};
```
### **Python**
```python
import requests
class EasyStreamAPI:
def __init__(self, base_url):
self.base_url = base_url.rstrip('/')
self.token = None
def login(self, username, password):
response = requests.post(f'{self.base_url}/api/v1/auth/login', json={
'username': username,
'password': password
})
if response.status_code == 200:
self.token = response.json()['data']['token']
return True
return False
def get_videos(self, limit=20, category=None):
headers = {'Authorization': f'Bearer {self.token}'}
params = {'limit': limit}
if category:
params['category'] = category
response = requests.get(f'{self.base_url}/api/v1/videos',
headers=headers, params=params)
if response.status_code == 200:
return response.json()['data']['videos']
return []
def upload_video(self, video_path, title, description):
headers = {'Authorization': f'Bearer {self.token}'}
with open(video_path, 'rb') as video_file:
files = {'video': video_file}
data = {'title': title, 'description': description}
response = requests.post(f'{self.base_url}/api/v1/videos',
headers=headers, files=files, data=data)
return response.json()
# Usage
api = EasyStreamAPI('https://yourdomain.com')
api.login('username', 'password')
videos = api.get_videos(limit=10, category='gaming')
```
### **PHP**
```php
class EasyStreamAPI {
private $baseUrl;
private $token;
public function __construct($baseUrl) {
$this->baseUrl = rtrim($baseUrl, '/');
}
public function login($username, $password) {
$data = json_encode(['username' => $username, 'password' => $password]);
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $this->baseUrl . '/api/v1/auth/login',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
if ($result['status'] === 200) {
$this->token = $result['data']['token'];
return true;
}
return false;
}
public function getVideos($limit = 20, $category = null) {
$url = $this->baseUrl . '/api/v1/videos?limit=' . $limit;
if ($category) {
$url .= '&category=' . urlencode($category);
}
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $this->token],
CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
return $result['status'] === 200 ? $result['data']['videos'] : [];
}
}
// Usage
$api = new EasyStreamAPI('https://yourdomain.com');
$api->login('username', 'password');
$videos = $api->getVideos(10, 'gaming');
```
---
## 🔄 **Content Syndication Use Cases**
### **1. Cross-Platform Posting**
Extract video metadata and post to YouTube, TikTok, Twitter, Facebook:
```python
# Get video data
videos = api.get_videos(limit=10, category='gaming')
for video in videos:
# Extract metadata
title = video['title']
description = video['description']
tags = video.get('tags', [])
# Post to YouTube
youtube_api.upload_video(title, description, tags)
# Post to Twitter
tweet = f"🎥 {title[:100]}... Watch: {video['video_url']}"
twitter_api.post_tweet(tweet)
# Post to Facebook
facebook_api.post_video_link(title, description, video['video_url'])
```
### **2. Content Aggregation**
Build content aggregation services:
```javascript
// Aggregate content from multiple EasyStream instances
const instances = [
'https://gaming.example.com',
'https://music.example.com',
'https://education.example.com'
];
const aggregatedContent = [];
for (const instance of instances) {
const api = new EasyStreamAPI(instance);
const videos = await api.getVideos(20);
aggregatedContent.push(...videos);
}
// Sort by popularity and recency
aggregatedContent.sort((a, b) => b.views - a.views);
```
### **3. Analytics Dashboard**
Build external analytics dashboards:
```python
# Collect analytics from multiple channels
analytics_data = []
for user_id in user_ids:
user_analytics = api.get_user_analytics(user_id, period='30d')
analytics_data.append(user_analytics)
# Generate reports
generate_performance_report(analytics_data)
send_weekly_summary_email(analytics_data)
```
---
## 🛠️ **SDK and Tools**
### **Official SDKs** (Coming Soon)
- JavaScript/TypeScript SDK
- Python SDK
- PHP SDK
- Mobile SDKs (iOS/Android)
### **Postman Collection**
Import the EasyStream API collection for easy testing:
```
https://yourdomain.com/api/v1/postman-collection.json
```
### **OpenAPI Specification**
Full API specification available at:
```
https://yourdomain.com/api/v1/openapi.json
```
---
## 🔒 **Security Best Practices**
### **1. Token Management**
- Store JWT tokens securely
- Refresh tokens before expiration
- Never expose tokens in client-side code
### **2. Rate Limiting**
- Implement client-side rate limiting
- Handle 429 responses gracefully
- Use exponential backoff for retries
### **3. Input Validation**
- Validate all input data
- Sanitize user-generated content
- Use HTTPS for all requests
### **4. Error Handling**
- Handle all HTTP status codes
- Implement proper error logging
- Provide user-friendly error messages
---
## 📞 **Support and Resources**
### **API Status**
Check API status and uptime:
```
https://yourdomain.com/api/v1/status
```
### **Rate Limit Status**
Check your current rate limit status:
```
https://yourdomain.com/api/v1/rate-limit-status
```
### **Documentation Updates**
This documentation is updated regularly. Check the version and last updated date:
```json
{
"version": "v1",
"last_updated": "2025-01-18",
"documentation_version": "1.0.0"
}
```
---
## 🎉 **Conclusion**
The EasyStream API provides comprehensive access to all platform features, enabling you to:
**Build mobile applications** with full video platform functionality
**Create content syndication tools** for cross-platform posting
**Develop analytics dashboards** with real-time metrics
**Integrate live streaming** into your applications
**Automate content management** workflows
**Build third-party integrations** and tools
**The API is production-ready and designed for scalability, security, and ease of use.**
For additional support, examples, or feature requests, please refer to the platform documentation or contact the development team.
**🚀 Start building amazing applications with the EasyStream API today!**