Referência da API

Política de upload de arquivos

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

Envie imagens, vídeos, áudios e arquivos genéricos para o armazenamento de arquivos e depois passe a URL pública retornada em uma requisição de modelo. O gateway apenas cria uma política de upload de curta duração, restrita ao usuário; os bytes do arquivo não passam pelo servidor da API.

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

#Criar uma política de upload

  • kindstringobrigatório

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

  • content_typestringobrigatório

    Um tipo MIME concreto compatível com kind. file aceita tipos MIME que não sejam de imagem/vídeo/áudio, como application/pdf ou text/plain.

  • sizeintegerobrigatório

    Tamanho exato do arquivo em bytes. Faça GET neste endpoint com a mesma chave de API para ler os quatro limites específicos do usuário.

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

#Enviar para o armazenamento de arquivos

Envie todas as entradas de fields retornadas junto com o arquivo em um único POST multipart para upload_url. A política expira após cinco minutos, fica vinculada a um caminho de arquivo gerado e não pode sobrescrever um arquivo 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 a URL pública

Depois que o armazenamento de arquivos retornar sucesso, use public_url no campo de mídia suportado pelo modelo escolhido. Aceitar o upload não garante que todo modelo consiga decodificar todo formato de mídia; consulte o contrato de requisição do modelo.

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

#Erros relacionados

Este endpoint informa falhas por error.type em vez de error.code, então verifique os valores abaixo junto com o status.

  • 400 invalid_request_errorkind, content_type e size precisam descrever um único arquivo de upload.
  • 401 unauthorizedBearer token inválido ou ausente.
  • 413 payload_too_largeO tamanho de arquivo declarado excede o limite de upload configurado.
  • 415 unsupported_media_typecontent_type não corresponde à família de imagem, vídeo, áudio ou arquivo genérico selecionada.

Tabela completa de códigos de erro →

Ainda com problemas?

Envie para nós o ID da requisição ou a mensagem de erro e vamos investigar.