Skip to content

    API documentation

    Legacy Suno Billing and Migration

    Supported compatibility API

    Same-key recovery applies to paid or zero-credit tasks.

    Legacy Suno overview · Task model

    OmnAPI deducts the quoted credits atomically when a task is created and records settlement in the task and credit ledger. Eligible failed tasks and cancellations that were safely completed before submission or explicitly confirmed by the Provider are refunded. A post-submit 409 means the task remains active and was not refunded; keep polling it.

    Current standard prices are:

    OperationStandard OmnAPI credits
    Song generation explicitly using chirp-goose, including Upload + Extend / Cover25
    Song generation with either Pro model, including Vox28
    Vox explicitly using chirp-goose25
    Existing-clip Extend (automatic Concat included) / Cover25 with chirp-goose or its alias; 28 with either Pro model or its aliases
    WAV managed delivery3
    Modern verified public Voice creation66
    Compatibility audio upload5
    Twelve-stem export140
    Named stem extract56
    Compatibility concatenate5
    Lyrics generation0
    Lyrics timeline read1; 0 for the legacy Suno 55,000 plan

    Legacy-customer Suno pricing is universal across every paid Suno operation, including generation, Extend/Cover, WAV, Stems, timeline, and Voice—not only song generation. The legacy Suno 55,000 plan has one explicit exception: timeline reads cost 0 while its other 10/11 pricing remains unchanged. Variable actual settlement and refunds reuse the same frozen customer rate. Treat creditsRequired on the task receipt and creditsCharged/refunded on the terminal task as authoritative. See Credits & Billing.

    Terminal Cover failures distinguish SUNO_COVER_SOURCE_NOT_PERMITTED from temporary throttling. A disallowed source or SUNO_SOURCE_CLIP_NOT_FOUND requires a corrected or different source, not repeated submissions of the same song. For SUNO_VOICE_VERIFICATION_AUDIO_REJECTED, request a fresh phrase and record new clear audio; no Voice was created. Follow the terminal Task’s retryable and billing fields, as described in Suno recovery.

    Compatibility errors use the OmnAPI envelope:

    {
    "success": false,
    "error": {
    "code": "VALIDATION_ERROR",
    "message": "title must be a string"
    }
    }
    HTTPTypical meaningRetry guidance
    400Valid JSON but an unsupported operation combinationCorrect the request
    401Missing, invalid, disabled, or expired OmnAPI keyReplace or enable the key
    402Insufficient OmnAPI credits; no task was createdAdd credits, then retry the unchanged request with the same idempotency key
    403API-key scope or IP policy rejected the requestCorrect the key scope or IP policy
    404Referenced target does not exist or lacks current-customer creation provenanceDo not blind-retry or probe other customer resources
    406Stems/WAV source exists but is not completeWait for the source task to complete, then retry the unchanged request and key
    409Key/body mismatch, concurrent request, or a task was already createdDifferent body: use a new key. No taskId: back off and retry the same key; if it remains unbound for 15 minutes, contact support rather than changing keys. With taskId: poll that task and do not resubmit
    422Legacy DTO type, length, enum, or required-field failureCorrect the request
    429Request limit reachedBack off using the response headers
    502Task completed without the required compatibility resourceRead task details before deciding to retry
    503Service capacity is temporarily unavailable before executionBack off with the same host, route, body, and idempotency key; if the error includes a task ID, poll it instead of resubmitting
    504Compatibility wait expired after a task was createdPoll the pollUrl. For a write request, retry only the original host and route with the same key; a same-key replay returns 409 with the original taskId. The timeline GET has no idempotency key and should use its returned task recovery details
    5xxService failureBefore task creation, retry with backoff and the same key. If details contain taskId, poll it and never switch keys

    For the seven write routes, retry the original request with the same key. A response with a task ID means you should poll that task, including when the synchronous wait returns 500, 502, or 504. Without a task ID, use bounded backoff with the same key; contact support if the conflict persists. The service can recover abandoned submissions automatically. Never switch keys to bypass a conflict.

    For multi-stage operations, a same-key recovery can identify the latest task for that operation. Keep the original request and all returned receipts.

    There is no shared idempotency namespace across the compatibility API and the modern API. After an uncertain write, poll the returned task details or replay the exact original host, path, key, and body. Never fail over an individual in-flight write between surfaces; move only cohorts whose prior writes are known to be settled or absent.

    These differences are part of the public contract and will not be changed to copy unsafe or incompatible legacy behavior.

    AreaHistorical client expectationOmnAPI compatibility behavior
    CredentialRetired service key valueOmnAPI key value; either header name is accepted
    Authentication errorsCommonly 403401 for key authentication; 403 only for key scope or IP policy
    Insufficient balanceCommonly 403402
    BillingPackage-based deduction after generationAtomic create-time deduction with terminal settlement and eligible refund
    Long-tail statusFrequent legacy feed sync could still leave tasks stale or expire with process-local stateRecoverable task state; keep polling until a confirmed terminal result
    Submission acknowledgement lossA process retry could repeat a non-idempotent Suno writeAutomatic replay stops at the durable submission boundary; reconcile the original task or wait through the 48-hour observation window plus 24-hour reconciliation grace instead of creating a replacement
    Resource accessSome follow-up operations accepted unrelated internal resource IDsRaw Suno IDs are resolved against resource permission rules; OmnAPI data remains customer-isolated
    HistoryHistorical song recordsOnly OmnAPI task/resource history is queryable
    Old resourcesA known old clip or Voice ID could be routed by legacy runtime stateRaw Suno clip and Voice IDs are accepted without a matching OmnAPI row; resource compatibility checks still apply
    Query provenanceA clip returned by a lookup could later be reused as a sourceOnly create/upload and other operations that generate a new owned resource — including generative derive, concatenate, edits/remaster, Voice creation, and stems — establish provenance. Query, timeline, WAV, and other read-only/conversion results do not
    Model validationMalformed mv values could be rewritten to fenixSupported legacy values normalize as documented; malformed values return 422
    Model selectionLegacy clients could request several model namesDefaults to v6-mini; use_requested_model: true preserves a supported requested model
    Response mvSuno clip major_model_versionSame exact major-version value; null when unavailable, with no fallback to the request model
    Songs paginationskip could be validated and then ignoredskip is applied so pages do not repeat the same rows
    Timeline shapeSome responses included both aligned lines and wordsReturns both aligned_lyrics and aligned_words
    Continue positionA negative continue_at could pass the old DTOValues must be finite and >= 0; normalize legacy data before migration
    Legacy identity fieldsIdentity fields could be populatedidentity, uid, openid, and comparable compatibility identifiers are empty or redacted
    Lyrics timeoutCould return running without a public recovery routeReturns an error with canonical task recovery details
    Timeline failureCould return HTTP 200 with an empty bodyReturns a structured error
    WAV failureCould be surfaced as an empty or unavailable URLA successful response always contains a URL
    /api/legacy/infoPackage rows and internal legacy dataOmnAPI credit-account view; package rows and key secrets are not recreated
    Error bodyHistorical error shapeOmnAPI { success, error } envelope

    Phase 1 — validate compatibility calls and historical resources

    Section titled “Phase 1 — validate compatibility calls and historical resources”
    1. Inventory calls to the exact ten covered paths. Root /v1/* paths are not supported.
    2. Use https://api.omnapi.com, an OmnAPI API key, and /api/legacy. Both api-key and x-api-key header names are accepted.
    3. Add a unique Idempotency-Key to every write request. Persist mid, omnapiTaskId, and pollUrl; taskId is not a canonical poll key.
    4. Historical rows are not copied automatically. Raw Suno clip and Voice IDs can be used without importing old history, subject to resource permission checks. Contact support when historical task lists or ownership records need to be restored.
    5. A successful lookup does not establish ownership. Historical imports must preserve the correct customer and original creation operation.
    6. Validate status codes, response shapes, clip count, usable media URLs, task settlement, and same-key retries for each operation in use.
    1. Move simple/custom music to /api/v1/suno/songs.
    2. Move extend/cover to /api/v1/suno/clips/{clipId}/derive.
    3. Move timeline and exports to clip resource endpoints.
    4. Replace mids lookup with /api/v1/suno/clips?clipIds=...; replace recent compatibility history with task listing.
    5. Let modern Extend perform automatic Concat. Keep independent historical Concat calls on the compatibility route until they can be removed.
    6. Replace /api/legacy/info reporting with dashboard balance, usage export, and task settlement fields.
    7. Remove dependencies on compatibility-only fields, then switch the header to x-api-key and remove /api/legacy code paths.

    Before raising traffic, verify all of the following:

    • Both generated clip mid values can be looked up and downloaded.
    • omnapiTaskId reaches a terminal state and matches the compatibility result.
    • Required credits and final charged/refunded credits reconcile.
    • Retries with the same idempotency key do not create duplicate tasks, including zero-credit lyrics tasks.
    • ids and mids are not mixed in application storage.
    • Historical clip derivatives pass permission checks with the intended source IDs.
    • Error handling covers 401, 402, 403, 404, 406, 409, 422, 429, 502, 503, and 504.

    If a modern integration needs rollback, pause new requests and settle any in-flight writes first. Use the documented OmnAPI compatibility route for subsequent supported operations; never replay an uncertain write across routes.