Sohbet

Görsel, PDF, ses ve video girdisi

Destekleyen modeller için mesaja görsel, PDF, ses ve video ekleyin. Dosyanın kendisini (base64) veya bir bağlantı gönderin: bağlantıları biz alırız; bu nedenle 20 MB boyutuna kadar bir dosyaya yönlendiren, herkese açık herhangi bir https bağlantısı çalışır.

Bir bakışta

Gönderilecek içerik/v1/chat/completions (every model)/v1/messages (Claude)Biçimler
Görselimage_url parçasıimage bloğuPNG, JPEG, WebP, GIF
PDFfile parçasıdocument bloğuPDF
Ses kaydıinput_audio parçasıClaude ses işleyemezWAV, MP3
Bir videovideo_url parçasıClaude video izlemezMP4, MOV, WebM
Metin, kod, CSV, Word, ExcelMesajın içinde metnin kendisiBir text bloğu veya düz metin biçiminde bir documentMetin

Her bölüm, herkese açık bir https bağlantısı veya data:application/pdf;base64,JVBERi0... gibi base64 veri URL'si biçiminde dosyanın kendisini kabul eder. Modelin okuyabildiği türleri dilediğiniz gibi bir arada kullanarak tek mesajda birden fazla dosya gönderebilirsiniz.

Hangi model neyi okur

Tüm sohbet modelleri metin okur. Bu tablo günceldir: her modelin bugün neleri okuyabildiğini gösterir. Bir modele okuyamadığı bir içerik verildiğinde istek hemen unsupported_content ile reddedilir; böylece model görmediği bir dosya hakkında asla yanıt vermez.

Görseller

Bir bağlantı veya veri URL'si içeren bir image_url bölümü ekleyin. PNG, JPEG, WebP ve GIF. Görsel okuyabilen tüm modeller, tek mesajda birden fazla görseli destekler.

import os
from openai import OpenAI
client = 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)

Diskten bir dosya göndermek için dosyayı base64 ile kodlayıp bir veri URL'sine dönüştürün:

import base64, os
from openai import OpenAI
client = 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), bunu kullanan modellere aynen iletilir.

PDF'ler

file_data içinde veri URL'si biçimindeki PDF'yi ve dosya adını içeren bir file bölümü ekleyin. Modeller metni ve destekledikleri durumlarda sayfaları görsel olarak (grafikler, taramalar, tablolar) okur. file_data içinde herkese açık bir bağlantı da kullanabilirsiniz.

import base64, os
from openai import OpenAI
client = 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)

Uzun PDF'ler sayfa başına girdi tokenı tüketir (aşağıdaki ücretlendirme bölümüne bakın), bu yüzden yalnızca ihtiyacınız olan sayfaları gönderin. Birden fazla belge hakkında aynı anda soru sormak için her belgeye ayrı bir file bölümü ekleyin ve belgeleri birbirinden ayıran adlar kullanın.

Word, Excel, metin ve kod

Modeller PDF'leri okur; Word, Excel veya PowerPoint dosyalarını değil. Metin, CSV, JSON, Markdown veya kodu doğrudan mesaja metin olarak ekleyin: normal girdi tokenları olarak ücretlendirilir ve modelin en iyi okuduğu biçimdir. Sayfa düzeni önemliyse (tablolar, grafikler, taramalar) dosyayı PDF olarak dışa aktarıp gönderin. text/plain gibi başka türde bir veri URL'si, nedenini belirten bir hatayla reddedilir.

import os
from pathlib import Path
from openai import OpenAI
client = 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)

Ses

Ses işleyebilen modeller için (tabloya bakın): base64 ses verisini ve wav veya mp3 biçimini içeren bir input_audio bölümü kullanın. input_audio ses verisinin kendisini alır; bağlantı göndermek için bağlantıyı file_data içine koyarak bir file bölümü kullanın. Tarayıcıda yapılan kayıtlar genellikle WebM biçimindedir ve video olarak okunur: yalnızca ses işleyebilen modeller için bunları MP3 veya WAV biçimine dönüştürün.

import base64, os
from openai import OpenAI
client = 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)

Video

Video izleyebilen modeller için: bağlantı veya veri URL'si içeren bir video_url bölümü kullanın (bir file bölümü de olur). MP4, MOV ve WebM. Ses destekleyen modeller videonun sesini de işler; dolayısıyla ne söylendiğini sorabilirsiniz.

import os
from openai import OpenAI
client = 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)

Diskteki bir klip de aynı şekilde, veri URL'si olarak gönderilir:

Python
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}},
]

Tek biçimde gönderin, doğru biçimde iletelim

