Μπορείτε να ανεβάσετε ένα βίντεο στο UFOLOAD χωρίς να ανοίξετε ποτέ τον πίνακα ελέγχου. Το REST API δέχεται ανεβάσματα μέσω HTTPS, ο διακομιστής μπορεί να κατεβάσει ένα αρχείο από σύνδεσμο για εσάς και ο ίδιος λογαριασμός είναι προσβάσιμος μέσω WebDAV και FTP για εργαλεία που ήδη μιλούν αυτά τα πρωτόκολλα. Αυτός ο οδηγός περνά και από τους πέντε δρόμους με εντολές που λειτουργούν, εξηγεί τι απαντά ο διακομιστής και δείχνει πώς να περιμένετε να ολοκληρωθεί η κωδικοποίηση. Τα endpoints παρακάτω ελέγχθηκαν με βάση τη δημόσια προδιαγραφή OpenAPI· η τεκμηρίωση API περιέχει την πλήρη αναφορά.
Δημιουργήστε κλειδί API
Δημιουργήστε ένα κλειδί στην ενότητα Developers του πίνακα ελέγχου. Κάθε αίτημα το μεταφέρει ως bearer token στην κεφαλίδα Authorization. Το κλειδί εμφανίζεται μόνο μία φορά κατά τη δημιουργία του, οπότε αποθηκεύστε το σε μεταβλητή περιβάλλοντος ή σε διαχειριστή μυστικών και ανακαλέστε το από τον πίνακα ελέγχου αν διαρρεύσει. Το ίδιο κλειδί λειτουργεί ως κωδικός πρόσβασης για WebDAV και FTP, με το email του λογαριασμού σας ως όνομα χρήστη. Αν δεν έχετε ακόμη λογαριασμό, δημιουργήστε έναν δωρεάν· η σελίδα τιμών απαριθμεί το όριο μεγέθους αρχείου και τα όρια αποθήκευσης και κίνησης που ισχύουν για το πρόγραμμά σας.
export UFOLOAD_API_KEY="ufo_..."Ανέβασμα με curl
Το πιο απλό ανέβασμα στέλνει το αρχείο ως ακατέργαστο σώμα αιτήματος και βάζει το όνομά του στην κεφαλίδα X-File-Name. Στείλτε το όνομα κωδικοποιημένο με percent-encoding (UTF-8) αν περιέχει κενά ή χαρακτήρες εκτός ASCII. Από προεπιλογή το αρχείο καταλήγει στον ριζικό φάκελο· προσθέστε ?folder_id= ή κεφαλίδα X-Folder-Id για να επιλέξετε άλλον.
curl -X POST "https://ufoload.com/api/v1/files?folder_id=root" \
-H "Authorization: Bearer $UFOLOAD_API_KEY" \
-H "X-File-Name: holiday-2026.mp4" \
-H "Content-Type: video/mp4" \
--data-binary @holiday-2026.mp4Λειτουργεί επίσης μια φόρμα multipart. Το αρχείο μπαίνει στο πεδίο file και ο φάκελος μπορεί να δοθεί ως πεδίο φόρμας folder_id:
curl -X POST "https://ufoload.com/api/v1/files" \
-H "Authorization: Bearer $UFOLOAD_API_KEY" \
-F "file=@holiday-2026.mp4"Ένα επιτυχημένο ανέβασμα απαντά με 201 και σώμα JSON που περιέχει το αντικείμενο αρχείου. Τα πεδία που θα χρησιμοποιείτε συχνότερα είναι τα id, public_id (ο σύντομος κωδικός που μπαίνει στις διευθύνσεις του player), status, duration_ms και max_quality. Ο διακομιστής δεν χρησιμοποιεί επιπλέον χώρο για περιεχόμενο που ήδη έχει: αν ανεβάσετε ξανά τα ίδια bytes, απαντά με 200 με το υπάρχον αρχείο και "duplicate": true, αντιστοιχίζοντας τα αρχεία με βάση το hash SHA-256.
| Κατάσταση | Σημασία |
|---|---|
201 | Το αρχείο έγινε δεκτό και μπήκε σε ουρά για επεξεργασία |
200 | Το ίδιο περιεχόμενο υπάρχει ήδη στη βιβλιοθήκη σας· το duplicate είναι true |
401 | Το κλειδί λείπει ή δεν είναι έγκυρο |
404 | Ο φάκελος προορισμού δεν υπάρχει |
409 | Δεν υπάρχει αρκετός αποθηκευτικός χώρος |
413 | Το αρχείο είναι μεγαλύτερο από όσο επιτρέπει το πρόγραμμά σας |
429 | Πάρα πολλά αιτήματα· περιμένετε και δοκιμάστε ξανά |
Τα μεγάλα ανεβάσματα δεν υπόκεινται στα σύντομα χρονικά όρια αιτημάτων που ισχύουν για τις συνηθισμένες κλήσεις API. Ο διακομιστής δέχεται το σώμα όσο συνεχίζει να φτάνει, οπότε μια αργή σύνδεση δεν χαλά ένα ανέβασμα πολλών gigabyte, αν και μια υπερβολικά μεγάλη παύση μεταξύ μπλοκ μπορεί και πάλι να διακοπεί από τον reverse proxy.
Περιμένετε να είναι έτοιμο το βίντεο
Το ανέβασμα είναι μόνο το πρώτο μισό. Μετά από αυτό, το αρχείο μπαίνει σε ουρά και κωδικοποιείται σε προσαρμοστική κλίμακα HLS (δείτε πώς χτίζεται η κλίμακα). Το status του περνά από uploading, queued και processing και καταλήγει σε ready ή failed· ένα αποτυχημένο αρχείο φέρει μήνυμα error. Ελέγχετε το αρχείο κάθε λίγα δευτερόλεπτα και ποτέ σε σφιχτό βρόχο: το API έχει όριο αιτημάτων και απαντά με 429.
curl "https://ufoload.com/api/v1/files/FILE_ID" \
-H "Authorization: Bearer $UFOLOAD_API_KEY"Η απάντηση έχει δύο μέρη: το file με τα μεταδεδομένα και το links με υπογεγραμμένες διευθύνσεις για την κύρια λίστα αναπαραγωγής (playback), το εξώφυλλο (poster), το sprite προεπισκόπησης με hover (sprite), κάθε εκδοχή και το expires_at. Αν χρειάζεστε διαφορετική διάρκεια ισχύος, το POST /files/{id}/links εκδίδει συνδέσμους που ισχύουν από 60 δευτερόλεπτα έως 30 ημέρες, προαιρετικά δεμένους σε διεύθυνση IP ή σε cookie.
Python
Με τη βιβλιοθήκη requests, όταν περνάτε το ανοιχτό αντικείμενο αρχείου, αυτό μεταδίδεται απευθείας από τον δίσκο, οπότε η μνήμη μένει σταθερή ακόμη και για μεγάλα βίντεο. Η παρακάτω συνάρτηση ανεβάζει το αρχείο και μετά περιμένει το αποτέλεσμα.
import os
import time
import urllib.parse
import requests
BASE = "https://ufoload.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['UFOLOAD_API_KEY']}"}
def upload(path, folder_id="root"):
name = urllib.parse.quote(os.path.basename(path))
with open(path, "rb") as f:
r = requests.post(
f"{BASE}/files",
params={"folder_id": folder_id},
data=f,
headers={**HEADERS, "X-File-Name": name, "Content-Type": "application/octet-stream"},
)
r.raise_for_status()
return r.json()["file"]
def wait_ready(file_id, timeout=3600):
deadline = time.time() + timeout
while time.time() < deadline:
r = requests.get(f"{BASE}/files/{file_id}", headers=HEADERS)
r.raise_for_status()
data = r.json()
status = data["file"]["status"]
if status == "ready":
return data
if status == "failed":
raise RuntimeError(data["file"].get("error") or "encoding failed")
time.sleep(5)
raise TimeoutError("video is still processing")
file = upload("holiday-2026.mp4")
data = wait_ready(file["id"])
print("embed:", f"https://iframe.andromedans.live/e/{file['public_id']}")
print("playlist:", data["links"]["playback"])Node.js
Το Node.js 18 και νεότερο έχει ενσωματωμένο το fetch, οπότε δεν χρειάζονται εξαρτήσεις. Αυτή η εκδοχή διαβάζει το αρχείο στη μνήμη, κάτι που είναι εντάξει για κλιπ και σύντομα βίντεο· για αρχεία πολλών gigabyte προτιμήστε curl, WebDAV ή FTP, που μεταδίδουν απευθείας από τον δίσκο.
import { readFile } from 'node:fs/promises'
import { basename } from 'node:path'
import { setTimeout as sleep } from 'node:timers/promises'
const BASE = 'https://ufoload.com/api/v1'
const headers = { Authorization: `Bearer ${process.env.UFOLOAD_API_KEY}` }
async function upload(path) {
const res = await fetch(`${BASE}/files?folder_id=root`, {
method: 'POST',
headers: { ...headers, 'X-File-Name': encodeURIComponent(basename(path)), 'Content-Type': 'application/octet-stream' },
body: await readFile(path),
})
if (!res.ok) throw new Error(`upload failed: ${res.status}`)
return (await res.json()).file
}
async function waitReady(id) {
for (;;) {
const res = await fetch(`${BASE}/files/${id}`, { headers })
if (!res.ok) throw new Error(`status check failed: ${res.status}`)
const data = await res.json()
if (data.file.status === 'ready') return data
if (data.file.status === 'failed') throw new Error(data.file.error || 'encoding failed')
await sleep(5000)
}
}
const file = await upload('holiday-2026.mp4')
const data = await waitReady(file.id)
console.log('embed:', `https://iframe.andromedans.live/e/${file.public_id}`)
console.log('playlist:', data.links.playback)Εισαγωγή από URL
Αν το βίντεο βρίσκεται ήδη online σε άμεσο σύνδεσμο, αφήστε τον διακομιστή να το κατεβάσει αντί να το τραβήξετε στον υπολογιστή σας και να το στείλετε ξανά. Η κλήση επιστρέφει αμέσως 202 με μια εργασία εισαγωγής· ο διακομιστής κατεβάζει το αρχείο και έπειτα το βάζει σε ουρά για κωδικοποίηση. Σύνδεσμοι προς εσωτερικά δίκτυα, loopback και εύρη διευθύνσεων υπηρεσιών απορρίπτονται, μπορείτε να έχετε έως δέκα ενεργές εισαγωγές και το GET /files/import δείχνει την πρόοδο.
curl -X POST "https://ufoload.com/api/v1/files/import" \
-H "Authorization: Bearer $UFOLOAD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/video.mp4", "name": "video.mp4"}'WebDAV και FTP
Για μαζικές μεταφορές και για εργαλεία που δεν μπορούν να καλέσουν API, η ίδια βιβλιοθήκη διατίθεται μέσω WebDAV και FTP. Το όνομα χρήστη είναι το email του λογαριασμού σας και ο κωδικός είναι ένα κλειδί API. Και τα δύο μεταδίδουν απευθείας από τον δίσκο και είναι η πιο ανθεκτική επιλογή για πολύ μεγάλα αρχεία.
curl -u "you@example.com:$UFOLOAD_API_KEY" https://ufoload.com/dav/
curl -u "you@example.com:$UFOLOAD_API_KEY" -T holiday-2026.mp4 https://ufoload.com/dav/holiday-2026.mp4curl -u "you@example.com:$UFOLOAD_API_KEY" ftp://ftp.ufoload.com/
curl -u "you@example.com:$UFOLOAD_API_KEY" --ftp-ssl -T holiday-2026.mp4 ftp://ftp.ufoload.com/Χρησιμοποιείτε τις κρυπτογραφημένες παραλλαγές όποτε τις υποστηρίζει ο client σας, αφού το κλειδί API είναι ο κωδικός πρόσβασης. Κάθε client που μιλά WebDAV ή FTPS, από διαχειριστές αρχείων έως εργαλεία συγχρονισμού, μπορεί να χρησιμοποιήσει τα ίδια στοιχεία. Τα αρχεία που αντιγράφονται με αυτόν τον τρόπο εμφανίζονται στη βιβλιοθήκη σας και κωδικοποιούνται όπως κάθε άλλο ανέβασμα.
Ποιον δρόμο να επιλέξετε
| Δρόμος | Ιδανικός για | Προσοχή σε |
|---|---|---|
| Ανέβασμα μέσω API | Εφαρμογές και backends που ανεβάζουν εκ μέρους χρηστών | Χρήση μνήμης αν ο client διαβάζει πρώτα ολόκληρο το αρχείο |
| Εισαγωγή από URL | Αρχεία που έχουν ήδη δημόσιο άμεσο σύνδεσμο | Μόνο άμεσοι σύνδεσμοι http(s)· όριο δέκα ενεργών εισαγωγών |
| WebDAV | Μεγάλα αρχεία, προσάρτηση της βιβλιοθήκης ως δίσκου | Χρησιμοποιήστε το email σας και το κλειδί API ως διαπιστευτήρια |
| FTP / FTPS | Υπάρχοντα εργαλεία και scripts, μαζική μεταφορά | Χρησιμοποιήστε την επιλογή ρητού TLS |
Χρησιμοποιήστε το βίντεο
Μόλις η κατάσταση γίνει ready, η διεύθυνση του player είναι https://iframe.andromedans.live/e/ ακολουθούμενη από το public_id, ακριβώς αυτό που βάζετε σε ένα iframe (λειτουργεί και το μεγάλο id, το οποίο ανακατευθύνεται στη σύντομη διεύθυνση)· ο οδηγός ενσωμάτωσης δείχνει τον κώδικα και την εναλλακτική με hls.js. Μπορείτε να περιορίσετε πού παίζει με κανόνες domain και χωρών και, όταν υπάρχουν διαθέσιμες διαφημίσεις, να τις ενεργοποιήσετε για να κερδίζετε από τις προβολές. Κρατήστε το κλειδί έξω από τον κώδικα του browser, αλλάξτε το όταν κάποιος φεύγει από την ομάδα σας και θυμηθείτε ότι το API διατίθεται σε κάθε πρόγραμμα, οπότε μπορείτε να ξεκινήσετε να χτίζετε σήμερα.
Ανεβάστε ένα βίντεο και αποκτήστε player HLS και κλειδί API μέσα σε λίγα λεπτά. Τα όρια των προγραμμάτων αναφέρονται στη σελίδα τιμών.