This document provides comprehensive documentation for all APIs and services available in Marina.Moda®.
- Overview
- Authentication
- Music Streaming API
- User Management API
- Blockchain API
- AI Services API
- Storage API
- Community API
- Error Handling
- Rate Limiting
- SDKs and Libraries
Marina.Moda® provides a comprehensive set of APIs for building decentralized music streaming applications. All APIs are RESTful and return JSON responses. The base URL for all API endpoints is:
https://api.marina.moda/v1
- Current Version: v1
- Version Header:
X-API-Version: 1 - Deprecation Policy: APIs are supported for at least 12 months after deprecation notice
All API responses follow this standard format:
{
"success": true,
"data": {},
"message": "Operation completed successfully",
"timestamp": "2024-12-01T10:00:00Z",
"requestId": "req_123456789"
}Marina.Moda® uses JWT (JSON Web Tokens) for authentication. All authenticated endpoints require a valid JWT token in the Authorization header.
- Login: POST
/auth/login - Receive JWT: Token valid for 24 hours
- Include Token: Add to
Authorization: Bearer <token>header - Refresh: POST
/auth/refreshbefore expiration
Authorization: Bearer <jwt_token>
Content-Type: application/json
X-API-Key: <your_api_key>curl -X POST https://api.marina.moda/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "securepassword"
}'Endpoint: GET /music/stream/{track_id}
Description: Retrieve a music stream URL for playback
Parameters:
track_id(string, required): Unique identifier for the trackquality(string, optional): Audio quality (low, medium, high, lossless)format(string, optional): Audio format (mp3, aac, flac)
Response:
{
"success": true,
"data": {
"track_id": "track_123",
"stream_url": "https://stream.marina.moda/track_123.m3u8",
"quality": "high",
"format": "aac",
"bitrate": 320,
"duration": 180,
"expires_at": "2024-12-01T11:00:00Z"
}
}Endpoint: GET /music/search
Description: Search for music tracks, albums, or artists
Query Parameters:
q(string, required): Search querytype(string, optional): Search type (track, album, artist, playlist)limit(integer, optional): Maximum results (default: 20, max: 100)offset(integer, optional): Pagination offset (default: 0)
Response:
{
"success": true,
"data": {
"results": [
{
"id": "track_123",
"title": "Song Title",
"artist": "Artist Name",
"album": "Album Name",
"duration": 180,
"thumbnail": "https://cdn.marina.moda/thumbnails/track_123.jpg"
}
],
"total": 150,
"limit": 20,
"offset": 0
}
}Endpoint: GET /music/tracks/{track_id}
Description: Retrieve detailed information about a specific track
Response:
{
"success": true,
"data": {
"id": "track_123",
"title": "Song Title",
"artist": {
"id": "artist_456",
"name": "Artist Name",
"verified": true
},
"album": {
"id": "album_789",
"name": "Album Name",
"release_date": "2024-01-01"
},
"duration": 180,
"genre": "Pop",
"tags": ["upbeat", "summer", "dance"],
"play_count": 15000,
"like_count": 2500,
"thumbnail": "https://cdn.marina.moda/thumbnails/track_123.jpg",
"audio_url": "https://stream.marina.moda/track_123.m3u8"
}
}Endpoint: POST /users/register
Description: Create a new user account
Request Body:
{
"email": "user@example.com",
"password": "securepassword",
"username": "username",
"display_name": "Display Name",
"date_of_birth": "1990-01-01"
}Response:
{
"success": true,
"data": {
"user_id": "user_123",
"email": "user@example.com",
"username": "username",
"display_name": "Display Name",
"created_at": "2024-12-01T10:00:00Z"
}
}Endpoint: GET /users/profile
Description: Retrieve current user's profile information
Headers: Requires authentication
Response:
{
"success": true,
"data": {
"id": "user_123",
"email": "user@example.com",
"username": "username",
"display_name": "Display Name",
"avatar": "https://cdn.marina.moda/avatars/user_123.jpg",
"bio": "Music enthusiast",
"followers_count": 150,
"following_count": 75,
"playlists_count": 12,
"created_at": "2024-12-01T10:00:00Z",
"last_active": "2024-12-01T09:30:00Z"
}
}Endpoint: PUT /users/profile
Description: Update user profile information
Headers: Requires authentication
Request Body:
{
"display_name": "New Display Name",
"bio": "Updated bio",
"avatar": "data:image/jpeg;base64,..."
}Endpoint: POST /blockchain/contract/interact
Description: Interact with smart contracts for music licensing and compensation
Headers: Requires authentication
Request Body:
{
"contract_address": "0x1234567890abcdef...",
"function_name": "purchaseLicense",
"parameters": {
"track_id": "track_123",
"license_type": "commercial",
"duration": 365
},
"gas_limit": 300000
}Response:
{
"success": true,
"data": {
"transaction_hash": "0xabcdef1234567890...",
"block_number": 12345678,
"gas_used": 250000,
"status": "pending"
}
}Endpoint: GET /blockchain/transaction/{tx_hash}
Description: Check the status of a blockchain transaction
Response:
{
"success": true,
"data": {
"transaction_hash": "0xabcdef1234567890...",
"block_number": 12345678,
"status": "confirmed",
"confirmations": 12,
"gas_used": 250000,
"timestamp": "2024-12-01T10:00:00Z"
}
}Endpoint: POST /ai/recommendations
Description: Get AI-powered music recommendations based on user preferences
Headers: Requires authentication
Request Body:
{
"user_id": "user_123",
"context": "workout",
"mood": "energetic",
"genres": ["pop", "electronic"],
"limit": 20
}Response:
{
"success": true,
"data": {
"recommendations": [
{
"track_id": "track_123",
"title": "Recommended Song",
"artist": "Artist Name",
"confidence_score": 0.95,
"reason": "Based on your workout playlist preferences"
}
],
"context": "workout",
"mood": "energetic"
}
}Endpoint: POST /ai/moderate
Description: AI-powered content moderation for user-generated content
Request Body:
{
"content": "User comment text",
"content_type": "comment",
"user_id": "user_123"
}Response:
{
"success": true,
"data": {
"is_appropriate": true,
"confidence_score": 0.98,
"flagged_keywords": [],
"moderation_notes": "Content appears appropriate"
}
}Endpoint: POST /storage/upload
Description: Upload files to decentralized storage (IPFS)
Headers: Requires authentication
Request Body: Multipart form data
Response:
{
"success": true,
"data": {
"file_id": "file_123",
"ipfs_hash": "QmHash123...",
"file_size": 1024000,
"mime_type": "audio/mpeg",
"uploaded_at": "2024-12-01T10:00:00Z",
"gateway_url": "https://ipfs.io/ipfs/QmHash123..."
}
}Endpoint: GET /storage/files/{file_id}
Description: Retrieve file information and access URLs
Response:
{
"success": true,
"data": {
"file_id": "file_123",
"ipfs_hash": "QmHash123...",
"file_size": 1024000,
"mime_type": "audio/mpeg",
"gateway_urls": [
"https://ipfs.io/ipfs/QmHash123...",
"https://gateway.pinata.cloud/ipfs/QmHash123..."
],
"created_at": "2024-12-01T10:00:00Z"
}
}Endpoint: POST /community/posts
Description: Create a new community post
Headers: Requires authentication
Request Body:
{
"content": "Check out this amazing new track!",
"type": "music_share",
"track_id": "track_123",
"tags": ["new_release", "electronic"],
"visibility": "public"
}Response:
{
"success": true,
"data": {
"post_id": "post_123",
"content": "Check out this amazing new track!",
"user": {
"id": "user_123",
"username": "username",
"display_name": "Display Name"
},
"track": {
"id": "track_123",
"title": "Track Title",
"artist": "Artist Name"
},
"created_at": "2024-12-01T10:00:00Z",
"like_count": 0,
"comment_count": 0
}
}Endpoint: GET /community/feed
Description: Retrieve community posts and updates
Query Parameters:
page(integer, optional): Page number (default: 1)limit(integer, optional): Posts per page (default: 20, max: 50)type(string, optional): Filter by post typeuser_id(string, optional): Filter by specific user
{
"success": false,
"error": {
"code": "AUTHENTICATION_FAILED",
"message": "Invalid or expired authentication token",
"details": "Token expired at 2024-12-01T09:00:00Z"
},
"timestamp": "2024-12-01T10:00:00Z",
"requestId": "req_123456789"
}| Code | HTTP Status | Description |
|---|---|---|
AUTHENTICATION_FAILED |
401 | Invalid or expired token |
PERMISSION_DENIED |
403 | Insufficient permissions |
RESOURCE_NOT_FOUND |
404 | Requested resource not found |
VALIDATION_ERROR |
400 | Invalid request parameters |
RATE_LIMIT_EXCEEDED |
429 | Too many requests |
INTERNAL_SERVER_ERROR |
500 | Server-side error |
- Free Tier: 100 requests per hour
- Premium Tier: 1000 requests per hour
- Enterprise Tier: 10000 requests per hour
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 950
X-RateLimit-Reset: 1640995200{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Try again in 3600 seconds.",
"retry_after": 3600
}
}- Flutter SDK: GitHub Repository
- JavaScript SDK: GitHub Repository
- Python SDK: GitHub Repository
- React Native: npm package
- Vue.js: npm package
- Angular: npm package
dependencies:
marinamoda_flutter: ^1.0.0npm install @marinamoda/sdkpip install marinamoda-sdk- Interactive API Explorer: API Playground
- Postman Collection: Download Collection
- OpenAPI Specification: OpenAPI 3.0 Spec
- SDK Documentation: SDK Docs
For API support and questions:
- Documentation: docs.marina.moda
- GitHub Issues: API Issues
- Email: api-support@marina.moda
- Discord: Join Community
Note: This API documentation is maintained by the Marina.Moda® development team. For the most up-to-date information, please refer to our official documentation.