tunova-ai Jobs API

Poll async jobs

Operations 2

GET /api/jobs/{id} Get job status + final clips #
GET /api/jobs List your recent jobs #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/tunova-ai:tunova-ai-jobs-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

tunova-ai-jobs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Tunova Jobs API
  version: 1.0.0
  description: 'Suno-AI music generation API. Generation is **always async**: submit returns `202 {job_id}`; poll `GET /api/jobs/{id}` or pass `callback_url` for an HMAC-signed webhook. Billed in **tokens, on success only** (a failed render is refunded). Every response carries `X-Request-Id`. An **MCP server** for AI agents (Claude, Cursor, …) is also available at `POST /mcp` (stateless Streamable HTTP; tools `generate_song` / `wait_for_song` / `check_song`) — same `X-API-Key`, same token billing.'
servers:
- url: https://api.tunova.ai
  description: production
security:
- ApiKeyAuth: []
tags:
- name: Jobs
  description: Poll async jobs
paths:
  /api/jobs/{id}:
    get:
      tags:
      - Jobs
      operationId: getJob
      summary: Get job status + final clips
      description: 'Poll fallback for webhooks. While `status` remains `submitted`, `phase: streaming` and `preview_clips` may expose transient playable audiopipe URLs. They are previews only: wait for `status: complete` and `clips` for stable CDN MP3 URLs, final quality validation and billing settlement.'
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Job state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '401':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
  /api/jobs:
    get:
      tags:
      - Jobs
      operationId: listJobs
      summary: List your recent jobs
      description: The caller's own recent generations (tenant-scoped; the owner key sees all). Newest first; `?limit=` 1–100 (default 50). Jobs are retained ~7 days.
      parameters:
      - name: limit
        in: query
        schema:
          type: integer
          default: 50
          minimum: 1
          maximum: 100
      responses:
        '200':
          description: Recent jobs
          content:
            application/json:
              schema:
                type: object
                properties:
                  jobs:
                    type: array
                    items:
                      $ref: '#/components/schemas/Job'
        '401':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/Error'
components:
  schemas:
    Clip:
      type: object
      example:
        id: f81b3ad8-bc81-4135-80ac-dbddd7bf8b00
        status: complete
        audio_url: https://cdn1.suno.ai/f81b3ad8-bc81-4135-80ac-dbddd7bf8b00.mp3
        image_url: https://cdn2.suno.ai/image_f81b3ad8-bc81-4135-80ac-dbddd7bf8b00.jpeg
        title: Rain On Glass
        model: v6
        tags: lofi hip-hop, rainy, mellow
        duration: 128.16
      properties:
        id:
          type: string
        status:
          type: string
        audio_url:
          type: string
          format: uri
        image_url:
          type: string
          format: uri
          description: Cover art
        title:
          type: string
        model:
          type: string
          description: Actual model reported by Suno (v6 for new v6/v5.5 generations; historical results retain their original model)
        tags:
          type: string
          description: Style / genre tags
        duration:
          type: number
          description: Seconds
    Error:
      type: object
      required:
      - code
      - detail
      properties:
        code:
          type: string
          example: VALIDATION_ERROR
        detail:
          type: string
        request_id:
          type: string
          description: Echoed in the X-Request-Id header; quote it in support requests
        balance:
          type: integer
          description: 'On 402 (INSUFFICIENT_TOKENS / DAILY_CAP_REACHED): your current token balance'
        cost:
          type: integer
          description: 'On 402: tokens this call needs'
        job_id:
          type: string
          description: 'On 409 IDEMPOTENCY_CONFLICT: the retained job already bound to this key'
    Job:
      type: object
      example:
        job_id: 8f3a1c2e-7b9d-4c2a-9e5f-1a2b3c4d5e6f
        status: complete
        clips:
        - id: f81b3ad8-bc81-4135-80ac-dbddd7bf8b00
          status: complete
          audio_url: https://cdn1.suno.ai/f81b3ad8-bc81-4135-80ac-dbddd7bf8b00.mp3
          image_url: https://cdn2.suno.ai/image_f81b3ad8-bc81-4135-80ac-dbddd7bf8b00.jpeg
          title: Rain On Glass
          model: v6
          tags: lofi hip-hop, rainy, mellow
          duration: 128.16
        error: null
        created_at: 1783084482
        updated_at: 1783084639
      properties:
        job_id:
          type: string
        status:
          type: string
          enum:
          - queued
          - processing
          - submitted
          - complete
          - failed
        phase:
          type: string
          enum:
          - streaming
          - delivering
          description: 'streaming: transient previews available; delivering: provider finished, validated audio is being stored. Status remains submitted until delivery completes.'
        clips:
          type: array
          items:
            $ref: '#/components/schemas/Clip'
        preview_clips:
          type: array
          items:
            $ref: '#/components/schemas/Clip'
          description: Currently playable expected tracks; this may initially contain only the first track while its sibling is still rendering. Never treat previews as the authoritative final result; replace them with clips when status becomes complete.
        preview_at:
          type: integer
          description: Unix time when the first playable expected track was observed
        lyrics:
          type:
          - object
          - 'null'
          additionalProperties: true
          description: Present for a standalone `/api/lyrics` job
        error:
          type:
          - string
          - 'null'
        created_at:
          type: integer
        updated_at:
          type: integer
  responses:
    Error:
      description: Error envelope
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Per-customer key, e.g. sk_live_…