Maximize AI API — Dokümantasyon

Maximize AI API

Claude, GPT, Gemini ve ekonomik açık modellere TEK anahtarla erişim — token bazlı fiyatlandırmalı REST API. OpenAI uyumlu format; akıllı yönlendirme, sağlayıcı düşerse otomatik yedek ve önbellekle maliyet düşürme dahil.

Base URL: https://www.themaximize.ai

Kimlik Doğrulama

Her istekte X-API-Key header'ı ile API key'inizi gönderin.

curl https://www.themaximize.ai/v1/chat/completions \ -H "X-API-Key: sk-your-api-key" \ -H "Content-Type: application/json" \ -d '{...}'
API key'inizi asla paylaşmayın veya client-side kodda kullanmayın.

Modeller & Fiyatlar

Tüm modeller aynı endpoint üzerinden kullanılır. model parametresiyle seçim yapın.

claude-haiku-4-5
Hızlı ve ekonomik — chatbot, sınıflandırma, özet
Input $2 · Output $10
/ 1M token
claude-sonnet-5
Dengeli — kod yazma, analiz, uzun içerik
Input $6 · Output $30
/ 1M token
claude-opus-5
En güçlü — karmaşık görevler, araştırma, akıl yürütme
Input $10 · Output $50
/ 1M token
claude-fable-5
Zirve akıl yürütme — en zor, uzun soluklu görevler
Input $20 · Output $100
/ 1M token

🌐 OpenAI & Google

gpt-5.6-sol
OpenAI amiral gemisi
Input $10 · Output $60
/ 1M token
gpt-5.6-luna
Hızlı & ucuz GPT
Input $2 · Output $12
/ 1M token
gemini-3.6-flash
Google — güçlü, güncel, uzun bağlam
Input $3 · Output $15
/ 1M token

💚 Ekonomi Modelleri

Açık ağırlıklı modeller — bütçe dostu, yüksek hacimli işler için. Claude'dan çok daha ucuz.

deepseek-v3.2
Ultra ucuz & hızlı — basit görevler, yüksek hacim
Input $0.60 · Output $0.90
/ 1M token
deepseek-v4-pro
Kod & akıl yürütme — açık ağırlıklı üst seviye
Input $2.60 · Output $5.20
/ 1M token
kimi-k2.6
Frontier açık model — ajanik görevler, kod, araştırma (256K bağlam)
Input $1.50 · Output $7
/ 1M token

Emekliye ayrılan model id'leri (gpt-4o, gemini-2.5-flash, llama-3.3-70b, claude-sonnet-4-6 vb.) çalışmaya devam eder — istek otomatik olarak halef modele yönlendirilir.

Chat Completions

POST /v1/chat/completions
Claude modelleri ile sohbet tamamlama isteği gönderir.

İstek Parametreleri

ParametreTipAçıklama
messages*arraySohbet mesajları dizisi
model?stringModel ID (varsayılan: claude-haiku-4-5)
max_tokens?integerMaksimum çıktı token (varsayılan: 512)
temperature?floatYaratıcılık 0-1 arası (varsayılan: 0.7). Claude 5 ailesi (Sonnet 5 / Opus 5 / Fable 5) bu parametreyi kabul etmez — gönderilirse yok sayılır.
stream?booleanAkış modu (varsayılan: false)

Örnek İstek

{ "model": "claude-haiku-4-5", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Write a hello world in Python."} ], "max_tokens": 200, "temperature": 0.7 }

Örnek Yanıt

{ "id": "msg_01abc...", "object": "chat.completion", "model": "claude-haiku-4-5", "choices": [{ "index": 0, "message": { "role": "assistant", "content": "print('Hello, World!')" }, "finish_reason": "end_turn" }], "usage": { "prompt_tokens": 28, "completion_tokens": 12, "total_tokens": 40 } }

Billing

GET /billing/usage
Kullanım istatistiklerinizi ve kalan bakiyenizi görüntüler.
curl https://www.themaximize.ai/billing/usage \ -H "X-API-Key: sk-your-api-key"

Araçlar (Function Calling)

Kendi fonksiyonlarınızı tanımlayın — Claude hangisini ne zaman çağıracağına karar verir, siz kendi sisteminizde çalıştırıp sonucu geri gönderirsiniz. OpenAI tools formatıyla birebir uyumlu.

Akış: 1) Araçlarınızı gönderin → 2) Claude bir aracı çağırır (tool_calls) → 3) Fonksiyonu çalıştırıp sonucu tool rolüyle geri gönderin → 4) Claude nihai cevabı üretir.

