Geliştirici rehberi
KolayZeka API: tüm modeller ve uygulamalar için tek sözleşme. Bir token, tek kredi bakiyesi, sonuç için webhook.
- Kimlik
- Bearer
- Çalışma
- Asenkron
- Sonuç
- Webhook
Hızlı başlangıç
Temel adres https://kolayzeka.com/api. İki şey çalıştırabilirsiniz: bir model (tek üretim) ya da bir uygulama (birden fazla modeli sırayla çalıştıran hazır akış). İkisi de aynı kurallarla çalışır: asenkron, kredili, webhook'lu. Her modelin ve uygulamanın kendi sayfasında, alanları ve fiyatlarıyla hazır örnekler var: Modeller, Uygulamalar (sayfadaki "API" bağlantısı).
# 1) Bakiye
curl https://kolayzeka.com/api/me -H "Authorization: Bearer $KZ_TOKEN"
# 2) Modelin alanları ve fiyatları
curl https://kolayzeka.com/api/ai-models/openai-gpt-image-2
# 3) Bu girdinin fiyatı (çalıştırmadan)
curl -X POST https://kolayzeka.com/api/models/openai-gpt-image-2/quote \
-H "Content-Type: application/json" \
-d '{"input":{"prompt":"kısa bob saç","image":["https://cdn.example.com/selfie.jpg"]}}'
# 4) Çalıştır (202 + id döner)
curl -X POST https://kolayzeka.com/api/models/openai-gpt-image-2/generate \
-H "Authorization: Bearer $KZ_TOKEN" -H "Content-Type: application/json" \
-d '{"input":{"prompt":"kısa bob saç","image":["https://cdn.example.com/selfie.jpg"]},
"webhook_url":"https://your-server.com/hooks/kolayzeka"}'
# 5) Sonuç (ya da webhook'u bekleyin)
curl https://kolayzeka.com/api/generations/<id> -H "Authorization: Bearer $KZ_TOKEN"Kimlik doğrulama
Her istekte Authorization: Bearer <token>. Token'ı Profil sayfasında oluşturun; yalnızca bir kez gösterilir, şifre gibi saklayın ve sunucunuzda tutun (mobil uygulamaya gömmeyin). Katalog (/ai-models) ve model teklifi token istemez.
Yanıtlar her zaman JSON'dur; Accept başlığı gerekmez. Gövde JSON ise Content-Type: application/json gönderin.
Endpoint listesi
Hesap
GET | /api/me | Token sahibi ve kredi bakiyesi (credit_balance). |
POST | /api/login | E-posta + şifre ile token al ({ email, password, device_name? }). Dakikada 5 deneme.(token gerekmez) |
Modeller
GET | /api/ai-models | Aktif modeller, modları ve başlangıç fiyatları.(token gerekmez) |
GET | /api/ai-models/{slug} | Bir model: girdi alanları (input_schema), mod, fiyat tablosu (mode.pricing). ?category_id= ile mod seçilir.(token gerekmez) |
POST | /api/models/{slug}/quote | Çalıştırmadan, verilen girdinin kredi fiyatı.(token gerekmez) |
POST | /api/models/{slug}/generate | Üretimi başlat (202, asenkron). |
GET | /api/generations | Üretimleriniz, en yeni önce, sayfa başına 20. |
GET | /api/generations/{id} | Bir üretimin durumu ve sonucu. |
Uygulamalar (çok adımlı)
GET | /api/apps | Çalıştırabileceğiniz uygulamalar (sistem, herkese açık, kendi özelleriniz). |
GET | /api/apps/{slug} | Bir uygulama: girdileri (input_schema), adımları, tahmini fiyatı. |
POST | /api/apps/{slug}/quote | Verilen girdilerle adım adım fiyat. |
POST | /api/apps/{slug}/execute | Çalıştırmayı başlat (202, asenkron). |
GET | /api/apps/executions | Çalıştırmalarınız, en yeni önce, sayfa başına 20. |
GET | /api/apps/execution/{id} | Bir çalıştırmanın durumu ve sonucu. |
POST | /api/apps/execution/{id}/approve | Onay bekleyen adımı geçir ya da başarısız adımı yeniden dene. |
Yanıt biçimi
Başarılı yanıt { success: true, data: … }. Listelerde ayrıca links ve meta (sayfalama: current_page, last_page, total; sonraki sayfa ?page=2). Hata yanıtı { success: false, code, error, … }.
GET /api/me
{
"success": true,
"data": {
"id": 42,
"name": "Acme",
"email": "[email protected]",
"credit_balance": 1250
}
}Durumlar
Üretimler ve uygulamalar asenkrondur: başlatma isteği 202 ve bir id döner. Sonucu webhook ile alın (önerilen) ya da durum endpoint'ini birkaç saniyede bir sorgulayın. estimated_seconds beklenen süreyi verir.
Üretim
queued→processing→completed | failed
Webhook: generation.completed / generation.failed
Uygulama
pending→processing→waiting_approval?→completed | failed
Webhook: app_execution.completed / .failed / .waiting_approval
Sonuç her ikisinde de output_data.result alanındadır (medya için URL, metin için metin).
Kredi ve fiyat
- Her şey kredi ile ödenir. Fiyat seçtiğiniz seçeneklere göre değişir: kalite, çıktı boyutu, süre, adet. Seçenek başına fiyatlar
GET /api/ai-models/{slug}yanıtındamode.pricing(tier anahtarı, ör.1024x1536|high= boyut × kalite). Daha düşük kalite / boyut daha ucuzdur. - Kesin fiyat için çalıştırmadan teklif alın:
POST /api/models/{slug}/quoteya daPOST /api/apps/{slug}/quote.exact: falseise fiyat çıktıya bağlıdır ve teklif tipik değerle hesaplanır. - Model: kredi istek kabul edilince teklif tutarı kadar ayrılır, iş bitince gerçek tutara göre fark düşülür ya da iade edilir; başarısız olursa tamamı iade edilir. Uygulama: her adım bitince gerçek tutarı düşülür, başarısız adım ücretlendirilmez.
- Ödenen tutar sonuçtaki
credit_cost'tur. Bakiye yetmezse402 insufficient_credits(balanceverequiredile).
Dosyalar
- Görsel / video / ses alanlarına (
value_type=urlya daarray<url>) herkese açık bir https URL verin ya da dosyayımultipart/form-dataile yükleyin (input[image]=@./a.jpg, listeler içininput[image_urls][]=@./a.jpg; uygulamalardainputs[…]). - Çoğu modelin fiyatı girdi görselinin boyutuna değil, istediğiniz çıktıya bağlıdır; yine de büyük fotoğrafları yüklemeden önce küçültmek (ör. ~1 MP, JPEG) yüklemeyi ve işi hızlandırır.
- Sonuç URL'leri imzalıdır ve 24 saat geçerlidir. Kalıcı tutmak için kendi depolamanıza indirin; süresi dolmuşsa işi tekrar
GETedince yeni URL gelir.
Webhook
Başlatma isteğine webhook_url (https) ekleyin. İş bitince imzalı bir POST gelir: { event, success, data }; data durum endpoint'inin döndüğü nesnenin aynısıdır.
| generation.completed | Üretim bitti. |
| generation.failed | Üretim başarısız (kredi iade edildi). |
| app_execution.completed | Uygulama bitti; sonuç data.output_data. |
| app_execution.failed | Bir adım başarısız; data.error_code. |
| app_execution.waiting_approval | Bir adım onay bekliyor: /approve ile devam ettirin. |
Başlıklar: X-KolayZeka-Event, X-KolayZeka-Signature: sha256=<hex>, User-Agent: KolayZeka-Webhook/1.0. İmza, ham gövdenin hesabınızın webhook imzalama anahtarıyla HMAC-SHA256'sıdır. Anahtarı Profil sayfasında oluşturun (anahtar yoksa webhook gönderilmez).
Doğrulama · Node.js
import crypto from 'node:crypto';
// rawBody: the request body exactly as received (before JSON.parse).
const expected = 'sha256=' + crypto
.createHmac('sha256', process.env.KOLAYZEKA_WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
const given = req.headers['x-kolayzeka-signature'] ?? '';
if (given.length !== expected.length ||
!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(given))) {
return res.status(401).end();
}Doğrulama · PHP / Laravel
$expected = 'sha256='.hash_hmac('sha256', $request->getContent(), config('services.kolayzeka.webhook_secret'));
abort_unless(hash_equals($expected, (string) $request->header('X-KolayZeka-Signature')), 401);- 2xx dönün. Diğer yanıtlar ve ağ hataları 30 sn arayla en çok 5 kez yeniden denenir.
- Aynı olay birden fazla gelebilir:
data.id+eventile tekilleştirin. - Özel / iç ağ adresleri reddedilir (
422 invalid_webhook_url).
Hatalar
Her hata aynı şekildedir. Kodunuzu code'a göre yazın; error kullanıcıya gösterilebilecek insan mesajıdır.
| HTTP | code | Ne zaman |
|---|---|---|
400 | invalid_mode | Modelin şu an çalıştırılabilir bir modu yok (geçici; başka model deneyin). |
401 | unauthenticated | Bearer token yok, geçersiz ya da iptal edilmiş. |
402 | insufficient_credits | Bakiye yetmiyor. Yanıtta balance (bakiye) ve required (gereken) var. |
403 | forbidden | Bu kaynağa erişim yetkiniz yok. |
404 | not_found | Model / uygulama / iş yok, aktif değil ya da size ait değil. |
405 | method_not_allowed | Endpoint bu HTTP metodunu kabul etmiyor. |
422 | validation_failed | Girdi şemaya uymuyor. errors alanı: alan → mesajlar. |
422 | invalid_webhook_url | webhook_url https değil, çözümlenmiyor ya da özel / iç ağ adresi. |
429 | rate_limited | Hız sınırı aşıldı. retry_after saniye sonra tekrar deneyin. |
500 | server_error | Beklenmeyen hata. Tekrar denemeden önce listeden (GET /api/generations) işin oluşup oluşmadığına bakın. |
402 örneği
{
"success": false,
"code": "insufficient_credits",
"error": "Yetersiz kredi. Bakiye: 40, Gerekli: 55",
"balance": 40,
"required": 55
}422 örneği
{
"success": false,
"code": "validation_failed",
"error": "Doğrulama başarısız oldu.",
"errors": {
"quality": [
"`quality` alanı şunlardan biri olmalıdır: low, medium, high."
]
}
}Hız sınırları
- Sınırlar token başınadır ve iki ayrı kovadır: üretim başlatma (
generate,execute,approve) ve sonuç okuma (durum, liste,me, teklifler). Sonuç sorgulamak üretim kotanı harcamaz. - Her hesap: dakikada 600 üretim, 6000 okuma; aynı anda 6 iş çalışır, fazlası sırada bekler. Daha fazlası gerekirse bize yaz; hesabına özel sınır tanımlarız.
- Giriş (
/login): IP başına dakikada 5. - Aşılırsa
429 rate_limitedveretry_after(saniye). Sorgulama yerine webhook kullanmak sınıra takılmamanın en kolay yolu.