Appearance
Upload Release Extras
Add mediainfo, NFO files, or screenshots to an existing release.
1. Check Release Status
Review the release to see which extras are already present before uploading.
GET /api/v1/releases/{uuid}/extras/status
Parameters
- uuid (string, required) - Release UUID
Authentication
Include an Authorization: Bearer {token} header:
Authorization: Bearer your-api-tokenExample Request
bash
curl -H "Authorization: Bearer your-token" \
https://nzbs.in/api/v1/releases/f4b55784-3c7a-48e7-911c-2402c2b070b9/extras/statusResponse
json
{
"release_exists": true,
"release_info": {
"name": "Movie.Title.2023.1080p.BluRay.x264-GROUP",
"category": "Movies",
"posted_at": "2023-12-01T10:30:00.000000Z",
"poster": "uploader@example.com",
"size": 15728640000
},
"current_extras": {
"mediainfo": false,
"nfo": true,
"screenshots": false
},
"permissions": {
"can_add": true,
"can_overwrite": false
},
"allowed_operations": {
"mediainfo": true,
"nfo": false,
"screenshots": true
}
}2. Upload Extras
Use this endpoint to upload mediainfo files, NFOs, or screenshot links for the release.
POST /api/v1/releases/{uuid}/extras
Parameters
- uuid (string, required) - Release UUID.
- mediainfo (file, optional) - Plain-text mediainfo report (.txt, ≤50MB).
- nfo (file, optional) - NFO document (.nfo or .txt, ≤50MB).
- screenshots (array, optional) - Screenshot URLs (max 10).
Authentication
Provide the same bearer token header as above.
cURL Examples
Upload mediainfo file:
bash
curl -X POST \
-H "Authorization: Bearer your-token" \
-F "mediainfo=@mediainfo.txt" \
https://nzbs.in/api/v1/releases/uuid/extrasUpload NFO file:
bash
curl -X POST \
-H "Authorization: Bearer your-token" \
-F "nfo=@release.nfo" \
https://nzbs.in/api/v1/releases/uuid/extrasUpload screenshot URLs (JSON):
bash
curl -X POST \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"screenshots": [
"https://i.ibb.co/example1.jpg",
"https://i.ibb.co/example2.jpg"
]
}' \
https://nzbs.in/api/v1/releases/uuid/extrasUpload all extras together: Combine file uploads and screenshot URLs in a single multipart request.
bash
curl -X POST \
-H "Authorization: Bearer your-token" \
-F "mediainfo=@mediainfo.txt" \
-F "nfo=@release.nfo" \
-F "screenshots[]=https://i.ibb.co/example1.jpg" \
-F "screenshots[]=https://i.ibb.co/example2.jpg" \
https://nzbs.in/api/v1/releases/uuid/extrasPython Example
python
import requests
url = "https://nzbs.in/api/v1/releases/uuid/extras"
headers = {"Authorization": "Bearer your-token"}
# Upload files
files = {
'mediainfo': open('mediainfo.txt', 'rb'),
'nfo': open('release.nfo', 'rb')
}
data = {
'screenshots[]': [
'https://i.ibb.co/example1.jpg',
'https://i.ibb.co/example2.jpg'
]
}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())Call response.raise_for_status() before response.json() to surface HTTP errors.
Response Examples
Success:
json
{
"success": true,
"updated": ["mediainfo", "screenshots"]
}Partial success (permission blocked):
json
{
"success": true,
"updated": ["mediainfo"],
"skipped": ["nfo"],
"reason": "already exists and you don't have overwrite permission"
}Skipped extras remain unchanged on the release.
Validation error:
json
{
"success": false,
"errors": ["Failed to process mediainfo: File too large"]
}3. Permission System
You may add or overwrite extras when one of these conditions is true:
- Field is empty - No existing content.
- User is uploader - Original release uploader.
- Has overwrite permission - Staff with
overwrite_release_extraspermission.
Permission Roles
- Members: Add to empty fields only
- Uploaders: Full control over own releases
- Staff/Admin: Full control over all releases
4. Error Codes
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized (invalid token) |
| 404 | Release not found |
| 422 | Validation error or permission denied |
5. Best Practices
- Check status first to avoid uploading to protected fields.
- Validate files locally before upload (size, format).
- Handle partial failures - some uploads may succeed while others fail.
- Use appropriate Content-Type headers for your request format.