Örnek (OpenAI SDK)

from openai import OpenAI import json client = OpenAI(api_key="sk-...", base_url="https://www.themaximize.ai/v1") def get_weather(city): return f"{city}: 22C, sunny" # your own function tools = [{ "type": "function", "function": { "name": "get_weather", "description": "Returns the weather for a given city", "parameters": { "type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"], }, }, }] messages = [{"role": "user", "content": "What is the weather in Ankara?"}] while True: resp = client.chat.completions.create( model="claude-haiku-4-5", messages=messages, tools=tools) msg = resp.choices[0].message if not msg.tool_calls: print(msg.content) # final answer break messages.append(msg) for tc in msg.tool_calls: args = json.loads(tc.function.arguments) result = get_weather(**args) # run the function messages.append({"role": "tool", "tool_call_id": tc.id, "content": result})
Not: Araç kullanırken stream: true desteklenmez — tam tool_calls gerekir.

Webhooks

Dashboard'dan webhook URL'nizi kaydedin. Bakiye olaylarında sisteminize imzalı POST isteği göndeririz. Her istek X-Webhook-Signature ve X-Webhook-Timestamp header'larıyla gelir.

Olay Tipleri

OlayAçıklama
balance.lowBakiye $2.00 altına düştü
balance.depletedBakiye sıfırlandı
webhook.testTest bildirimi

Örnek Payload

{ "event": "balance.low", "created": 1719273600, "data": { "name": "Customer Name", "balance_usd": 1.85, "threshold": 2.0 } }

İmza Doğrulama (Python)

import hmac, hashlib def verify(secret, timestamp, body, signature): msg = f"{timestamp}.{body}".encode() expected = hmac.new(secret.encode(), msg, hashlib.sha256).hexdigest() return hmac.compare_digest(expected, signature) # Flask example: # sig = request.headers["X-Webhook-Signature"] # ts = request.headers["X-Webhook-Timestamp"] # verify(MY_SECRET, ts, request.get_data(as_text=True), sig)

Hukuk API — İçtihat Denetimi, Taslak & Hesap Motoru

Atıflı hukuk araştırması, kendi şablonlarınızdan taslak üretimi, künye doğrulama ve deterministik hesap motoru. Platformun ayırt edici kısmı burada: model bir künye üretirse doğrulanır, doğrulanamazsa açıkça işaretlenir — "teyit edilemedi" ile "yok" ayrı statülerdir. Tüm uçlar X-API-Key ister ve YALNIZ kendi arşivinizde çalışır.

POST /kb/upload  ·  GET /kb/docs  ·  DELETE /kb/docs/{doc_id}
Şablon hafızası: kendi dilekçe/sözleşme örneklerinizi yükleyin, taslak üretimi onların üslubunu kullansın. Gövde: {"doc_name":"kira-sozlesmesi.docx", "text":"..."}{"doc_id", "doc_name", "chunks"}. Belge yapı-farkındalıklı parçalanır (MADDE/başlık sınırları korunur).

Ücret: bu üç uç ücretsizdir — sorgu hakkından düşmez, token faturası çıkarmaz.

Hatalar: 400 boş belge · 502 embedding servisi yanıt vermedi.
POST /kb/draft
Şablon-farkındalıklı belge/dilekçe taslağı. Gövde: {"query":"Kira tespit davası dilekçesi hazırla...", "model":"claude-sonnet-5"}. Kendi arşivinizden en ilgili 6 parça bağlam olarak kullanılır.

Otomatik atıf denetimi: taslak üretilir üretilmez künyeleri denetlenir ve sonuç audit alanında döner — uydurma künye denetimsiz Word'e gitmez. Yanıt: {"draft", "used_templates", "audit"}.

Künye kuralı: sistem promptu tam künye (Yargıtay 9. HD, E.2024/1234, K.2024/5678, T.10.05.2024) zorunlu kılar; künyesini bilmediği kararı ATFETMEZ.

