APIUploadWebDAV

Last opp videoer via API: curl, Python, Node.js, WebDAV og FTP

Last opp og importer videoer med UFOLOAD REST API via curl, Python og Node.js, vent på kodingen, og bruk WebDAV eller FTP for store filer.

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.

bash
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.

Rå forespørselskropp · bash
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

Et multipart-skjema fungerer også. Filen legges i feltet file, og mappen kan angis som skjemafeltet folder_id:

Multipart-skjema · bash
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.

StatusBetydning
201Filen er tatt imot og satt i kø for behandling
200Det samme innholdet finnes allerede i biblioteket; duplicate er true
401Nøkkelen mangler eller er ugyldig
404Målmappen finnes ikke
409Ikke nok lagringsplass
413Filen er større enn planen din tillater
429For mange forespørsler; vent og prøv igjen
Tips

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.

bash
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.

python
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.

js
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.

bash
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.

WebDAV over HTTPS, port 443 · bash
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.mp4
FTP med eksplisitt TLS, port 21 · bash
curl -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?

VeiBest egnet forPass på
Opplasting via APIApplikasjoner og backender som laster opp på vegne av brukereMinnebruk hvis klienten leser hele filen først
Import fra URLFiler som allerede har en offentlig direkte lenkeBare direkte http(s)-lenker; grense på ti aktive importer
WebDAVStore filer, montering av biblioteket som en stasjonBruk e-postadressen og API-nøkkelen som påloggingsdetaljer
FTP / FTPSEksisterende verktøy og skript, masseoverføringBruk 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.

Prøv med en gratis konto

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.