Skip to content

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-token

Example Request

bash
curl -H "Authorization: Bearer your-token" \
  https://nzbs.in/api/v1/releases/f4b55784-3c7a-48e7-911c-2402c2b070b9/extras/status

Response

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/extras

Upload NFO file:

bash
curl -X POST \
  -H "Authorization: Bearer your-token" \
  -F "nfo=@release.nfo" \
  https://nzbs.in/api/v1/releases/uuid/extras

Upload 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/extras

Upload 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/extras

Python 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_extras permission.

Permission Roles

  • Members: Add to empty fields only
  • Uploaders: Full control over own releases
  • Staff/Admin: Full control over all releases

4. Error Codes

StatusDescription
200Success
401Unauthorized (invalid token)
404Release not found
422Validation 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.

>>Not Y3K Compliant<<