PopNowDocs API
Construire avec l’API
Contenu principal

Médias

Envoyer des images, vidéos et audios de référence par URL, en ligne ou par envoi de fichier, et télécharger les fichiers produits par une tâche.

Beaucoup de modèles prennent des fichiers en entrée : une photo à animer, un clip à prolonger, un échantillon de voix, une chanson. Il existe quatre façons d’en fournir un, et une seule pour récupérer les résultats.

Quatre façons d’envoyer un fichier

Vous avezEnvoyez-le sous forme deIdéal pour
Un lien HTTPS publicL’URL elle-même, par ex. "image_url": "https://…/photo.jpg"Les fichiers que vous hébergez déjà
Une petite image en mémoireUne data URI, par ex. "image_url": "data:image/png;base64,…"Les tests rapides, les images de moins de 1 Mio
Un fichier localUn envoi, puis "image_url": "popnow://f/fil_…"Tout le reste, vidéo et audio compris
Un fichier de votre bibliothèque"image_url": "popnow://a/ast_…"Les fichiers réutilisés dans de nombreuses tâches. Voir Ressources

Quelle que soit la méthode, le fichier va dans le champ que le schéma du modèle prévoit pour lui (image_url, image_urls, video_url, audio_url…).

Liens publics

Le lien doit renvoyer le fichier lui-même et rester accessible sans connexion pendant toute la tâche. Une page de partage d’un service de stockage ou d’un réseau social renvoie une page web, pas le fichier, et la tâche échoue avec invalid_asset ; téléchargez alors le fichier et envoyez-le.

Images en ligne

Les images peuvent être envoyées en data URI Base64 standard avec leur type MIME : JPEG, PNG, WebP ou GIF, 1 Mio décodé et 8 192 pixels par côté au maximum chacune, jusqu’à 16 images par requête, et l’ensemble du corps JSON sous 2 Mio. Le Base64 sans préfixe, le SVG et la vidéo ou l’audio en ligne ne sont pas acceptés. Les images en ligne sont stockées comme des envois de votre compte : l’input de la tâche affiche donc une URI popnow:// au lieu de renvoyer les octets.

Envoyer un fichier

L’envoi se fait en trois appels : demander un ticket, faire un PUT des octets, puis valider.

Demander un ticket

FILE=reference.png
CONTENT_TYPE=image/png
BYTES=$(wc -c < "$FILE" | tr -d ' ')

TICKET=$(curl -s -X POST "https://api.popnow.ai/api/v1/common/upload-url" \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"contentType\": \"$CONTENT_TYPE\", \"bytes\": $BYTES}")
UPLOAD_URL=$(echo "$TICKET" | jq -r .data.uploadUrl)
FILE_ID=$(echo "$TICKET" | jq -r .data.fileId)

La réponse contient fileId, uploadUrl, les headers exacts à envoyer, expiresAt (dans une vingtaine de minutes) et maxBytes. Pas de nom de fichier : les chemins de stockage sont toujours choisis par le serveur.

Faire un PUT des octets

curl -s -o /dev/null -w "%{http_code}\n" -X PUT "$UPLOAD_URL" \
  -H "Content-Type: $CONTENT_TYPE" \
  -H "Content-Length: $BYTES" \
  --data-binary @"$FILE"

Envoyez chaque en-tête du ticket exactement tel quel — tous font partie de la signature — et pas d’en-tête Authorization. Dans un navigateur, omettez Content-Length et envoyez un File ou un Blob de la taille exacte déclarée ; le navigateur le définit pour vous.

Valider

curl -s -X POST "https://api.popnow.ai/api/v1/files/$FILE_ID/commit" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

La validation vérifie la taille, le type et la signature du fichier, puis renvoie l’URI à utiliser :

{
  "code": 200,
  "msg": "success",
  "data": {
    "fileId": "fil_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "status": "ready",
    "uri": "popnow://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "contentType": "image/png",
    "bytes": 402118,
    "width": 1024,
    "height": 1024,
    "expiresAt": "2026-10-17T09:12:00Z"
  },
  "request_id": "req_…"
}

Placez uri dans le champ du modèle, par exemple "image_url": "popnow://f/fil_…". Une URI popnow:// ne fonctionne qu’avec les clés de votre propre compte. Valider deux fois est sans risque.

Limites d’envoi

TypecontentTypeTaille maximaleDurée maximale
Imageimage/jpeg, image/png, image/webp, image/gif10 Mio—
Vidéovideo/mp4, video/webm90 Mio600 secondes
Audioaudio/mpeg, audio/wav90 Mio600 secondes
Poids LoRAapplication/octet-stream (un fichier .safetensors)2 Gio—

Un modèle peut accepter moins ; son schéma le précise champ par champ. Les fichiers envoyés sont temporaires — l’expiresAt de la réponse de validation indique quand le fichier est supprimé —, alors envoyez-les peu avant de créer la tâche. Pour réutiliser un fichier, enregistrez-le dans votre bibliothèque de ressources.

Si une validation répond 40003, les octets envoyés ne correspondent pas au ticket (taille, type ou contenu différents). Demandez un nouveau ticket et renvoyez le fichier.

Télécharger les résultats

Une tâche terminée liste ses fichiers dans output.assets, chacun avec une url prête à l’emploi :

curl -L -o result.mp4 "$(curl -s "https://api.popnow.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $POPNOW_API_KEY" | jq -r '.data.output.assets[0].url')"
  • Le lien est signé et fonctionne une vingtaine de minutes (expiresAt). Ne le stockez pas ; stockez le taskId et relisez la tâche pour obtenir un nouveau lien.
  • N’ajoutez pas votre clé API au téléchargement. Le lien est lui-même l’autorisation : quiconque le détient peut télécharger le fichier jusqu’à son expiration.
  • Pour créer un lien sans relire toute la tâche, appelez POST /api/v1/common/download-url avec { "taskId": "…" } (et éventuellement la key du fichier).

Les fichiers eux-mêmes sont conservés jusqu’à l’heure indiquée dans retention.outputsExpireAt, ou jusqu’à ce que vous purgiez la tâche. Copiez tout ce dont vous aurez besoin au-delà dans votre propre stockage ou dans votre bibliothèque de ressources.

Sur cette page