KVKK: kayda yalnız talep metni yazılır — yüklediğiniz dosya bağlamı saklanmaz.
POST /kb/audit
Atıf Denetimi — dışarıdan gelen bir metindeki (ChatGPT çıktısı, karşı taraf dilekçesi, kendi taslağınız) künyeleri doğrular. Gövde: {"text":"...", "model":"claude-sonnet-5"}.

Yanıt: citations[] — her biri {type, ref, context, daire, status, note, source} (type: karar | aym | madde); counts{verified, unverified, notfound}; summary; from_ledger (defterden gelen, ücretsiz); from_official (resmî karar arama ucundan doğrulanan); web_calls.

Statüler: verified = kaynak URL ile doğrulandı · unverified = teyit edilemedi (kararın var olmadığı anlamına GELMEZ — yayımlanmamış kararlar kamuya açık kaynaklarda bulunmaz) · notfound = bulunamadı ya da deterministik tutarsızlık (ör. esas yılı karar yılından büyük, kapatılmış daireye kapanış sonrası tarihli karar).

Maliyet kademeli: önce defter önbelleği (ücretsiz) → deterministik imkânsızlık denetimi (ücretsiz) → resmî karar arama ucu (web hakkından DÜŞMEZ) → yalnız gerekirse web aramalı model. Web kullanılırsa tier planlarda aylık web hakkından düşer.
POST /kb/clause-compare
Önünüze gelen sözleşmeyi kendi arşivinizle madde madde kıyaslar: sizin standart hükmünüzden sapan yerleri gösterir. Gövde: {"text":"...", "model":"claude-sonnet-5"}{"comparison", "clauses", "archive_chunks"}. En çok 12 madde işlenir; sonda en riskli 3 madde özetlenir.

Hatalar: 400 metin boş · 400 arşiv boş (önce /kb/upload ile kendi belgelerinizi yükleyin) · 503 karşılaştırma servisi kullanılamıyor.
GET /kb/ledger/stats  ·  GET /kb/ledger/tutanak
Atıf Defteri — doğrulanan her künyenin append-only, hash-zincirli kaydı (prev_hash → entry_hash), yani sonradan sessizce değiştirilemez.

/stats{total_checks, unique_refs, by_status, since}. /tutanak?refs=E.2021/1 K.2021/2,TBK m.299{office, items[], count, chain, generated_at, disclaimer}; refs boşsa hesabın tüm kayıtları döner. chain.ok=false ise zincirin kırıldığı satır broken_at ile bildirilir.

Ücret: ikisi de ücretsiz. Defter TTL'i: doğrulanmış/bulunamamış 180 gün, teyit edilemeyen 30 gün — bayat kayıt yeniden doğrulanır.

Kapsam: tutanak mahkeme kanıtı değildir; ne zaman, hangi kaynağa karşı denetlendiğini gösteren bir iz kaydıdır (yanıttaki disclaimer alanı bunu taşır).
POST /kb/draft/used  ·  GET /kb/style-stats
Üslup öğrenme döngüsü: ürettiğiniz taslağı düzenleyip kullandıysanız nihai metni geri gönderin — sistem sizin üslubunuzu öğrenir. Gövde: {"prompt", "generated", "final", "doc_kind"}{"stored", "edit_ratio", "learned_chunks"}. edit_ratio 0 = hiç değiştirmediniz.

Rıza kapısı: içerik saklama rızanız kapalıysa hiçbir şey yazılmaz (stored:false) — açmak için /privacy/content-consent.

/kb/style-stats öğrenme eğrisini verir: {count, median_edit_ratio, first_half, last_half, trend}. Düzeltme oranı zamanla düşüyorsa trend "iyileşiyor" döner.
POST /legal/calc
Deterministik hesap motoru — LLM YOK. Aynı girdi her zaman aynı sonucu verir; model aritmetiği devrede değildir.

Ücretsizdir: sorgu hakkından düşmez, token faturası çıkarmaz. Sohbet hattında rakam hesaplatmak yerine bu ucu çağırın — hukuk preset'i de kullanıcıyı buraya yönlendirir.

Gövde: {"type":"kidem", "params":{...}}. type değerleri: kidem, ihbar, faiz, zamanasimi, brutten_net, fazla_mesai, yillik_izin, ise_iade.

