Conversa
Imagens, PDFs, áudio e vídeo como entrada
Inclua imagens, PDFs, áudio e vídeo numa mensagem para os modelos que os conseguem ler. Envie o próprio ficheiro (base64) ou uma ligação: obtemos os ficheiros através das ligações, pelo que funciona qualquer ligação pública https para um ficheiro até 20 MB.
Resumo
Cada parte aceita uma ligação pública https ou o próprio ficheiro como um URL de dados em base64, como data:application/pdf;base64,JVBERi0.... Uma mensagem pode incluir vários ficheiros, em qualquer combinação que o modelo consiga ler.
O que cada modelo consegue ler
Todos os modelos de chat leem texto. Esta tabela é atualizada em tempo real: mostra o que cada modelo consegue ler hoje. Se um modelo receber algo que não consegue ler, rejeita-o de imediato com unsupported_content, pelo que nunca responde sobre um ficheiro que não viu.
Imagens
Adicione uma parte image_url com uma ligação ou um URL de dados. PNG, JPEG, WebP e GIF. Todos os modelos que leem imagens aceitam várias imagens numa só mensagem.
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)response = client.chat.completions.create( model="gemini-3.7-flash", messages=[ { "role": "user", "content": [ { "type": "text", "text": "What's in this picture? One sentence." }, { "type": "image_url", "image_url": { "url": "https://zurelay.com/examples/gpt-image-2.5-flare/watch-800.webp" } } ] } ],)print(response.choices[0].message.content)Para enviar um ficheiro do disco, codifique-o em base64 num URL de dados:
import base64, osfrom openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"])with open("receipt.jpg", "rb") as f: data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()response = client.chat.completions.create( model="claude-sonnet-5-5", messages=[{ "role": "user", "content": [ {"type": "text", "text": "What's the total on this receipt?"}, {"type": "image_url", "image_url": {"url": data_url}}, ], }],)print(response.choices[0].message.content)detail (low, high, auto) é encaminhado sem alterações para os modelos que o utilizam.
PDFs
Adicione uma parte file com o PDF como URL de dados em file_data e o nome do ficheiro. Os modelos leem o texto e, quando possível, as páginas como imagens (gráficos, digitalizações, tabelas). Também pode usar uma ligação pública em file_data.
import base64, osfrom openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"])with open("contract.pdf", "rb") as f: pdf = "data:application/pdf;base64," + base64.b64encode(f.read()).decode()response = client.chat.completions.create( model="gemini-3.7-flash", messages=[{ "role": "user", "content": [ {"type": "text", "text": "Who are the parties, and how can the contract be ended?"}, {"type": "file", "file": {"filename": "contract.pdf", "file_data": pdf}}, ], }],)print(response.choices[0].message.content)Os PDFs longos consomem tokens de entrada por página (consulte a secção de faturação abaixo), por isso envie apenas as páginas de que precisa. Para fazer perguntas sobre vários documentos de uma só vez, adicione uma parte file para cada um, com nomes que os distingam.
Word, Excel, texto e código
Os modelos leem PDFs, não ficheiros Word, Excel ou PowerPoint. Insira texto, CSV, JSON, Markdown ou código diretamente na mensagem como texto: é faturado como tokens de entrada normais e é o formato que o modelo lê melhor. Quando a disposição dos elementos importa (tabelas, gráficos, digitalizações), exporte o ficheiro para PDF e envie-o nesse formato. Um URL de dados de qualquer outro tipo, como text/plain, é rejeitado com um erro que indica o motivo.
import osfrom pathlib import Pathfrom openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"])notes = Path("meeting-notes.md").read_text()sales = Path("sales.csv").read_text()response = client.chat.completions.create( model="deepseek-v4.1-flash", messages=[{ "role": "user", "content": f"Summarize the notes, then total the sales by region.\n\n" f"<notes>\n{notes}\n</notes>\n\n<sales>\n{sales}\n</sales>", }],)print(response.choices[0].message.content)Áudio
Para modelos que ouvem áudio (consulte a tabela): uma parte input_audio com o áudio em base64 e o respetivo formato, wav ou mp3. input_audio aceita o próprio áudio; para uma ligação, use uma parte file com a ligação em file_data. As gravações feitas num navegador são normalmente WebM, que é lido como vídeo: converta-as para MP3 ou WAV para modelos que apenas ouvem áudio.
import base64, osfrom openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"])with open("call.mp3", "rb") as f: audio = base64.b64encode(f.read()).decode()response = client.chat.completions.create( model="gemini-3.7-flash", messages=[{ "role": "user", "content": [ {"type": "text", "text": "Transcribe this call, then list the action items."}, {"type": "input_audio", "input_audio": {"data": audio, "format": "mp3"}}, ], }],)print(response.choices[0].message.content)Vídeo
Para modelos que veem vídeo: uma parte video_url com uma ligação ou um URL de dados (uma parte file também funciona). MP4, MOV e WebM. Os modelos que suportam áudio também leem a faixa de áudio, pelo que pode perguntar o que é dito.
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)response = client.chat.completions.create( model="gemini-3.7-flash", messages=[ { "role": "user", "content": [ { "type": "text", "text": "Describe what happens, and transcribe anything that's said." }, { "type": "video_url", "video_url": { "url": "https://example.com/clip.mp4" } } ] } ],)print(response.choices[0].message.content)Um vídeo do disco é enviado da mesma forma, como URL de dados:
with open("clip.mp4", "rb") as f: video = "data:video/mp4;base64," + base64.b64encode(f.read()).decode()content = [ {"type": "text", "text": "What happens in this clip?"}, {"type": "video_url", "video_url": {"url": video}},]Um formato à entrada, o formato certo à saída
video_url, image_url ou file, consoante a documentação que consultar). Envie qualquer um deles: entregamos os conteúdos a cada modelo no formato que consegue ler.Vários ficheiros numa só mensagem
Adicione uma parte para cada ficheiro, pela ordem em que pretende que sejam lidos, e refira-os no texto pela ordem ou pelo nome (“a segunda imagemm”, “contract.pdf”). Pode combinar imagens, PDFs, áudio e vídeo, desde que o modelo consiga ler cada tipo. Pode inserir partes de texto entre os ficheiros para os identificar.
Ligações
- As ligações têm de ser URLs
httpspúblicos. Seguimos até três redirecionamentos e aguardamos até 20 segundos. - Se não for possível descarregar o conteúdo de uma ligação, esta é rejeitada de imediato com
invalid_urle o código de estado recebido, antes de qualquer modelo ser chamado. - As ligações assinadas (S3, Cloud Storage, as nossas próprias ligações de imagens) funcionam enquanto forem válidas.
Formato da Anthropic
Em /v1/messages, os modelos Claude aceitam os blocos da Anthropic: image e document, com uma origem base64 ou url. Alguns modelos Claude só leem PDFs através de /v1/chat/completions; se enviar um para /v1/messages, o erro indica para onde o deve enviar.
[ { "type": "image", "source": { "type": "base64", "media_type": "image/png", "data": "iVBORw0KGgo..." } }, { "type": "document", "source": { "type": "url", "url": "https://example.com/report.pdf" } }, { "type": "document", "source": { "type": "base64", "media_type": "application/pdf", "data": "JVBERi0..." } }, { "type": "text", "text": "Compare the chart with the report's conclusion." }]Limites
Para ficheiros maiores, envie uma ligação: não conta para o corpo do pedido. Os ficheiros carregados para a Files API de um laboratório (file_id) não podem ser usados; envie o ficheiro ou uma ligação.
Erros
Os dois primeiros correspondem a code do erro; os restantes, a type, com uma mensagem que indica o que alterar. Todos são devolvidos antes de se chamar qualquer modelo, pelo que não têm qualquer custo. Consulte Erros para conhecer os restantes.
Como é faturado o conteúdo multimédia
Os modelos convertem o conteúdo multimédia em tokens de entrada, faturados ao preço de entrada do modelo. Cada laboratório tem o seu método de contagem; estes são valores típicos que medimos:
O registo de pedidos mostra exatamente o que foi contabilizado em cada pedido. Reduzir as imagemns ao tamanho necessário é a forma mais simples de poupar: a maioria dos modelos lê uma imagem de 1024 px tão bem como uma de 4000 px.
Tem dúvidas ou falta alguma coisa? Contacte a nossa equipa de apoio e responderemos por email, normalmente num minuto.