/edu/openapi.yaml
엔드포인트
견적 body는
{ "media_type": "text" | "image" | "video" | "voice" | "music" }입니다. 응답 estimated_credits는 실제 Edu 생성 경로와 같은 고정 크레딧입니다. 생성 요청 body의 나머지 필드는 모델·도구마다 다릅니다.
업로드 URL body는 { "file_name": string, "mime_type": string }입니다. SDK에서는 daven.uploads.createUrl({ fileName, mimeType })를 사용하고 반환된 uploadUrl에 파일 bytes를 PUT한 뒤 finalUrl을 생성 요청에 전달합니다.
세션 purpose와 actor/학생 의미는 세션과 proxy를 따릅니다.
/api/account는 billing, billing_ledger, remaining_credits만 반환합니다. Daven 사용자·runtime key 소유자·payer ID·개인 잔액은 교육앱에 노출하지 않습니다.
멱등 요청
/api/text/create와 /api/media/create에는 Idempotency-Key가 필요합니다.
- 사용자 생성 동작마다 새로운 키를 만드세요.
crypto.randomUUID()를 권장합니다. - 네트워크 오류로 같은 요청을 재시도할 때만 같은 키를 다시 사용하세요.
- 같은 키를 다른 body나 사용자 작업에 사용하면
409를 반환합니다. - 완료된 요청을 재시도하면 저장된 응답을 반환하며 AI를 다시 실행하지 않습니다.
/api/media/get이 완료를 확인하면 정산하고, provider가 명시적으로 실패를 반환하면 예약을 해제합니다. 앱 작업이 재시작되면 같은 Idempotency-Key를 사용해 기존 task를 이어서 조회하세요.
이미지 모델은 서버 allowlist를 따릅니다. 교실 기본값은 gpt-image-2.5입니다. model을 생략하면 Daven이 nano-banana-2를 고르므로 앱과 Hub가 gpt-image-2.5를 명시해야 합니다. 앱이 payer 또는 과금 모드를 고를 수 없습니다. Reference image는 public HTTPS URL만 허용합니다.
