{"openapi":"3.1.0","info":{"title":"Busker — x402 paid transform services","description":"Every POST route is paywalled with x402 (USDC on Base). Call once unpaid to receive a 402 challenge in the Payment-Required header, sign the EIP-3009 authorization, retry with X-Payment. Failed requests are never charged.","version":"0.9.0"},"servers":[{"url":"https://workbot1.oddsys.org"}],"paths":{"/transform":{"post":{"summary":"RemoteSight HTML→Markdown","description":"Convert raw HTML into clean markdown. Typically cuts page tokens by 80-85% before they hit an LLM context window. Price: $0.001 per call (x402 exact, USDC on eip155:8453).","tags":["html","markdown","extraction"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"html":{"type":"string","description":"Raw HTML document to convert to markdown."},"url":{"type":"string","description":"Optional source URL of the page; improves extraction."}},"required":["html"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"title":"Example Domain","markdown":"# Example Domain\n\nThis domain is for use in documentation examples.","extracted":false,"meta":{"inputBytes":1256,"outputChars":68,"estInputTokens":314,"estOutputTokens":17}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/pdf":{"post":{"summary":"RemoteSight PDF→Markdown","description":"Extract clean markdown text from a PDF (text-layer PDFs; no OCR). Turns a document an agent can't cheaply read into compact tokens. Price: $0.002 per call (x402 exact, USDC on eip155:8453).","tags":["pdf","markdown","extraction"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pdfBase64":{"type":"string","description":"Base64-encoded PDF file (text-layer PDFs; no OCR)."}},"required":["pdfBase64"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"markdown":"# Quarterly Report\n\nRevenue grew 12% year over year...","pages":4,"meta":{"inputBytes":84213,"processedPages":4,"outputChars":5120,"estInputTokens":21053,"estOutputTokens":1280}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/ocr":{"post":{"summary":"RemoteSight PDF OCR","description":"OCR a scanned PDF into clean text (Tesseract, English, machine-printed documents). Up to 25 pages per call. PDFs that turn out to have a text layer are extracted the fast way at the same price. Price: $0.01 per call (x402 exact, USDC on eip155:8453).","tags":["ocr","pdf","scanned"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pdfBase64":{"type":"string","description":"Base64-encoded PDF file (scanned/image PDFs; machine-printed text, English)."},"maxPages":{"type":"number","description":"Pages to OCR from the start of the document (1-25, default 10)."}},"required":["pdfBase64"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"markdown":"INVOICE\n\nAcme Supply Co.\n\nItem Qty Price\nWidgets 12 $48.00","pages":2,"meta":{"inputBytes":412876,"totalPages":2,"processedPages":2,"truncated":false,"method":"ocr","outputChars":1840,"estOutputTokens":460}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/extract":{"post":{"summary":"RemoteSight Structured Extract","description":"Extract structured JSON from a web page: title, byline, publish date, Open Graph/meta tags, embedded JSON-LD (schema.org), links, and images. Deterministic, no LLM. Price: $0.002 per call (x402 exact, USDC on eip155:8453).","tags":["html","extraction","metadata"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"html":{"type":"string","description":"Raw HTML document to extract structure from."},"url":{"type":"string","description":"Optional source URL; resolves relative links/images."}},"required":["html"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"title":"Understanding Widgets","byline":"Jane Doe","excerpt":"A practical guide to widgets.","siteName":"Example Blog","publishedTime":"2026-01-15T10:00:00Z","wordCount":850,"meta":{"og:type":"article","description":"A practical guide to widgets."},"jsonLd":[{"@type":"Article","headline":"Understanding Widgets"}],"links":[{"text":"docs","href":"https://example.com/docs"}],"images":[{"src":"https://example.com/hero.png","alt":"widget"}],"text":"Widgets are useful components..."}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/chunk":{"post":{"summary":"RemoteSight RAG Chunker","description":"Split a document into token-bounded chunks at natural boundaries (paragraphs/sentences), with optional overlap. Ready-to-embed pieces for RAG, no tokens spent on the splitting logic. Price: $0.001 per call (x402 exact, USDC on eip155:8453).","tags":["chunking","rag","text"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The document text to split into chunks."},"maxTokens":{"type":"number","description":"Target max tokens per chunk (32–8000, default 512)."},"overlapTokens":{"type":"number","description":"Trailing tokens overlapped into each chunk (default 0)."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"chunks":[{"index":0,"text":"First chunk of the document...","estTokens":480,"chars":{"start":0,"end":1920},"overlapped":false},{"index":1,"text":"Second chunk...","estTokens":502,"chars":{"start":1920,"end":3930},"overlapped":false}],"meta":{"inputChars":3930,"estInputTokens":983,"totalChunks":2,"maxTokens":512,"overlapTokens":0}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/convert":{"post":{"summary":"RemoteSight Format Convert","description":"Convert data between JSON, YAML, CSV, and XML. Deterministic format juggling done off-context, with edge cases handled. Price: $0.001 per call (x402 exact, USDC on eip155:8453).","tags":["convert","json","yaml"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"The source document as text."},"from":{"type":"string","enum":["json","yaml","csv","xml"],"description":"Source format."},"to":{"type":"string","enum":["json","yaml","csv","xml"],"description":"Target format."}},"required":["data","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"from":"csv","to":"json","result":"[\n  { \"name\": \"Ada\", \"role\": \"eng\" }\n]","meta":{"inputChars":22,"outputChars":40}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/qr":{"post":{"summary":"Busker QR Generator","description":"Generate a QR code from text as PNG (base64) or SVG. Custom module size, quiet-zone margin, and hex colours. Deterministic, capacity-capped at 2953 bytes. Price: $0.001 per call (x402 exact, USDC on eip155:8453).","tags":["qr","qrcode","image"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Content to encode (max 2953 bytes utf8 — QR capacity)."},"scale":{"type":"number","description":"Pixels per QR module, PNG only (1-20, default 4)."},"margin":{"type":"number","description":"Quiet-zone width in modules (0-16, default 2)."},"dark":{"type":"string","description":"Hex colour of the data modules (default #000000)."},"light":{"type":"string","description":"Hex colour of the background (default #ffffff)."},"format":{"type":"string","enum":["png","svg"],"description":"Output format (default png)."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"format":"png","dataBase64":"iVBORw0KGgoAAAANSUhEUgAA…","meta":{"inputBytes":23,"modules":25,"scale":4,"margin":2,"dark":"#000000","light":"#ffffff","errorCorrection":"M","outputBytes":412,"pixels":116}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/image":{"post":{"summary":"Busker Image Tools","description":"Modify an image in one call: crop, resize, convert to greyscale, and re-encode (PNG/JPEG/WebP) — applied in that order, any combination. Deterministic, no upscaling surprises. Price: $0.002 per call (x402 exact, USDC on eip155:8453).","tags":["image","resize","crop"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"imageBase64":{"type":"string","description":"Base64-encoded source image (png/jpeg/webp/gif/tiff)."},"crop":{"type":"object","description":"Crop region in source pixels; applied first.","properties":{"left":{"type":"number"},"top":{"type":"number"},"width":{"type":"number"},"height":{"type":"number"}},"required":["width","height"]},"resize":{"type":"object","description":"Target size; fit: cover|contain|fill|inside|outside (default inside).","properties":{"width":{"type":"number"},"height":{"type":"number"},"fit":{"type":"string"}}},"greyscale":{"type":"boolean","description":"Convert to greyscale."},"format":{"type":"string","enum":["png","jpeg","webp"],"description":"Output encoding (default: source format)."},"quality":{"type":"number","description":"JPEG/WebP quality 1-100 (default 80)."}},"required":["imageBase64"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"dataBase64":"/9j/4AAQSkZJRg…","format":"jpeg","meta":{"inputBytes":482113,"inputFormat":"png","inputWidth":1920,"inputHeight":1080,"width":512,"height":288,"outputBytes":18342,"operations":["resize","encode:jpeg"]}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/detect":{"post":{"summary":"Busker Object Detection","description":"Detect and locate objects in an image (YOLOX-nano, COCO classes): people, pets (dog/cat/horse), vehicles, and 70+ more. Returns per-class counts and pixel bounding boxes. Detection only — no identification. Best on clear, medium-to-large objects. Price: $0.01 per call (x402 exact, USDC on eip155:8453).","tags":["detection","vision","image"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"imageBase64":{"type":"string","description":"Base64-encoded image (png/jpeg/webp)."},"classes":{"type":"array","items":{"type":"string"},"description":"Restrict results to these COCO class names (e.g. person, dog, cat, horse, car, bus, truck, motorcycle, bicycle). Omit for all 80 classes."},"minConfidence":{"type":"number","description":"Score threshold 0.05-0.95 (default 0.4)."}},"required":["imageBase64"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"counts":{"person":2,"dog":1},"objects":[{"class":"person","confidence":0.87,"box":{"x":412,"y":108,"width":143,"height":388}},{"class":"person","confidence":0.81,"box":{"x":655,"y":121,"width":130,"height":371}},{"class":"dog","confidence":0.63,"box":{"x":220,"y":340,"width":180,"height":160}}],"meta":{"width":1920,"height":1080,"inputBytes":348211,"model":"yolox-nano","classesFilter":null,"minConfidence":0.4,"inferenceMs":1450}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/embed":{"post":{"summary":"Busker Embeddings","description":"Generate sentence embeddings (all-MiniLM-L6-v2, 384-dim, mean-pooled + L2-normalized) for up to 96 texts per call. Drop-in compatible with any all-MiniLM-L6-v2 index. Pairs with /chunk for a complete RAG pipeline. Price: $0.002 per call (x402 exact, USDC on eip155:8453).","tags":["embeddings","vector","rag"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"texts":{"type":"array","items":{"type":"string"},"description":"1-96 texts to embed (each truncated at 256 tokens)."},"text":{"type":"string","description":"Convenience: a single text instead of the texts array."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"embeddings":[[0.021,-0.043,0.118,"…381 more"]],"meta":{"model":"all-minilm-l6-v2","dimensions":384,"count":1,"totalTokens":9,"normalized":true,"inferenceMs":34}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/fetch":{"post":{"summary":"Busker Fetch & Clean","description":"Fetch a public web page and return clean markdown (or structured JSON) — URL in, agent-ready content out, typically 80-85% fewer tokens than raw HTML. Handles redirects and compression. Price: $0.005 per call (x402 exact, USDC on eip155:8453).","tags":["fetch","scraping","url"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public http/https URL of the page to fetch."},"format":{"type":"string","enum":["markdown","extract"],"description":"markdown (default) = clean prose; extract = structured JSON (title, byline, meta, JSON-LD, links)."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success (payment settled).","content":{"application/json":{"example":{"title":"Example Domain","markdown":"# Example Domain\n\nThis domain is for use in documentation examples.","extracted":false,"source":{"url":"https://example.com/","httpStatus":200,"bytes":1256},"meta":{"inputBytes":1256,"outputChars":68,"estInputTokens":314,"estOutputTokens":17}}}}},"402":{"description":"Payment required — challenge in the Payment-Required response header (base64 JSON)."}}}},"/health":{"get":{"summary":"Liveness probe (free)","responses":{"200":{"description":"ok"}}}}}}