Overview
FUGA is a leading music distribution platform that delivers catalog to 400+ Digital Service Providers (DSPs) worldwide. The Royalti.io API integrates with FUGA using CSV metadata files and FTP file uploads, enabling automated delivery of releases to streaming platforms.Key Features
- Automated CSV Generation - API automatically formats your catalog into FUGA’s CSV template
- FTP Upload Management - Handles file uploads including audio files and artwork
- Webhook Tracking - Real-time delivery status updates from FUGA
- Batch Delivery - Deliver multiple products simultaneously
- Validation - Pre-delivery validation to catch errors early
- Monitoring - Built-in health checks and delivery analytics
Authentication
FUGA delivery endpoints require authentication and the “DDEX & Deliveries” addon to be enabled.
FUGA Workflow
Configure FUGA Provider
Set up your FUGA FTP credentials and webhook salt for delivery tracking.
- Node.js
- Python
- cURL
All FTP credentials and webhook salts are automatically encrypted at rest. No plaintext credentials are stored in the database.
Prepare Product Metadata
Ensure your product has all required fields for FUGA delivery:Required Product Fields:Reissue Example:
- UPC - 12 or 13 digits (no ‘auto’ value)
- Title - Album title (without version)
- Display Artist - Primary artists (no featuring artists)
- Release Date - Consumer street date (YYYY-MM-DD)
- Label - Label name
- Language - 2-letter ISO code (e.g., ‘en’, ‘es’)
- catalogTier - One of: ‘Back’, ‘Mid’, ‘Front’, ‘Premium’
- territories - Array of territory codes or [‘World’]
- c_line_year - Copyright year (©) - defaults to current year if not provided
- p_line_year - Phonogram year (℗) - defaults to current year if not provided
- copyright - Copyright holder name for C-Line
- publisher - Sound recording owner for P-Line
If
c_line_year or p_line_year are not provided, the system automatically uses the current year. For reissues, you should explicitly set these to the original release year.Node.js
Node.js
Create Product with Delivery Flag
Use the delivery flag feature to automatically queue FUGA delivery:
- Node.js
- Python
- cURL
The delivery flag creates the product AND queues FUGA delivery in a single API call. The system automatically generates the CSV file and schedules the FTP upload.
Monitor Delivery Status
Track delivery progress and webhook updates:Delivery Statuses:
Node.js
pending- Queued for deliveryprocessing- Uploading files to FTPdelivered- Successfully uploaded to FUGAconfirmed- FUGA acknowledged receiptcompleted- Delivered to DSPsfailed- Delivery failed (check logs for errors)
CSV Metadata Format
FUGA uses a CSV template with 50+ fields for catalog metadata. The Royalti.io API automatically generates this CSV from your product and asset data.Product-Level Fields (Album)
| FUGA CSV Field | API Field | Required | Format | Example |
|---|---|---|---|---|
| Album title | title | ✓ | Text | ”Greatest Hits” |
| Album version | edition | Text | ”Deluxe Edition” | |
| UPC | upc | ✓ | 12-13 digits | ”012345678901” |
| Primary artists | displayArtist | ✓ | Pipe-separated | ”Artist A | Artist B” |
| Release date | releaseDate | ✓ | YYYY-MM-DD | ”2024-06-01” |
| Main genre | mainGenre | ✓ | Enum | ”Pop”, “Rock”, “Hip Hop/Rap” |
| Label | label | ✓ | Text | ”XYZ Records” |
| C-Line year | c_line_year | ✓ | YYYY | ”2024” |
| C-Line name | copyright | ✓ | Text | ”XYZ Records Inc” |
| P-Line year | p_line_year | ✓ | YYYY | ”2024” |
| P-Line name | publisher | ✓ | Text | ”XYZ Records Inc” |
| Parental advisory | explicit | ✓ | Enum | ”Yes”, “No”, “Clean” |
| Album format | format | ✓ | Enum | ”Single”, “EP”, “Album” |
| Catalog Tier | ddexMetadata.catalogTier | ✓ | Enum | ”Back”, “Mid”, “Front”, “Premium” |
| Territories | ddexMetadata.territories | Pipe-separated | ”World” or “US|CA|GB” |
The API automatically maps your product fields to FUGA’s CSV format. Fields like
c_line_year and p_line_year default to the current year if not provided.Track-Level Fields (Assets)
| Field | Required | Format | Example |
|---|---|---|---|
| Track title | ✓ | Text | ”Song Title” |
| ISRC | ✓ | 12 chars (no dashes) | “USRC12345678” |
| Track Primary artists | ✓ | Pipe-separated | ”Artist A” |
| Track Featuring Artists | Pipe-separated | ”Artist B | Artist C” | |
| Volume number | ✓ | Integer | ”1” |
| Track Main genre | ✓ | Enum | ”Pop” |
| Audio Language | ✓ | 2-letter or ZXX | ”en” (ZXX = Instrumental) |
| Available separately | ✓ | Y/N | ”Y” |
| Track Sequence | ✓ | Integer | ”1” (display order) |
| Track Catalog Tier | ✓ | Enum | ”Front” |
| Original file name | ✓ | Text | ”012345678901_01_01.wav” |
The API automatically formats your product/asset data into FUGA’s CSV format. You don’t need to manually create CSV files.
FTP Upload
The delivery system automatically uploads files to FUGA’s FTP server in the following structure:Audio File Requirements
- Formats: WAV (recommended), FLAC, MP3 (320kbps)
- Sample Rate: 44.1kHz or 48kHz
- Bit Depth: 16-bit or 24-bit (WAV/FLAC)
- Naming:
{UPC}_{volume}_{track}.{ext}(e.g.,012345678901_01_01.wav)
Cover Art Requirements
- Format: JPG or PNG
- Dimensions: Minimum 3000x3000 pixels (square)
- File Size: Maximum 10MB
- Color Mode: RGB
Webhook Integration
FUGA sends webhooks to notify you of delivery status updates. Configure your webhook endpoint to receive these events.Webhook Events
Product State Events:product_state- Product acceptance/rejection/processing status
delivery_completed- Product delivered to DSPdelivery_cancelled- Delivery cancelled by FUGAdelivery_rejected- Delivery rejected by DSP
xml_ingestion- Metadata ingestion results
Webhook Security
FUGA secures webhooks using SHA3-256 signature verification with your configured webhook salt. What happens automatically:- Signature verification using SHA3-256
- Replay attack prevention (rejects webhooks older than 5 minutes)
- Duplicate detection (prevents processing the same webhook twice)
- Delivery status updates
- User notifications
Webhook Endpoint
Configure FUGA to send webhooks to:- Verifies SHA3-256 signature
- Prevents replay attacks (5-minute timestamp window)
- Detects duplicate webhooks
- Updates delivery status
- Sends notifications to users
Validation Requirements
Before delivery, the system validates your product:UPC Validation
UPC Validation
- Must be 12 or 13 digits
- Cannot be ‘auto’ value
- Leading zeros preserved
- No special characters
ISRC Validation
ISRC Validation
- Must be 12 characters
- No dashes or spaces
- Format: XX-XXX-YY-NNNNN (stored without dashes)
Audio File Validation
Audio File Validation
- Valid audio format (WAV, FLAC, MP3)
- Minimum quality requirements met
- File exists in storage
- File size within limits
Metadata Completeness
Metadata Completeness
- All required fields present
- Genre from approved list
- Valid territory codes
- Parental advisory specified
Best Practices
Territory Management
Node.js
Catalog Tier Selection
- Premium - New releases, major label artists
- Front - Standard new releases
- Mid - Catalog releases (1-5 years old)
- Back - Older catalog (5+ years)
File Naming Convention
Node.js
Error Handling
Implement comprehensive validation and error handling:Node.js
Batch Delivery
Deliver multiple products simultaneously:Node.js
Monitoring and Analytics
Health Metrics
Monitor FUGA delivery health:Node.js
FTP Connection Health
Check FTP connectivity:Node.js
Stuck Deliveries
Find deliveries that need attention:Node.js
Troubleshooting
Delivery stuck in 'pending' status
Delivery stuck in 'pending' status
Possible causes:
- Queue processor not running
- FTP credentials invalid
- Rate limit exceeded
UPC validation error
UPC validation error
Error: “Product has invalid UPC format for FUGA delivery”Solution:
- Ensure UPC is 12 or 13 digits
- Remove any dashes or spaces
- UPC cannot be ‘auto’ - generate a real UPC
- Preserve leading zeros
Audio file not found
Audio file not found
Error: “Original file name must exist on FTP server”Solution:
- Ensure audio files are uploaded to storage
- Verify file naming matches CSV metadata
- Check file format is supported (WAV, FLAC, MP3)
Webhook signature verification failed
Webhook signature verification failed
Error: “Invalid webhook signature”Solution:
- Verify webhook salt matches FUGA configuration
- Check salt is stored in provider credentials
- Ensure webhook timestamp is recent (<5 minutes)