Laboratuvarlar medyayı farklı biçimlerde kabul eder (hangi laboratuvarın belgelerini okuduğunuza bağlı olarak bir video video_url, image_url veya file bölümü olabilir). Bunlardan herhangi birini gönderin: her modele medyayı okuyabildiği biçimde iletiriz.

Tek mesajda birden fazla dosya

Her dosya için, okunmasını istediğiniz sırayla bir bölüm ekleyin ve metninizde dosyalara sırasıyla veya adıyla atıfta bulunun (“ikinci görsel”, “contract.pdf”). Model her bir türü okuyabildiği sürece görselleri, PDF'leri, sesleri ve videoları bir arada kullanabilirsiniz. Dosyaları etiketlemek için aralarına metin bölümleri ekleyebilirsiniz.

  • Bağlantılar, herkese açık https URL'leri olmalıdır. En fazla üç yönlendirmeyi takip eder ve en fazla 20 saniye bekleriz.
  • İndirilemeyen bir bağlantı, herhangi bir model çağrılmadan önce invalid_url ve döndürdüğü durum koduyla hemen reddedilir.
  • İmzalı bağlantılar (S3, Cloud Storage, kendi görsel bağlantılarımız) geçerli oldukları sürece çalışır.

Anthropic biçimi

/v1/messages üzerinde Claude modelleri, base64 veya url kaynağıyla Anthropic'in image ve document bloklarını kabul eder. Bazı Claude modelleri PDF'leri yalnızca /v1/chat/completions üzerinden okur; /v1/messages adresine bir PDF gönderirseniz hata mesajı, bunun yerine nereye göndermeniz gerektiğini belirtir.

İçerik blokları
[
{ "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." }
]

Sınırlar

SınırDeğer
Tek dosya20 MB
Tek istekteki tüm medya30 MB
İstek gövdesi (base64 boyutu yaklaşık üçte bir artırır)25 MB
İstek başına medya bölümü100
İstek başına bağlantı20

Daha büyük dosyalar için bağlantı gönderin: istek gövdesi boyutuna dahil edilmez. Bir sağlayıcının kendi Files API'sine (file_id) yüklenen dosyalar kullanılamaz; bunun yerine dosyayı veya bağlantısını gönderin.

Hatalar

DurumHataNe zaman
400unsupported_contentModel bu dosya türünü okuyamıyor. Yukarıdaki tablodan bu türü okuyabilen bir model seçin.
400invalid_urlBir bağlantı indirilemedi. Nedeni mesajda belirtilir (durum kodu, zaman aşımı, medya dosyası olmaması).
400invalid_request_errorBir parça data URL veya https bağlantısı değil, boş ya da modellerin okuyamadığı bir türde (Word, düz metin).
413invalid_request_error20 MB üzeri bir dosya, toplam 30 MB üzeri medya veya 25 MB üzeri istek gövdesi.

İlk ikisi hatanın code alanıdır; diğerleri ise type alanıdır ve neyi değiştirmeniz gerektiğini belirten bir mesaj içerir. Hepsi herhangi bir model çağrılmadan önce döner, bu yüzden ücretlendirilmez. Diğer hatalar için Hatalar bölümüne bakın.

Medya nasıl ücretlendirilir

Modeller medyayı girdi tokenlarına dönüştürür; bunlar modelin girdi fiyatıyla ücretlendirilir. Her sağlayıcının hesaplama yöntemi farklıdır; ölçümlerimizde elde ettiğimiz tipik değerler şöyle:

ClaudeGPTGemini
1024 × 1024 boyutunda bir görselyaklaşık 1,400 tokenyaklaşık 1,250 ile 1,650 arasıyaklaşık 1,100
Büyük bir fotoğraf (12 MP)yaklaşık 4,800'e kadarpiksel sayısıyla artaryaklaşık 1,100 ile 1,200 arası
Bir PDF sayfasıyaklaşık 1,600 ile 2,500 arasısayfanın metniyaklaşık 560
Bir saniyelik sesokunmazokunmazyaklaşık 25
Bir saniyelik videookunmazokunmazyaklaşık 100 ile 300 arası

İstek günlüğünüz, her istekte tam olarak neyin hesaba katıldığını gösterir. Tasarruf etmenin en kolay yolu görselleri ihtiyacınız olan boyuta küçültmektir: çoğu model 1024 px boyutundaki bir görseli 4000 px boyutundaki kadar iyi okur.

Aynı görseli veya belgeyi birçok istekte mi gönderiyorsunuz? Konuşmanın başlarına yerleştirin ve bu başlangıç kısmını aynı tutun: prompt önbellekleme özelliği olan modeller, tekrarlanan girdiyi önbellek fiyatıyla ücretlendirir.

Sorunuz mu var, yoksa bir şey mi eksik? Destek ekibimize sorun, genellikle bir dakika içinde e-postayla yanıtlayalım.