Speech to text

Returns JSON with a Whisper transcription of an audio file: text, timed segments and language, or an English translation.

Use when you need speech to text transcription or translation of audio at a public URL.

Do not use when the audio is over 10 MB or you need speaker labels.

Price: 0.008 USDC per megabyte, up to 0.08 USDC per call; clients without upto pay the cap (x402, eip155:8453). Typical response time: 20000 ms (p95). Asynchronous: the paid call returns a jobId; polling is free.

Call it over HTTP (x402)

POST https://x402-gateway.blackwoodstate8.workers.dev/v1/speech-to-text. A request without payment gets 402 Payment Required with the PAYMENT-REQUIRED header; any x402 client signs an EIP-3009 authorization and retries with PAYMENT-SIGNATURE (or X-PAYMENT). Invalid input is answered with 400 and not charged.

curl -i -X POST https://x402-gateway.blackwoodstate8.workers.dev/v1/speech-to-text -H 'content-type: application/json' -d '{"url":"https://upload.wikimedia.org/wikipedia/commons/b/bb/Neil_Armstrong_small_step.wav"}'
Pay to0xe9949cA82543031952eB55EB045f80A94C728fFc
Asset0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 (USDC)
Amount80000 atomic units (0.08 USDC)
Authorization window60 s
Poll (free)GET https://x402-gateway.blackwoodstate8.workers.dev/v1/speech-to-text/jobs/:jobId

Call it over MCP

Streamable HTTP at https://x402-gateway.blackwoodstate8.workers.dev/mcp, tool speech-to-text_v1. Payment goes in _meta["x402/payment"]; without it the tool returns the payment requirements.

Input

FieldTypeMeaning
urlstringPublic http(s) URL of the audio file (mp3, wav, ogg, m4a, webm; up to 10 MB)
task (optional)stringtranscribe keeps the spoken language; translate returns English (transcribe when omitted)
language (optional)stringISO 639-1 code of the spoken language, e.g. en or pt (detected when omitted)

Example:

{
  "url": "https://upload.wikimedia.org/wikipedia/commons/b/bb/Neil_Armstrong_small_step.wav"
}

Output

Real example of the paid response (the job ticket):

{
  "jobId": "job_00000000000000000000000000000000",
  "pollUrl": "https://gateway.example/v1/speech-to-text/jobs/job_00000000000000000000000000000000",
  "expiresAt": "2026-01-31T00:00:00.000Z",
  "status": "queued"
}
JSON Schema
{
  "type": "object",
  "properties": {
    "jobId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "pollUrl": {
      "type": "string",
      "format": "uri"
    },
    "expiresAt": {
      "type": "string",
      "description": "ISO 8601: depois disso o resultado deixa de existir"
    },
    "status": {
      "type": "string",
      "const": "queued"
    }
  },
  "required": [
    "jobId",
    "pollUrl",
    "expiresAt",
    "status"
  ],
  "additionalProperties": false
}

More

Free schema and example: GET https://x402-gateway.blackwoodstate8.workers.dev/v1/speech-to-text. OpenAPI 3.1 · llms.txt · All services