Référence API

Politique d'envoi de fichiers

GET/v1/media/upload-policy
POST/v1/media/upload-policy

Envoyez des images, vidéos, fichiers audio et fichiers génériques vers le stockage de fichiers, puis transmettez l'URL publique renvoyée dans une requête de modèle. La passerelle se contente de créer une politique d'envoi de courte durée, propre à l'utilisateur ; les octets du fichier ne transitent pas par le serveur API.

GET /v1/media/upload-policy
{
  "image_max_bytes": 52428800,
  "video_max_bytes": 209715200,
  "audio_max_bytes": 104857600,
  "file_max_bytes": 52428800
}

#Créer une politique d'envoi

  • kindstringobligatoire

    "image", "video", "audio" ou "file".

  • content_typestringobligatoire

    Un type MIME précis correspondant à kind. file accepte les types MIME autres qu'image/vidéo/audio, comme application/pdf ou text/plain.

  • sizeintegerobligatoire

    Taille exacte du fichier en octets. Appelez cet endpoint en GET avec la même clé API pour lire les quatre limites propres à l'utilisateur.

curl https://www.aisplice.store/v1/media/upload-policy \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "image",
    "content_type": "image/avif",
    "size": 1048576
  }'
policy.json
{
  "upload_url": "https://uploads.example.com/",
  "public_url": "https://media.example.com/media/user-upload/image/...",
  "fields": {
    "key": "media/user-upload/image/...",
    "policy": "...",
    "...": "Pass every returned field unchanged"
  },
  "expires_at": "2026-07-25T10:05:00Z"
}

#Envoyer vers le stockage de fichiers

Envoyez toutes les entrées fields renvoyées ainsi que le fichier dans un seul POST multipart vers upload_url. La politique expire au bout de cinq minutes, est liée à un chemin de fichier généré et ne peut pas écraser un fichier existant.

# Save the policy response as policy.json first.
upload_args=()
while IFS=$'\t' read -r key value; do
  upload_args+=(-F "$key=$value")
done < <(jq -r '.fields | to_entries[] | [.key, .value] | @tsv' policy.json)

# Keep the file field last for storage compatibility.
curl "$(jq -r .upload_url policy.json)" \
  "${upload_args[@]}" \
  -F "file=@reference.avif"

#Utiliser l'URL publique

Une fois que le stockage de fichiers a confirmé l'envoi, utilisez public_url dans le champ média pris en charge par le modèle choisi. L'acceptation de l'envoi ne garantit pas que chaque modèle sache décoder chaque format de média ; consultez le contrat de requête du modèle.

image-task.json
{
  "model": "gpt-image-2",
  "prompt": "Turn this reference into a watercolor",
  "images": ["https://media.example.com/media/user-upload/image/..."]
}

#Erreurs associées

Cet endpoint signale les échecs via error.type plutôt que error.code : basez-vous sur les valeurs ci-dessous, avec le statut.

  • 400 invalid_request_errorkind, content_type et size doivent décrire un seul et même fichier.
  • 401 unauthorizedJeton bearer invalide ou manquant.
  • 413 payload_too_largeLa taille de fichier déclarée dépasse la limite d'envoi configurée.
  • 415 unsupported_media_typecontent_type ne correspond pas à la famille sélectionnée : image, vidéo, audio ou fichier générique.

Table complète des codes d'erreur →

Toujours bloqué ?

Envoyez-nous l'ID de requête ou le message d'erreur, et nous examinerons le problème.