Tunova

Changelog

What shipped, and why — newest first. We build in the open so you can see the thing is alive and moving.

Breaking changes to the request/response shape get at least 30 days notice — see the versioning policy.

reliability

Auto-recovery after idle + a synthetic uptime canary

A stretch of zero traffic could leave a browser session alive at the health check but stale at the actual submit, so the first real job after a quiet spell could fail. Two fixes: a failed submit now releases its lease immediately so a retry lands on a healthy box instead of burning the delivery budget, and a synthetic job runs through the whole pipe on a schedule and pages us if it doesn't complete — so we're the first to hit a bad state, not you. Refunds always covered the failures; now they mostly don't happen.

content

Playable proof + honest comparison guides

The landing now plays the actual mp3 a sample call returned, and two new guides compare the real ways to reach Suno (self-host, generalist hubs, and Suno-focused services) with the trade-offs stated plainly.

reliability

RabbitMQ is now the sole submit transport, over mutual TLS

Job submission moved onto a single hardened queue with mutual-TLS between the workers and the broker and supervised consumers that survive restarts. Fewer moving parts on the path that actually places your generation, and a cleaner story when Suno changes underneath us.

api

Rate limit surfaced proactively

Every successful response now carries RateLimit-* headers, and GET /api/me reports your current limit and remaining balance — so you can back off before you hit a wall instead of after.

sdk

SDKs v0.1.0 — Python + Node, zero dependencies

Published open-source (MIT) clients for Python and Node/TypeScript with a built-in HMAC webhook verifier and an MCP manifest, at github.com/erliona/tunova-sdk. Copy-paste or install — your call; the raw REST API stays curl-simple.

api

v5.5 selectable per request

The newest Suno model is selectable per request via the model parameter, and billed only on a successful render — a failed generation refunds itself on the same statement.