{
    "ok": true,
    "name": "vkchuong API",
    "auth": "Authorization: Bearer <api_key>  (or X-API-Key header)",
    "errors": "429 + Retry-After = the model pool is saturated, the same request will work later. 400 = the request itself is wrong, retrying changes nothing. The Gemini 3 image models are served only from the global endpoint, so a busy pool has no region to fall back to and 429 is normal under load.",
    "endpoints": {
        "GET  /me": "[any key] test a key -> { label, abilities, active, request_count, usage{files,cost_usd}, models{}, voices{} }",
        "GET  /models": "[any key] models this key may run -> { image[], video[], music[], voices{}, credentials }",
        "POST /image-gen": "[image] prompt, model, aspect_ratio, sample_count, negative_prompt, transparent, name (label put in the stored filename), image_url|image_base64|image (ref) -> { images[] }",
        "POST /upscale": "[image] image_url|image_base64|image, factor(x2|x4) -> { image }",
        "POST /edit": "[image] image_url|image_base64|image, prompt (new background) -> { image }",
        "POST /enhance-prompt": "[image] text -> { prompt }",
        "POST /storyboard": "[image] premise, page_count(1-20) -> { character, style, pages[] }",
        "POST /tts": "[tts] text, voice -> { audio }",
        "GET  /voices": "[tts] -> { voices{} }",
        "POST /music": "[music] prompt, negative -> { audio }",
        "POST /veo": "[veo] image_url|image_base64|image, prompt, model, duration, aspect_ratio, audio -> { operation }",
        "POST /veo-status": "[veo] model, operation -> { done, video? }",
        "POST /vision": "[vision] image_url|image_base64|image, features[] -> { result, cost }",
        "POST /speech-to-text": "[speech] audio_url|audio_base64|audio, language_code, encoding, sample_rate, duration_seconds -> { transcript, confidence }",
        "POST /analyze-text": "[language] text, action(sentiment|entities|syntax|classify|moderate) -> { result, cost }",
        "POST /translate": "[translate] contents[]|text, target, source(optional) -> { translations, cost }",
        "POST /detect-language": "[translate] text -> { languages[], cost }",
        "GET  /languages": "[translate] display_language_code(optional) -> { languages[], cost: 0 }",
        "POST /document-ai": "[docai] document_url|document_base64|document, mime_type -> { text, pages, cost }",
        "POST /video-intel": "[videointel] video_url|video_base64|video|gcs_uri, features[] -> { operation }",
        "POST /video-intel-status": "[videointel] operation, features[] -> { done, result?, cost? }"
    },
    "abilities": {
        "image": "Image (/image-gen, /upscale, /edit, /enhance-prompt, /storyboard)",
        "tts": "Text-to-Speech (/tts, /voices)",
        "veo": "Veo video (/veo, /veo-status)",
        "music": "Music \u2014 Lyria (/music)",
        "vision": "Cloud Vision (/vision)",
        "speech": "Speech-to-Text (/speech-to-text)",
        "language": "Natural Language (/analyze-text)",
        "translate": "Cloud Translation (/translate, /detect-language, /languages)",
        "videointel": "Video Intelligence (/video-intel, /video-intel-status)",
        "docai": "Document AI OCR (/document-ai)"
    },
    "models": {
        "image": [
            "gemini-2.5-flash-image",
            "gemini-3.1-flash-image",
            "gemini-3-pro-image",
            "gemini-3.1-flash-image-preview"
        ],
        "video": [
            "veo-3.1-fast-generate-001",
            "veo-3.1-generate-001",
            "veo-3.0-fast-generate-001",
            "veo-3.0-generate-001",
            "veo-2.0-generate-001",
            "veo-3.1-lite-generate-001"
        ],
        "music": [
            "lyria-002"
        ]
    }
}