Changelog

    #Billing fixes (2026-04-20)

    • Per-second pricing is now consistent across MCP / REST API / edge functions / web UI. A single shared helper (_shared/pricing.ts + server/*/services/pricing.py) reads base_credits and billing_unit from ai_models_config and applies the same formula everywhere. Admin price changes propagate in real time to the frontend via the catalog subscription and on every call to server layers — no code deploy required.
    • Fixed an MCP / REST under-charge on per-second models. Previously, calls to seedance-2-*, seedance-2-fast-*, kling-3-0-motion-control-*, and kling-2-6-motion-control-* via the MCP or REST API were charging a single second of cost regardless of requested duration (the pricing path silently ignored the billing_unit). These now charge base_credits × duration as intended. Existing web UI billing was unaffected.
    • Kling 3.0 audio pricing is now a dedicated catalog row. kling-3-0-std-audio (23 cr/s) and kling-3-0-pro-audio (30 cr/s) replace the previously-hardcoded +6 / +9 audio surcharge. You keep calling kling-3-0-std / kling-3-0-pro as the model id and just toggle sound: true/false — the server picks the right priced row.
    • Refunds now read from the ledger, not the row. refund_generation_credits sums the actual credit_transactions.usage entries tied to a generation_id instead of reading media_generations.credits_deducted. Self-heals against row/ledger drift on future failures.
    • New variant_required error. Passing a family label (e.g. seedance-2-fast, p-video, kling-3-0-motion-control) as model now returns variant_required with the available_variants list — no credit deduction — instead of the misleading model_disabled. Ask the user which variant they want, then re-call with the concrete model_id. See Generate Media ToolFamily-name disambiguation.

    #New models

    • Seedance 2 (ByteDance) — Flagship multimodal video model. Text-to-video and image-to-video with reference video support and on-by-default audio. Standard and Fast tiers, billed per second. Available via generate_media and the Available models catalog.
    • P-Video (Pruna AI) — Very fast image-to-video and audio-to-video for talking-avatar pipelines. 720p and 1080p, optional draft mode for the cheapest per-second tier. Audio-driven runs are billed by reference audio duration.
    • Music Separation (MVSEP) — New generate_separation tool. Splits an uploaded track into vocals + instrumental stems for karaoke / acapella / remixing workflows. Async with get_separation_status; billed per second of source audio.

    #Documentation

    • Available models — Page rebuilt as a card grid grouped by family with type filter chips, per-variant price ranges, and the Kubeez K mark as a fallback background. The "Copy page" button now serializes the live catalog as a markdown table.
    • How it works — Opens with a five-step visual stepper for the canonical get_upload_url → upload → get_upload_session → estimate_generation_cost → generate_* flow.
    • Limitations — Per-tool rate limits and common errors are now stat cards instead of a table; long-form prose stays below.
    • MCP overview — Landing page reorganized: official Cursor install badge at the top, three quick-action cards (Connect / Quick start / Browse models), worked tool sequences for Music Separation / Motion control / AutoCaptions, and four tip cards for the things AI assistants get wrong on the first try.
    • REST API reference — Hosted Swagger UI at api.kubeez.com/docs is the source of truth for HTTP clients. Linked from the sidebar.
    • Initial release — MCP documentation published. Covers overview, quick start, getting connected, media/music/ads/account tools, limitations, and how it works.

    For product updates and status, visit Kubeez. For support, use the contact options on the Kubeez website.