Text becomes voice. Voice becomes text.
One call at the edge speaks anything you write, in any voice your account can reach. Send audio the other way and read it back as text. WAVE is media infrastructure for the agentic internet: people and agents call the same route and pay for it per call.
Both directions, one call
curl -X POST https://api.wave.online/v1/voice \
-H "Authorization: Bearer <key>" \
-H "Content-Type: application/json" \
-d '{"text":"Hello from WAVE","voice":"en-US-standard"}'
→ audio/mpeg
Streaming and batch land on the same endpoint. The synthesis reply carries per-character end times alongside the audio, so a caption track or a lip-sync cue falls out of the same request that made the sound.
The price is a signed quote, and it goes stale.
Ask this route without a key and it does not send you to a pricing page. It answers 402 and hands back the quote it intends to bill: the meter, the units, the amount, and a signature over all three. Post the line below with no key and read your own.
$ curl -s -X POST https://gateway.wave.online/v1/voice 402 "maxAmountRequired": "300000" USDC, six decimals → $0.300000 "extra": { "quote_token": "eyJtZXRlciI6..." } $ base64url-decode that token {"meter":"wave_voice_minutes_premium","units":1, "amount_atomic":"300000","route":"/v1/voice", "iat":1788480514,"exp":1788480814}
Three hundred seconds between iat and exp. The quote names the meter it will charge, carries a signature, and expires. An agent reads it, decides, and settles without waiting on a person. A rate card can do none of that.
One key, every plane
Voice is one plane on WAVE. The key that speaks and listens here moves media over WAVE transports, bridges studio audio onto IP, and settles through one gateway. Every minute lands on one bill, in one place, under a meter you can read before you spend it.