Read a song
song_analyzeFree for the first songs each day; then 3¢ a song. Pass confirm_cents: 3 to allow the charge; with 0 it answers price_changed and charges nothing. Listens to the song for its beats, sections and lyrics (a few minutes of work in the background). A repeat of the same song is free. A failed or cancelled read is refunded, but still counts toward this token's daily limit until midnight UTC. Captions on a song are always whole lines (never word sync). Idempotency is keyed on (this token, this tool, idempotency_key).
Args: song_id: from song_from_library. lyrics: optional pasted lyrics (max 20,000 chars) to align instead of listening for words. confirm_cents: the most the user agreed to pay, in cents (3 allows the paid-song charge). idempotency_key: unique per call (recommended).
Returns: {ok, job_id, status, poll_after_s: 5, cents}: poll with wait_for_job (a_), then song_get. A song already read answers {analysis_ready: true, next_tool: 'song_get'} with no job to poll. Errors: price_changed {price_cents}, rate_limited, outcome_unknown.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"song_id": "<song_id>",
"confirm_cents": "<confirm_cents>"
},
"name": "song_analyze"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lyrics | No | ||
| song_id | Yes | A song id from song_from_library. | |
| confirm_cents | Yes | The most the user agreed to pay, in whole cents: pass 3 to allow the 3-cent song charge; with 0 a paid song answers price_changed and charges nothing. | |
| idempotency_key | No | Any unique string (1-200 printable chars) so a retry never buys twice. |