{"service":"serviceworker-transform","description":"POST raw HTML, receive clean markdown. Stateless accelerator.","endpoints":{"POST /transform":{"json":"Content-Type: application/json, body { \"html\": \"...\", \"url\"?: \"...\" }","raw":"Content-Type: text/html, body = raw HTML. Optional Content-Encoding: gzip."},"POST /pdf":{"raw":"Content-Type: application/pdf, body = raw PDF bytes.","json":"Content-Type: application/json, body { \"pdfBase64\": \"...\" }","note":"Text-layer PDFs only; scanned/image PDFs return 422 (no OCR)."},"POST /extract":{"json":"Content-Type: application/json, body { \"html\": \"...\", \"url\"?: \"...\" }","raw":"Content-Type: text/html, body = raw HTML. Optional Content-Encoding: gzip.","note":"Returns structured JSON: title, byline, dates, OG/meta, JSON-LD, links, images."},"POST /chunk":{"json":"Content-Type: application/json, body { \"text\": \"...\", \"maxTokens\"?: 512, \"overlapTokens\"?: 0 }","raw":"Content-Type: text/plain, body = text. Params via ?maxTokens=&overlapTokens=.","note":"Splits a document into token-bounded chunks at natural boundaries, for RAG."},"POST /convert":{"json":"Content-Type: application/json, body { \"data\": \"...\", \"from\": \"json|yaml|csv|xml\", \"to\": \"...\" }","raw":"Content-Type: text/plain, body = data. Formats via ?from=&to=.","note":"Convert between JSON, YAML, CSV, and XML."},"GET /health":"liveness probe"},"limits":{"maxWireBytes":5242880,"maxDecompressedBytes":10485760}}