params: kidem / ihbar: ise_giris, cikis, aylik_brut · faiz: anapara, baslangic, bitis, faiz_tipi (yasal|avans|ozel) · zamanasimi: olay_tarihi, alacak_turu (iscilik_tazminat|ucret|genel_alacak|donemsel|haksiz_fiil|kira_alacagi) · brutten_net: aylik_brut, ay, kumulatif_matrah · fazla_mesai: aylik_brut_ciplak, haftalik_fiili, hafta_sayisi · yillik_izin: ise_giris, cikis, kullanilan_gun · ise_iade: aylik_brut_giydirilmis, guvence_ay (4-8).

DİKKAT — iki farklı yanıt şekli var. kidem/ihbar/faiz/zamanasimi düz alanlar döner ve tür anahtarı tur'dur (ör. {tur:"kidem", brut, damga, net, tavan_uygulandi}). brutten_net/fazla_mesai/yillik_izin/ise_iade ise {tip, sonuc, kalemler{...}} döner. Alan adını ona göre okuyun.

Her yanıtta ortak: hesap_dokumu[] (adım adım), dayanak (yasal madde künyesi), uyarilar[], ve uç tarafından eklenen tablo_guncelleme + disclaimer. Oran/tavan tabloları kapsam dışı bir tarihe denk gelirse motor uydurmaz: son bilinen değeri kullanır ve uyarilar içinde açıkça söyler.
GET /privacy/content-consent  ·  POST /privacy/content-consent  ·  DELETE /privacy/stored-content
KVKK kontrolleri. POST gövdesi: {"enabled":true, "improve":false, "purge":false}enabled içerik saklama talimatı, improve ürün geliştirme için ayrı ve açık rıza (hizmet şartı değildir), purge talimat kapatılırken eski kayıtların da silinmesi. DELETE /privacy/stored-content (KVKK m.11/e) saklanan düzeltme kayıtlarını siler → {"removed": n}. Her değişiklik zaman damgası ve IP ile denetim kaydına yazılır.
POST /audit/v1/chat/completions
Dış denetim adaptörü — OpenAI şeklinde yanıt döner, yani mevcut istemcinizi base_url=https://www.themaximize.ai/audit/v1 ile bağlayabilirsiniz. Gövde: {"messages":[...], "model":"auto", "preset":"legal"}; preset ?preset= ile de verilebilir. Yanıt, standart choices[0].message.content alanına ek olarak maximize{preset, model_used, web_calls, route, web_throttled} taşır.

Güvenlik: dış sistem promptu enjekte edilemez — gövdedeki role:"system" mesajları sunucuda filtrelenir.

Emlak API — İlan Havuzu & Co-Brokerage

Kendi yüklediğiniz ilanlardan oluşan havuz + doğal dil arama + ofisler-arası ortak havuz. Sahibinden kazınmaz; veri sizin envanteriniz, iletişim bilgileri sahiplerinin bilgisi dahilinde eklenir. Tüm uçlar X-API-Key ister ve YALNIZ kendi havuzunuzda çalışır.

POST /listings  ·  GET /listings  ·  POST /listings/bulk
İlan ekle / listele / CSV-Excel toplu yükle. Alanlar: title, kind (kiralik|satilik), city, district, rooms, price, area_m2, features (virgüllü), description, contact, eids_no, property_type (konut|dukkan|ofis|depo|arsa|villa), zoning, izin_notu. Şablon: GET /listings/template.csv
POST /listings/search
Doğal dil arama (puanlı eşleştirme + güven rozeti + fiyat bağlamı). Gövde: {"query":"Kadıköy'de 3+1 kiralık", "mode":"", "scope":"kendi"}.

scope: "kendi" (varsayılan — yalnız kendi havuz) | "ortak" (co-brokerage: paylaşılan cross-office ilanlar da aranır). Ortak havuzu görebilmek için en az bir AKTİF ilanınızı paylaşmış olmanız gerekir (karşılıklılık). Yanıttaki scope_applied alanı hangi kapsamın gerçekten uygulandığını söyler.

