{"openapi":"3.1.0","info":{"title":"Transcript Pack","version":"1.0.0","description":"Transcript Pack by Rowan Vale: audio to transcript, WebVTT captions and AI show notes. Pay per pack with x402 (USDC on Base); no account or API key.","x-guidance":"Transcript Pack turns audio into a transcript (.txt), WebVTT captions (.vtt) and AI-generated show notes (.md). 1) Buy a one-time token: POST /api/x402/t10 ($0.10, audio up to 10 min), /api/x402/t30 ($0.25, up to 30 min) or /api/x402/t60 ($0.45, up to 60 min) with an empty JSON body {} and any x402 client (USDC on Base). The paid response is {\"token\":\"...\"}. 2) Decode your audio yourself and split it into chunks: 16 kHz, mono, 16-bit PCM WAV (44-byte header), at most 60 s and at most 1,950,000 bytes each. chunkCount must be between ceil(durationSec/60) and ceil(durationSec/50)+1 (aim for ~60 s chunks). 3) POST /api/job with {\"token\":\"...\",\"durationSec\":<total seconds>,\"chunkCount\":<n>}. Returns {\"jobId\":\"...\"}. The token is used up once a job starts. 4) For i = 0..n-1: POST /api/job/{jobId}/chunk/{i} with Content-Type audio/wav and the WAV bytes as the body (Content-Length required). Returns {\"index\":i,\"segments\":k,\"ms\":t}. 5) POST /api/job/{jobId}/finish. Then GET /api/job/{jobId}/transcript.txt, /captions.vtt and /shownotes.md. GET /api/job/{jobId} shows status. Human result page: /result.html?job={jobId}. The x402 routes also answer GET with the same price. Job, chunk and download routes are free once you hold a token. Outputs are AI-generated and may contain errors.","x-logo":{"url":"https://transcript-pack.toolschemaforge.workers.dev/icon.png"}},"servers":[{"url":"https://transcript-pack.toolschemaforge.workers.dev"}],"components":{"securitySchemes":{}},"paths":{"/api/x402/t10":{"post":{"operationId":"buyToken_t10","summary":"Buy a one-time job token for audio up to 10 min ($0.10)","description":"Sells a one-time Transcript Pack job token for audio up to 10 min ($0.10 USDC on Base). Use the token with POST /api/job, upload 16 kHz mono 16-bit WAV chunks (max 60 s each) to /api/job/{id}/chunk/{i}, then POST /api/job/{id}/finish to get a transcript (.txt), captions (.vtt) and AI show notes (.md). See /llms.txt.","tags":["paid"],"x-x402":{"price":"$0.10","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x7a3C00Ef0969378A3E74455cde3Dc87C0f016dfa","scheme":"exact"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.100000"},"protocols":[{"x402":{}}]},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Empty object; send {}"},"example":{}}}},"responses":{"200":{"description":"One-time job token","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"One-time job token. Use it once with POST /api/job."}},"required":["token"]},"example":{"token":"<one-time token>"}}}},"402":{"description":"Payment required: x402 v2 challenge in the PAYMENT-REQUIRED header, mirrored in the JSON body (USDC on Base)."}}}},"/api/x402/t30":{"post":{"operationId":"buyToken_t30","summary":"Buy a one-time job token for audio up to 30 min ($0.25)","description":"Sells a one-time Transcript Pack job token for audio up to 30 min ($0.25 USDC on Base). Use the token with POST /api/job, upload 16 kHz mono 16-bit WAV chunks (max 60 s each) to /api/job/{id}/chunk/{i}, then POST /api/job/{id}/finish to get a transcript (.txt), captions (.vtt) and AI show notes (.md). See /llms.txt.","tags":["paid"],"x-x402":{"price":"$0.25","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x7a3C00Ef0969378A3E74455cde3Dc87C0f016dfa","scheme":"exact"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.250000"},"protocols":[{"x402":{}}]},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Empty object; send {}"},"example":{}}}},"responses":{"200":{"description":"One-time job token","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"One-time job token. Use it once with POST /api/job."}},"required":["token"]},"example":{"token":"<one-time token>"}}}},"402":{"description":"Payment required: x402 v2 challenge in the PAYMENT-REQUIRED header, mirrored in the JSON body (USDC on Base)."}}}},"/api/x402/t60":{"post":{"operationId":"buyToken_t60","summary":"Buy a one-time job token for audio up to 60 min ($0.45)","description":"Sells a one-time Transcript Pack job token for audio up to 60 min ($0.45 USDC on Base). Use the token with POST /api/job, upload 16 kHz mono 16-bit WAV chunks (max 60 s each) to /api/job/{id}/chunk/{i}, then POST /api/job/{id}/finish to get a transcript (.txt), captions (.vtt) and AI show notes (.md). See /llms.txt.","tags":["paid"],"x-x402":{"price":"$0.45","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x7a3C00Ef0969378A3E74455cde3Dc87C0f016dfa","scheme":"exact"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.450000"},"protocols":[{"x402":{}}]},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Empty object; send {}"},"example":{}}}},"responses":{"200":{"description":"One-time job token","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"One-time job token. Use it once with POST /api/job."}},"required":["token"]},"example":{"token":"<one-time token>"}}}},"402":{"description":"Payment required: x402 v2 challenge in the PAYMENT-REQUIRED header, mirrored in the JSON body (USDC on Base)."}}}},"/api/job":{"post":{"operationId":"startJob","summary":"Start a job with a paid token (free; uses up the token)","tags":["free"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token","durationSec","chunkCount"],"properties":{"token":{"type":"string"},"durationSec":{"type":"number","description":"Total audio length in seconds (within the tier limit)"},"chunkCount":{"type":"integer","minimum":1}}},"example":{"token":"<one-time token>","durationSec":125.4,"chunkCount":3}}}},"responses":{"200":{"description":"Job started","content":{"application/json":{"example":{"jobId":"<job id>","chunkCount":3}}}},"400":{"description":"duration_exceeds_tier or invalid input"},"402":{"description":"Missing, invalid or already used token (buy one from /api/x402/{tier})"}}}},"/api/job/{id}":{"get":{"operationId":"getJob","summary":"Job status (chunksDone, status, timings)","tags":["free"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job status"},"404":{"description":"Job not found"}}}},"/api/job/{id}/chunk/{i}":{"post":{"operationId":"uploadChunk","summary":"Upload and transcribe chunk i: 16 kHz mono 16-bit PCM WAV, at most 60 s and 1950000 bytes","tags":["free"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"i","in":"path","required":true,"schema":{"type":"integer","minimum":0}}],"requestBody":{"required":true,"content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Chunk transcribed","content":{"application/json":{"example":{"index":0,"segments":12,"ms":2300}}}},"400":{"description":"Invalid input (JSON {error, message})"},"404":{"description":"Job not found"},"409":{"description":"Chunk already uploaded or job not active"},"411":{"description":"Content-Length required"},"413":{"description":"Chunk too large"}}}},"/api/job/{id}/finish":{"post":{"operationId":"finishJob","summary":"Merge chunks and write show notes (after all chunks are uploaded)","tags":["free"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Done","content":{"application/json":{"example":{"ok":true}}}},"404":{"description":"Job not found"},"409":{"description":"Some chunks are missing"}}}},"/api/job/{id}/transcript.txt":{"get":{"operationId":"getTranscript","summary":"Download transcript.txt","tags":["free"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"transcript.txt","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Job not found"}}}},"/api/job/{id}/captions.vtt":{"get":{"operationId":"getCaptions","summary":"Download captions.vtt (WebVTT)","tags":["free"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"captions.vtt (WebVTT)","content":{"text/vtt":{"schema":{"type":"string"}}}},"404":{"description":"Job not found"}}}},"/api/job/{id}/shownotes.md":{"get":{"operationId":"getShowNotes","summary":"Download shownotes.md","tags":["free"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"shownotes.md","content":{"text/markdown":{"schema":{"type":"string"}}}},"404":{"description":"Job not found"}}}},"/api/config":{"get":{"operationId":"getConfig","summary":"Tiers, prices, chunk limits and payTo address","tags":["free"],"security":[],"responses":{"200":{"description":"Config","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/fetch-audio":{"get":{"operationId":"fetchAudio","summary":"Proxy a public audio URL for in-browser decoding (rate limited)","tags":["free"],"security":[],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"}}],"responses":{"200":{"description":"Audio bytes"},"400":{"description":"Invalid URL"},"429":{"description":"Rate limited"}}}},"/openapi.json":{"get":{"operationId":"openapi","summary":"This OpenAPI document","tags":["free"],"security":[],"responses":{"200":{"description":"OK"}}}},"/llms.txt":{"get":{"operationId":"llmsTxt","summary":"Plain-text guide for LLM agents","tags":["free"],"security":[],"responses":{"200":{"description":"OK"}}}},"/.well-known/x402":{"get":{"operationId":"wellKnownX402","summary":"x402 resource list","tags":["free"],"security":[],"responses":{"200":{"description":"OK"}}}}}}