Referencia de la API

Política de subida de archivos

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

Sube imágenes, videos, audios y archivos genéricos al almacenamiento de archivos y luego pasa la URL pública devuelta en una solicitud al modelo. El gateway solo crea una política de subida de corta duración y limitada al usuario; los bytes del archivo no pasan por el servidor de la API.

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

#Crear una política de subida

  • kindstringobligatorio

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

  • content_typestringobligatorio

    Un tipo MIME concreto que coincida con kind. file acepta tipos MIME que no son de imagen, video ni audio, como application/pdf o text/plain.

  • sizeintegerobligatorio

    Tamaño exacto del archivo en bytes. Haz GET a este endpoint con la misma clave de API para leer los cuatro límites específicos del usuario.

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

#Subir al almacenamiento de archivos

Envía todas las entradas de fields devueltas y el archivo en un único POST multipart a upload_url. La política caduca a los cinco minutos, está vinculada a una ruta de archivo generada y no puede sobrescribir un archivo existente.

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

#Usar la URL pública

Cuando el almacenamiento de archivos devuelva éxito, usa public_url en el campo multimedia que admita el modelo seleccionado. Que se acepte la subida no garantiza que todos los modelos puedan decodificar todos los formatos; revisa el contrato de solicitud del modelo.

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

#Errores relacionados

Este endpoint informa los fallos mediante error.type en lugar de error.code, así que compara con los valores de abajo junto con el estado.

  • 400 invalid_request_errorkind, content_type y size deben describir un mismo archivo de subida.
  • 401 unauthorizedBearer token no válido o ausente.
  • 413 payload_too_largeEl tamaño de archivo declarado supera el límite de subida configurado.
  • 415 unsupported_media_typecontent_type no coincide con la familia seleccionada: imagen, video, audio o archivo genérico.

Tabla completa de códigos de error →

¿Sigues con el problema?

Envíanos el ID de solicitud o el mensaje de error y lo revisaremos.