aisplice

Riferimento API

Policy di upload dei file

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

Carica immagini, video, audio e file generici nello storage dei file, poi passa l'URL pubblico restituito a una richiesta al modello. Il gateway crea solo una policy di upload temporanea e legata all'utente; i byte del file non passano dal server API.

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

#Crea una policy di upload

  • kindstringobbligatorio

    "image", "video", "audio" o "file".

  • content_typestringobbligatorio

    Un tipo MIME concreto coerente con kind. file accetta tipi MIME diversi da immagine/video/audio, come application/pdf o text/plain.

  • sizeintegerobbligatorio

    Dimensione esatta del file in byte. Chiama questo endpoint in GET con la stessa chiave API per leggere tutti e quattro i limiti specifici dell'utente.

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"
}

#Carica nello storage dei file

Invia tutte le voci di fields restituite e il file in un'unica POST multipart a upload_url. La policy scade dopo cinque minuti, è legata a un solo percorso di file generato e non può sovrascrivere un file esistente.

# 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"

#Usa l'URL pubblico

Quando lo storage dei file conferma il successo, usa public_url nel campo media supportato dal modello selezionato. L'accettazione dell'upload non garantisce che ogni modello sappia decodificare ogni formato; controlla il contratto di richiesta del modello.

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

#Errori correlati

Questo endpoint segnala gli errori tramite error.type anziché error.code, quindi confronta i valori qui sotto insieme allo stato.

  • 400 invalid_request_errorkind, content_type e size devono descrivere un unico file da caricare.
  • 401 unauthorizedBearer token non valido o mancante.
  • 413 payload_too_largeLa dimensione dichiarata del file supera il limite di upload configurato.
  • 415 unsupported_media_typecontent_type non corrisponde alla famiglia selezionata: immagine, video, audio o file generico.

Tabella completa dei codici di errore →

Non hai ancora risolto?

Inviaci l'ID richiesta o il messaggio di errore e verificheremo.