API qo'llanma

So'rov yuborasiz — serverda claude CLI ishga tushadi — natija qaytadi.

1. Kalit oling

Dashboard dan API kalit yarating. Kalit cak_ bilan boshlanadi va faqat bir marta ko'rsatiladi.

export API_KEY=cak_...

2. Autentifikatsiya

Har bir so'rovda X-API-Key header yuboriladi:

curl /v1/chat \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Salom"}'

3. Oddiy so'rov

POST /v1/chat — javob tayyor bo'lguncha kutadi.

{
  "prompt": "Python da fibonachchi funksiyasini yoz",
  "model": "sonnet"
}

Javob:

{
  "ok": true,
  "session_id": "18735400-6cb8-4c87-ae70-382fd73d7ce0",
  "result": "def fib(n): ...",
  "num_turns": 1,
  "duration_ms": 8084,
  "total_cost_usd": 0.019,
  "usage": { "input_tokens": 10, "output_tokens": 479 }
}

4. Suhbatni davom ettirish

Javobdagi session_id ni keyingi so'rovga qo'shsangiz, Claude oldingi kontekstni eslab qoladi:

{
  "prompt": "Endi unga testlar yoz",
  "session_id": "18735400-6cb8-4c87-ae70-382fd73d7ce0"
}

5. Uzoq so'rovlar — job navbati

Katta vazifalar uchun POST /v1/jobs ishlating: javob darhol qaytadi, natijani keyin olasiz. Timeout muammosi bo'lmaydi.

# 1. Navbatga qo'yish
curl -X POST /v1/jobs \
  -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
  -d '{"prompt": "Butun loyihani refactor qil", "cwd": "my-app",
       "permission_mode": "acceptEdits"}'
# → {"id": "7c1e...", "status": "queued"}

# 2. Natijani so'rash
curl /v1/jobs/7c1e... -H "X-API-Key: $API_KEY"
# → {"status": "succeeded", "result": "...", "cost_usd": 0.42}

Holatlar: queued → running → succeeded | failed | timeout | canceled

6. Streaming (SSE)

POST /v1/chat/stream — javob token-token keladi.

const res = await fetch("/v1/chat/stream", {
  method: "POST",
  headers: { "X-API-Key": API_KEY, "Content-Type": "application/json" },
  body: JSON.stringify({ prompt: "Uzun maqola yoz" }),
});

const reader = res.body.getReader();
const decoder = new TextDecoder();
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  console.log(decoder.decode(value));   // event: ... / data: {...}
}

Hodisa turlari: system, stream_event (matn bo'laklari), assistant, result, saved, done, error.

7. Fayllar bilan ishlash

Claude fayl yaratishi/tahrirlashi uchun ikki maydon kerak:

{
  "prompt": "hello.txt yarat, ichida SALOM DUNYO yozilsin",
  "cwd": "demo",
  "permission_mode": "acceptEdits"
}

cwd — server workspace'i ichidagi papka (avtomatik yaratiladi, tashqariga chiqib bo'lmaydi). permission_mode dontAsk bo'lsa tahrirlar rad etiladi, acceptEdits bo'lsa ruxsat beriladi.

So'rov maydonlari

MaydonTurIzoh
promptstringMajburiy. Claude ga yuboriladigan matn
session_iduuidOldingi suhbatni davom ettirish
modelstringopus / sonnet / haiku
cwdstringWorkspace ichidagi papka
system_promptstringDefault system promptga qo'shiladi
permission_modestringdontAsk, acceptEdits, plan…
allowed_toolsstring[]["Read", "Grep", "Bash(git *)"]
disallowed_toolsstring[]Taqiqlangan toollar
max_turnsintAgent nechta qadam bosishi mumkin
timeoutintSekundlarda

Barcha endpointlar

MetodYo'lVazifasi
POST/v1/chatSo'rov yuborib javobni kutish
POST/v1/chat/streamJavobni SSE orqali olish
POST/v1/jobsNavbatga qo'yish
GET/v1/jobsJoblar ro'yxati (?status=)
GET/v1/jobs/{id}Job holati va natijasi
DELETE/v1/jobs/{id}Bekor qilish (faqat queued)
GET/v1/sessionsSessiyalar (?q= qidiruv)
GET/v1/sessions/{id}/messagesSuhbat tarixi
DELETE/v1/sessions/{id}Sessiyani o'chirish
GET/v1/usageXarajat statistikasi (?days=)
GET/healthServer, CLI va DB holati

To'liq interaktiv hujjat: Swagger UI

Xato kodlari

KodMa'nosi
401Kalit yo'q, noto'g'ri yoki bekor qilingan
402Kunlik yoki oylik budjet tugagan
404Sessiya/job topilmadi yoki sizniki emas
409Job allaqachon boshlangan — bekor qilib bo'lmaydi
413Prompt juda uzun
422So'rov formati noto'g'ri
502CLI xato qaytardi
504Timeout

Xato javoblari doim shu ko'rinishda: {"ok": false, "error": "sabab"}