Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.
Design & media
suno
Try itGenerate, extend, and transform music or compose lyrics with Suno models via RunAPI's CLI or SDK.
What it does
Routes Suno music generation, lyric creation, and custom voice setup through the RunAPI CLI for one-off jobs or through RunAPI SDKs for app or backend integration. Covers RUNAPI_API_KEY authentication, contract discovery from command help and API Reference, request file construction, synchronous and asynchronous task execution, full media download with MIME verification, and bounded retry rules. Supported variants include suno-v4, v4.5, v4.5-all, v4.5-plus, v5, and v5.5; the catalog-declared fallback media family is audio/*.
When to use it
- Generate a song or instrumental from a text prompt
- Compose or blend lyrics with a Suno model
- Build a reusable custom Suno voice from a validation phrase
- Integrate Suno generation into an app, worker, or webhook pipeline
The skill document
Suno on RunAPI
Choose route
- For a one-off artifact or result, use the registered
sunoservice in therunapiCLI. If the installed command catalog does not list it, stop and report the missing service instead of inventing a command. - For an app, backend, worker, library, webhook pipeline, or production codebase, go directly to Integrate with SDK. Never shell out to the CLI as the production runtime.
Discover contract
Authenticate, then inspect the installed command catalog and the selected operation's current contract:
runapi auth status > auth.json
jq -e '.authenticated == true' auth.json
runapi suno --help
runapi suno --help
curl --fail --location https://runapi.ai/docs/api/suno/.md --output contract.md
If authentication is false, stop before submitting. Ask the user to provide a valid RUNAPI_API_KEY, or import a user-provided key from stdin with runapi auth import-token --token -; use interactive browser login only when the user explicitly requests it. Choose `` only from service help. Treat command help as authoritative for the installed operation, model, and top-level field roster. Treat its API Reference as authoritative for the complete request schema, nested fields, conditional rules, task behavior, and response variants. If the two surfaces disagree, stop and report the contract mismatch instead of guessing.
Temporary Contract Bridges:
- For a custom voice workflow, complete a validation-phrase operation, create and verify the custom voice, then pass its completed
voice_idaspersona_idwithpersona_type: "voice"to a supported music-generation operation. Remove when: The installed command catalog exposes the complete custom-voice operation sequence and thevoice_idtopersona_idhandoff.
Build request
Create request.json as valid JSON using only fields accepted by the discovered operation contract. For the chosen model and values, evaluate every applicable conditional rule as a set: satisfy every required field, omit every forbidden field, and stop on unresolved contradictions.
Traverse nested objects and arrays before execution. Close every relationship stated by the discovered contract, including uniqueness constraints and cross-references between nested values.
For a discovered local media input, including file-typed fields and top-level media URL fields, put an agent-readable local file path directly in request.json. The CLI consumes file fields as declared and uploads local paths in top-level media URL fields. Use runapi files create only when the user needs a reusable URL, provides Base64, or the discovered contract explicitly requires a separate upload.
Validate the file before sending it:
jq empty request.json
Execute
Use the branch matching the selected operation's discovered task behavior. Submit exactly once.
For an asynchronous operation:
runapi suno --async --input-file request.json > task.json
task_id="$(jq -er '.id' task.json)"
runapi wait "$task_id" --service suno --action > result.json
For a synchronous operation:
runapi suno --input-file request.json > result.out
Do not use --async or runapi wait for a synchronous operation. For an asynchronous operation, stop after validating task.json only when the user explicitly asks for background execution, polling, or webhook integration; report the task id without claiming the deliverable is complete.
Verify
A success status is not the deliverable. Read and validate the complete response according to the discovered result contract. Preserve the complete non-media result in the exact requested format, including JSON, text, SRT, or VTT.
For every requested media deliverable listed anywhere in the response, download all of them rather than returning only the first URL. Before downloading, derive its expected MIME type or family from response metadata when present, then the selected output format, then an unambiguous result field such as videos, images, or audios in the API Reference. The Catalog-declared fallback families for this skill are audio/*. Stop only when no single expected type or family can be established from those sources.
For every downloaded file, require both a non-empty file and the expected MIME type or family:
curl --fail --location --output
for file in ; do
expected_mime=
test -s "$file"
[[ "$(file --brief --mime-type "$file")" == $expected_mime ]]
done
Do not report completion when any requested deliverable is missing, empty, or has an unexpected MIME type. Record Skill Conformance separately from Task Outcome so a service failure does not hide whether this recipe was followed.
Recover or stop
- Correct a request shape at most once, and only when the discovered contract or returned validation error identifies the correction.
- Retry a transient transport failure at most once, and only when evidence confirms that no task was created, no billing occurred, and retrying is safe.
- If waiting times out or loses transport after
task.jsonexists, preserve the error and rerunrunapi waitfor that same task at most once. Never submit a replacement task. - On a terminal RunAPI or service failure, preserve the task/error evidence and stop. Keep the selected model and capability, and do not submit another paid request without user authorization.
- If the contract is missing a fact required to build or verify the request, stop and report the contract gap. Do not turn a product defect into a permanent skill workaround.
Integrate with SDK
Use this route only for application or production-code integration. Open the current RunAPI SDK reference below, select the package for the target language and Suno, and confirm its install command, client methods, request types, response types, and error classes before coding. Build the request from the same discovered product contract and apply the same deliverable verification and stop rules. Do not invoke runapi as a subprocess from production code.
References
- Model overview, pricing, and rate limits: https://runapi.ai/models/suno.md
- Provider overview: https://runapi.ai/providers/suno.md
- Full model catalog: https://runapi.ai/models.md
- SDK integration: https://github.com/runapi-ai/suno-sdk
Variants
suno-v4: https://runapi.ai/models/suno/v4.mdsuno-v4.5: https://runapi.ai/models/suno/v4.5.mdsuno-v4.5-all: https://runapi.ai/models/suno/v4.5-all.mdsuno-v4.5-plus: https://runapi.ai/models/suno/v4.5-plus.mdsuno-v5: https://runapi.ai/models/suno/v5.mdsuno-v5.5: https://runapi.ai/models/suno/v5.5.md
Questions people ask
- Which Suno model should I pick?
- Pick from the variants listed in the runapi model catalog (v4, v4.5, v4.5-all, v4.5-plus, v5, v5.5); the installed command help is authoritative for the available operations on the selected model.
- When should I use the CLI versus the SDK?
- Use the registered `suno` CLI service for one-off artifacts and quick jobs; switch to the RunAPI SDK only when integrating into an app, backend, worker, library, or webhook pipeline, and do not shell out to the CLI from production code.
- How does the custom voice flow work?
- Complete a voice validation phrase operation, create and verify the custom voice, then pass its `voice_id` as `persona_id` with `persona_type: "voice"` to a supported music-generation operation. This bridge is removed once the installed command catalog exposes the full custom-voice sequence.
Related skills
Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.
Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.
Find why your productivity system keeps failing, then apply the smallest fix — capacity math, bottleneck routing, durable local notes.
Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.
Site audit, content writing, and competitor analysis for organic search rankings.
More from runapi-ai
Browse all skillsRun one-off RunAPI service commands from the terminal with JSON requests and inspect results synchronously or via polling.
Generate and edit images with GPT Image through RunAPI. Use when the user asks an agent to create, edit, or transform images with GPT Image. Default to the RunAPI CLI for one-off generation; use SDKs only when the user is integrating RunAPI into an app or backend.
Generate speech, dialogue, and sound with ElevenLabs through RunAPI. Use when the user asks an agent to create speech, dialogue, or sound effects, or transcribe audio with ElevenLabs. Default to the RunAPI CLI for one-off generation; use SDKs only when the user is integrating RunAPI into an app or backend.
Generate and edit images with Flux Kontext through RunAPI. Use when the user asks an agent to create, edit, or transform images with Flux Kontext. Default to the RunAPI CLI for one-off generation; use SDKs only when the user is integrating RunAPI into an app or backend.
Generate and edit images with GPT Image 2 through RunAPI. Use when the user asks an agent to create, edit, or transform images with GPT Image 2. Default to the RunAPI CLI for one-off generation; use SDKs only when the user is integrating RunAPI into an app or backend.
Generate and edit images with Imagen 4 through RunAPI. Use when the user asks an agent to create, edit, or transform images with Imagen 4. Default to the RunAPI CLI for one-off generation; use SDKs only when the user is integrating RunAPI into an app or backend.