Du kan legge en video på UFOLOAD uten å åpne dashbordet i det hele tatt. REST API-et tar imot opplastinger over HTTPS, serveren kan hente en fil fra en lenke for deg, og den samme kontoen kan nås over WebDAV og FTP for verktøy som allerede snakker disse protokollene. Denne guiden går gjennom alle fem veiene med fungerende kommandoer, forklarer hva serveren svarer og viser hvordan du venter til kodingen er ferdig. Endepunktene nedenfor er kontrollert mot den offentlige OpenAPI-spesifikasjonen; API-dokumentasjonen har den fullstendige referansen.
Opprett en API-nøkkel
Opprett en nøkkel under Utviklere i dashbordet. Hver forespørsel sender den som et bearer-token i headeren Authorization. Nøkkelen vises bare én gang når den opprettes, så lagre den i en miljøvariabel eller et verktøy for hemmeligheter, og trekk den tilbake fra dashbordet hvis den lekker. Den samme nøkkelen fungerer som passord for WebDAV og FTP, med e-postadressen til kontoen som brukernavn. Har du ikke konto ennå, kan du opprette en gratis; prissiden viser grensen for filstørrelse og kvotene for lagring og trafikk som gjelder for planen din.
export UFOLOAD_API_KEY="ufo_..."Last opp med curl
Den enkleste opplastingen sender filen som rå forespørselskropp og legger navnet i headeren X-File-Name. Send navnet prosentkodet (UTF-8) hvis det inneholder mellomrom eller tegn utenfor ASCII. Som standard havner filen i rotmappen; legg til ?folder_id= eller en X-Folder-Id-header for å velge en annen.
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.mp4Et multipart-skjema fungerer også. Filen legges i feltet file, og mappen kan angis som skjemafeltet folder_id:
curl -X POST "https://ufoload.com/api/v1/files" \
-H "Authorization: Bearer $UFOLOAD_API_KEY" \
-F "file=@holiday-2026.mp4"En vellykket opplasting svarer 201 med en JSON-kropp som inneholder filobjektet. Feltene du kommer til å bruke mest, er id, public_id (den korte koden som går inn i spilleradresser), status, duration_ms og max_quality. Serveren bruker ikke ekstra plass på innhold den allerede har: laster du opp de samme bytene igjen, svarer den 200 med den eksisterende filen og "duplicate": true, og filene matches etter SHA-256-hashen.
| Status | Betydning |
|---|---|
201 | Filen er tatt imot og satt i kø for behandling |
200 | Det samme innholdet finnes allerede i biblioteket; duplicate er true |
401 | Nøkkelen mangler eller er ugyldig |
404 | Målmappen finnes ikke |
409 | Ikke nok lagringsplass |
413 | Filen er større enn planen din tillater |
429 | For mange forespørsler; vent og prøv igjen |
Store opplastinger er ikke underlagt de korte tidsavbruddene som gjelder for vanlige API-kall. Serveren tar imot kroppen så lenge den fortsetter å komme, så en treg forbindelse ødelegger ikke en opplasting på flere gigabyte, men en for lang pause mellom blokkene kan likevel bli kuttet av den omvendte proxyen.
Vent til videoen er klar
Opplastingen er bare første halvdel. Etterpå settes filen i kø og kodes til en adaptiv HLS-stige (se hvordan stigen bygges). status går gjennom uploading, queued og processing og ender på ready eller failed; en mislykket fil har en error-melding. Spør etter filen med noen sekunders mellomrom, aldri i en tett løkke: API-et har grenser for antall forespørsler og svarer 429.
curl "https://ufoload.com/api/v1/files/FILE_ID" \
-H "Authorization: Bearer $UFOLOAD_API_KEY"Svaret har to deler: file med metadataene, og links med signerte adresser til master-spillelisten (playback), forsidebildet (poster), spriten for forhåndsvisning ved hover (sprite), hver versjon og expires_at. Trenger du en annen levetid, utsteder POST /files/{id}/links lenker som gjelder fra 60 sekunder til 30 dager, eventuelt bundet til en IP-adresse eller en informasjonskapsel.
Python
Med biblioteket requests strømmes filen fra disken når du sender inn det åpne filobjektet, så minnebruken holder seg flat selv for store videoer. Funksjonen nedenfor laster opp og venter deretter på resultatet.
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 og nyere har fetch innebygd, så du trenger ingen avhengigheter. Denne versjonen leser filen inn i minnet, noe som er greit for klipp og korte videoer; for filer på flere gigabyte bør du heller bruke curl, WebDAV eller FTP, som strømmer fra disken.
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)Import fra URL
Ligger videoen allerede på nett bak en direkte lenke, kan du la serveren laste den ned i stedet for å hente den til din egen maskin og sende den opp igjen. Kallet returnerer 202 med en gang, sammen med en importoppgave; serveren henter filen og setter den deretter i kø for koding. Lenker til interne nettverk, loopback og tjenesteadresseområder avvises, du kan ha opptil ti aktive importer, og GET /files/import viser fremdriften.
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 og FTP
For masseoverføringer og verktøy som ikke kan kalle et API, er det samme biblioteket tilgjengelig over WebDAV og FTP. Brukernavnet er e-postadressen til kontoen, og passordet er en API-nøkkel. Begge strømmer fra disken og er det mest robuste alternativet for svært store filer.
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/Bruk de krypterte variantene når klienten din støtter dem, siden API-nøkkelen er passordet. Alle klienter som snakker WebDAV eller FTPS, fra filbehandlere til synkroniseringsverktøy, kan bruke de samme opplysningene. Filer som kopieres på denne måten, dukker opp i biblioteket og kodes som enhver annen opplasting.
Hvilken vei bør du velge?
| Vei | Best egnet for | Pass på |
|---|---|---|
| Opplasting via API | Applikasjoner og backender som laster opp på vegne av brukere | Minnebruk hvis klienten leser hele filen først |
| Import fra URL | Filer som allerede har en offentlig direkte lenke | Bare direkte http(s)-lenker; grense på ti aktive importer |
| WebDAV | Store filer, montering av biblioteket som en stasjon | Bruk e-postadressen og API-nøkkelen som påloggingsdetaljer |
| FTP / FTPS | Eksisterende verktøy og skript, masseoverføring | Bruk alternativet med eksplisitt TLS |
Bruk videoen
Når statusen er ready, er spilleradressen https://iframe.andromedans.live/e/ etterfulgt av public_id, og det er nettopp det du setter inn i en iframe (den lange id fungerer også og videresendes til den korte adressen); guiden om innbygging viser markupen og alternativet med hls.js. Du kan begrense hvor den spilles av med regler for domener og land, og når annonser er tilgjengelige, kan du slå dem på for å tjene penger på visninger. Hold nøkkelen unna nettleserkoden, bytt den når folk forlater teamet ditt, og husk at API-et er tilgjengelig på alle planer, så du kan begynne å bygge i dag.
Last opp en video og få en HLS-spiller og en API-nøkkel på få minutter. Grensene for hver plan står på prissiden.