Convert MP3 to WAV
To convert MP3 to WAV, send one POST to /v1/audio-convert with the MP3 source and "to": "wav" in the body. Left out, "to" falls back to its default "mp3", so a WAV request has to send it. Each call costs $0.003 in USDC on Base via x402, with no account and no API key. The source file can be up to 100 MB and 60 min (3,600 s) long.
- Endpoint
POST /v1/audio-convert- Price
- $0.003 per call
- Service
- audio-convert
01Limits
| Limit | Value |
|---|---|
| Largest source file | 100 MB (104,857,600 bytes) |
| Longest input | 60 min (3,600 s) |
| Timeout | 94 s |
| Source formats | AIFF, AVI, FLAC, MKV, MP3, MP4, Ogg, WAV |
| Output formats | AAC, FLAC, MP3, Opus, WAV |
02Example
A real MP3 to WAV run of audio-convert.
POST /v1/audio-convert
content-type: application/json
payment-signature: <base64 x402 payload>
{
"url": "https://grist.tools/samples/av/pair-tone.mp3",
"to": "wav"
}200 OK
payment-response: <base64 settlement receipt>
{
"source_url": "https://grist.tools/samples/av/pair-tone.mp3",
"bytes": 12980,
"source_container": "mp3",
"format": "wav",
"bitrate_kbps": null,
"sample_rate": null,
"audio_bytes": 48044,
"audio_base64": "UklGRqS7AABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YYC7AABg40Po..."
}Source file: av/pair-tone.mp3, 12.7 KB (12,980 bytes). 3 s mono 8 kHz MP3 at 32 kbit/s, encoded by ffmpeg's libmp3lame with the bit-exact flags: three 0.5 s 500 Hz triangle beeps at rising level, each followed by 0.5 s of silence. The recorded run returned 46.9 KB (48,044 bytes) of WAV, 3.7 times the source size, with the source read as the mp3 container. Decoded, the WAV in audio_base64 opens with 52 49 46 46 A4 BB 00 00 57 41 56 45 (ASCII RIFF and WAVE). Recorded with ffmpeg 8.1.2.
In the sample itself: the file opens with an ID3v2.4 tag with 10 bytes of body, then an MPEG 2.5 Layer III frame header at byte 20: 32 kbps, 8,000 Hz, mono. That first frame is an Info header rather than audio, and it counts 44 audio frames and 12,960 bytes. In the returned WAV: the RIFF header counts 48,036 bytes after itself, and the fmt chunk, in its own field order, declares audio format 1 (integer PCM), 1 channel, 8,000 Hz, 16,000 bytes per second, a block align of 2 bytes and 16 bits per sample. The data chunk right after it holds 48,000 bytes of samples, 3 s at that rate.
03Format notes
MP3 as a source
MP3 is lossy audio. Grist accepts it when the file opens with an ID3v2 tag or with a bare MPEG audio frame sync: the byte FF followed by a byte whose top three bits are set. That sync test also matches a raw ADTS AAC stream, and because nothing proves ffmpeg would then pick the right demuxer, AAC is kept out of the sources. Duration needs care with MP3. For a file without a Xing header, the probe estimates length by dividing file size by the bitrate of the first frames, which a crafted variable-bitrate file can falsify, so any probe warning sends the measurement to a scan of real packet timestamps. Once accepted, the first audio stream is decoded by ffmpeg; a lossless destination stores the decoded samples without recovering what MP3 encoding discarded.
WAV as a target
WAV output is written with the pinned pcm_s16le codec, so every result holds signed little-endian PCM regardless of the source encoding. The WAV muxer fills in its RIFF chunk sizes when the file closes, so Grist points ffmpeg at a seekable temporary file inside the per-call directory and reads it back, rather than streaming to a pipe. A bitrate_kbps value is rejected for this lossless destination instead of being ignored. The optional sample_rate must come from the service's closed set; left out, ffmpeg chooses, normally keeping the source rate. Only the first audio stream is mapped, with video, metadata and chapters removed, and bit-exact flags make the bytes reproducible for the pinned ffmpeg. PCM from a lossy source contains the decoded samples at full size, without restoring detail the earlier codec discarded.
04Errors
| Code | HTTP |
|---|---|
invalid_input | 400 |
blocked_target | 403 |
unreachable_target | 424 |
upstream_timeout | 424 |
unsupported_content_type | 415 |
too_large | 413 |
unprocessable | 422 |
internal | 500 |
When each is raised, and what it means for payment: /docs/audio-convert.
05Questions
- What does it cost to convert MP3 to WAV?
- $0.003 per call, paid in USDC on Base via x402.
- How large can the MP3 file be?
- Up to 100 MB (104,857,600 bytes), and at most 60 min (3,600 s) of media. Past a limit the call answers too_large (413).
- What happens if the conversion fails?
- The tool answers with a typed JSON error from the errors table. Payment is settled only after the tool has produced its result; a call that fails inside the tool is never settled.