A minimal, open format for distributed video feeds. Like RSS for video content.
Anyone can host a feed. No central authority or gatekeepers.
Any client can consume any feed. True interoperability.
No registration or API keys required. Just HTTP and JSON.
Three simple endpoints. Easy to implement and understand.
XTOR is a standard HTTP/JSON format that enables any content provider to expose their video catalog in a machine-readable way. Think of it like RSS/Atom feeds, but specifically designed for video content with quality selection, filtering, and pagination.
| Feature | XTOR | RSS | YouTube API |
|---|---|---|---|
| Video-specific | ✅ | ❌ | ✅ |
| Quality selection | ✅ | ❌ | ✅ |
| Decentralized | ✅ | ✅ | ❌ |
| No authentication | ✅ | ✅ | ❌ |
| Live streams | ✅ | ❌ | ✅ |
| Filtering & search | ✅ | ❌ | ✅ |
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/manifest')
def manifest():
return jsonify({
"name": "My Video Feed",
"xtor_version": "1.0",
"active": True,
"search": False
})
@app.route('/videos')
def videos():
page = request.args.get('page', 1, type=int)
return jsonify({
"videos": [{
"id": "video1",
"title": "Sample Video",
"thumbnail": "https://example.com/thumb.jpg",
"duration": 120,
"formats": [{
"quality": 720,
"url": "https://example.com/video-720p.mp4"
}]
}],
"pagination": {
"page": page,
"has_next": False
}
})
@app.route('/videos/<video_id>')
def video_detail(video_id):
return jsonify({
"id": video_id,
"title": "Sample Video",
"thumbnail": "https://example.com/thumb.jpg",
"duration": 120,
"formats": [
{"quality": 720, "url": "https://example.com/video-720p.mp4"},
{"quality": 1080, "url": "https://example.com/video-1080p.mp4"}
]
})
if __name__ == '__main__':
app.run(debug=True)
Implement the XTOR spec to expose your video content to any compatible client.
Read Specification →Use our interactive testing tool to validate your XTOR feed implementation.
Open Tester →