KVKK: cross-office sonuçlarda contact maskeli, açıklamadaki gömülü telefon/e-posta temizlenmiş, eids_no gizli döner; owner_office ilan sahibinin ofis adıdır (atıf).
POST /listings/{id}/share  ·  POST /listings/{id}/unshare
İlanı ortak (co-brokerage) havuza kat / geri çek. Yalnız KENDİ ilanınız; rıza anında geri alınabilir.
POST /listings/{id}/verify
EİDS beyanını web ile teyit eder → güven rozeti "beyan"dan "teyitli"ye yükselir. Önce deterministik format denetimi (geçersiz EİDS web'e gitmeden reddedilir — ücretsiz). Web araması tier planlarda aylık web hakkından düşer; token modelinde küçük surcharge uygulanır.
POST /listings/{id}/lead
İlana ilgilenen müşteri kaydet. Kendi ilanınızda: müşteri iletişimi kendi havuzunuzda saklanır. Ortak (paylaşılan) başka ofisin ilanında — broker-aracılı: lead ilan sahibine source="cobroke" + sizin ofis atfınızla gider; müşteri numarası ASLA karşı tarafa aktarılmaz (sizin havuzunuzda cobroke_out kaydında kalır). Sahip ofis kabul/ret eder: POST /listings/leads/{lead_id}/cobroke {"action":"accept"|"reject"} — atıf ancak kabulle geçerli sayılır.
GET /listings/leads  ·  /listings/today  ·  /listings/demand-counts
Lead/talep listesi (co-broke durumlarıyla) · günlük "Bugün" paneli (sıcak lead + bayat ilan + fiyat sapması) · ilan başına uyan talep sayıları. Diğer: /listings/{id}/status (aktif|satildi|pasif), /listings/{id}/refresh (tazelik teyidi), /listings/parse (serbest metinden ilan çıkarımı).

Ticaret API — Tedarikçi/Alıcı Havuzu

Kendi yüklediğiniz tedarikçi/alıcı kayıtları + web-destekli araştırma. Havuz-dışı iletişim uydurulmaz; cevaptaki havuzla uyuşmayan telefon/e-posta/domain sunucu tarafında yakalanıp uyarıyla işaretlenir.

POST /suppliers  ·  GET /suppliers  ·  POST /suppliers/bulk
Firma ekle / listele / toplu yükle (birlik-üye şablonu: GET /suppliers/template-birlik.csv). Alanlar: name, role (satici|alici), product, country, city, contact, website, description.
POST /suppliers/search
Doğal dil arama: önce havuz, gerekirse web araştırması. Gövde: {"query":"Bursa'da örme kumaş üreticisi"}. Web araması tier planlarda aylık web hakkından düşer.
POST /suppliers/{id}/verify
Firmayı web'de araştırıp doğrular (DOGRULANDI | SUPHELI | BULUNAMADI) → verified rozeti. Emin değilse doğrulanmış GÖSTERMEZ (uydurmaz). /suppliers/parse: serbest metinden firma alanı çıkarımı.

Muhasebe API — Ön-Defter

Fatura/fiş metninden gider-gelir kaydı çıkarımı ve deterministik KDV/stopaj hesabı. İş bölümü nettir: yapay zeka yalnız METİNDEN ALAN ÇIKARIR, rakamı MOTOR hesaplar. Model aritmetiği hiçbir zaman otorite değildir — çıkardığı tutarlar ayrıca aritmetik olarak denetlenir. Ön-muhasebe defteridir; beyanname aracı değildir.

POST /expenses/parse
Fatura/fiş metnini yapılandırılmış kayda çevirir. Gövde: {"text":"...", "model":"claude-sonnet-5"}.

KAYDETMEZ — öneri döner, kullanıcı onaylayıp POST /expenses ile kaydeder. Yanıt: çıkarılan alanlar + warnings[].

İki güvence: (1) modelin doldurmadığı tutarlar motorla türetilir — yalnız KDV dahil toplam varsa matrah ayrıştırılır, yalnız matrah varsa KDV eklenir; (2) tutarlar tutarlılık denetiminden geçer — net × oran ≈ KDV ve net + KDV ≈ toplam uymuyorsa beklenen değeri içeren uyarı döner ve onay ekranında görünür.
POST /expenses  ·  GET /expenses  ·  DELETE /expenses/{id}
Kayıt ekle / listele / sil. Alanlar: kind (gider|gelir), date (YYYY-MM-DD), vendor, category, description, net (KDV hariç matrah), kdv_rate (0|1|10|20), kdv, total (KDV dahil), stopaj.

category değerleri: kira, yemek, ulasim, ofis, demirbas, hizmet, pazarlama, personel, vergi_resmi, diger.

GET /expenses?month=YYYY-MM ile aya göre filtrelenir. Eksik tutarlar burada da motorla tamamlanır ve tutarlılık uyarıları warnings alanında döner.
GET /expenses/summary?month=YYYY-MM
Aylık özet — tamamen deterministik, LLM yok. Yanıt: {month, count, gelir_net, gider_net, kar_net, kdv_hesaplanan, kdv_indirilecek, kdv_odenecek, kdv_devreden, stopaj_toplam, kategori_dagilimi{}}.

Hesaplanan ve indirilecek KDV farkı pozitifse kdv_odenecek, negatifse kdv_devreden dolar — ikisi aynı anda dolmaz. month zorunludur ve YYYY-MM biçiminde olmalıdır (aksi hâlde 400).

Yanıt, her yüzeyde olduğu gibi SMMM yönlendirmesi taşıyan bir not alanı içerir.

Hata Kodları

KodAçıklama
401Geçersiz veya eksik API key
402Yetersiz bakiye ya da plan tavanı doldu (sorgu/web hakkı) — bakiye yükleyin veya üst plana geçin
403Yetkisiz erişim (ör. geçersiz admin secret)
404Kayıt bulunamadı — dikey uçlarda yalnız KENDİ havuzunuz görünür; başka ofisin kaydına erişim de 404 döner
429Rate limit aşıldı — bekleyin ve tekrar deneyin
500Sunucu hatası

OpenAI Kütüphanesiyle Kullanım

Mevcut OpenAI kodunuzu değiştirmeden kullanabilirsiniz — sadece base_url ve api_key değiştirin. Tüm OpenAI SDK'ları (Python, Node.js, LangChain, vb.) çalışır.

base_url: https://www.themaximize.ai/v1
from openai import OpenAI client = OpenAI( api_key="sk-your-api-key", base_url="https://www.themaximize.ai/v1" ) response = client.chat.completions.create( model="claude-haiku-4-5", messages=[{"role": "user", "content": "Hello!"}] ) print(response.choices[0].message.content)

Node.js için:

import OpenAI from "openai"; const client = new OpenAI({ apiKey: "sk-your-api-key", baseURL: "https://www.themaximize.ai/v1" }); const response = await client.chat.completions.create({ model: "claude-haiku-4-5", messages: [{ role: "user", content: "Hello!" }] }); console.log(response.choices[0].message.content);

Hermes Agent ile Kullanım

Nous Research'ün açık kaynak otonom ajanı Hermes Agent, Maximize'ı model sağlayıcısı olarak kullanabilir. Kurulumdan sonra hermes model komutunda Custom endpoint seçin veya ~/.hermes/config.yaml dosyasına şunu yazın:

model: claude-sonnet-5 provider: custom base_url: https://www.themaximize.ai/v1 api_key: sk-your-api-key

Araç çağrıları (function calling), streaming ve /v1/models üzerinden otomatik model keşfi desteklenir. Türkiye'de işlenen veriyle çalışması gereken ajanlar için model listesini ?kvkk_yurtici=true ile filtreleyebilirsiniz.

Python Örneği (requests)

import requests API_KEY = "sk-your-api-key" BASE_URL = "https://www.themaximize.ai" response = requests.post( f"{BASE_URL}/v1/chat/completions", headers={"X-API-Key": API_KEY, "Content-Type": "application/json"}, json={ "model": "claude-haiku-4-5", "messages": [{"role": "user", "content": "Hello!"}], "max_tokens": 100 } ) print(response.json()["choices"][0]["message"]["content"])

Node.js Örneği

const response = await fetch( "https://www.themaximize.ai/v1/chat/completions", { method: "POST", headers: { "X-API-Key": "sk-your-api-key", "Content-Type": "application/json" }, body: JSON.stringify({ model: "claude-haiku-4-5", messages: [{ role: "user", content: "Hello!" }], max_tokens: 100 }) } ); const data = await response.json(); console.log(data.choices[0].message.content);

cURL Örneği

curl https://www.themaximize.ai/v1/chat/completions \ -H "X-API-Key: sk-your-api-key" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-haiku-4-5", "messages": [{"role": "user", "content": "Hello!"}], "max_tokens": 100 }'