{"openapi":"3.1.0","info":{"title":"2s","version":"1","description":"Unified JSON REST API for AI agents. Pay per call in USDC on Base via x402 — no accounts, no API keys. Fund an EVM wallet with USDC on Base, hit any endpoint, and your client signs an EIP-3009 transferWithAuthorization to settle the call."},"servers":[{"url":"https://2s.io"}],"components":{"securitySchemes":{"x402Payment":{"type":"apiKey","in":"header","name":"PAYMENT-SIGNATURE","description":"x402 protocol v2: base64-encoded PaymentPayload. Call any paid endpoint without auth to receive a 402 with the PaymentRequirements envelope, sign the EIP-3009 transferWithAuthorization with your USDC-funded EVM key, and retry with PAYMENT-SIGNATURE header. X-PAYMENT is also accepted for v1 buyer clients. See https://x402.org."},"bearerAuth":{"type":"http","scheme":"bearer","description":"INTERNAL/PREVIEW only — bearer-token auth for account-state endpoints. Not advertised; ignore unless you have been issued an internal key."}}},"paths":{"/api/ai/describe-image":{"post":{"tags":["ai"],"summary":"Describe an image. POST { imageUrl, instruction? }. Returns { imageUrl, altText (5-15 word accessibility text), description (2-3 sentences), contentType (photograph|illustration|screenshot|diagram|document|mixed|other), text (verbatim OCR transcription, \"\" if none), mainObjects[], dominantColors[] (hex) }. Accepts JPEG, PNG, GIF, WebP. 1MB image size cap.","operationId":"ai_describe-image","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"Structured image description with OCR + objects + dominant colors.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","properties":{"imageUrl":{"type":"string"},"altText":{"type":"string","description":"Short accessibility text (~5-15 words)."},"description":{"type":"string","description":"2-3 sentence description."},"contentType":{"type":"string","enum":["photograph","illustration","screenshot","diagram","document","mixed","other"]},"text":{"type":"string","description":"Verbatim OCR transcription, \"\" if no text present."},"mainObjects":{"type":"array","items":{"type":"string"},"description":"Salient objects/subjects in the image."},"dominantColors":{"type":"array","items":{"type":"string"},"description":"Hex color codes (e.g. \"#1a3b5f\") of dominant colors."}},"required":["imageUrl","altText","description","contentType","text","mainObjects","dominantColors"],"additionalProperties":false},"meta":{"type":"object","description":"Per-call meta envelope — endpoint id, cost, caller kind, settlement details."}}}}}},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.018 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"ai.describe-image","x-2s-version":null,"x-2s-price":{"usd":0.018,"tier":2},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.018000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"imageUrl":{"type":"string","format":"uri","maxLength":2048,"description":"HTTPS URL of a JPEG, PNG, GIF, or WebP image (≤1MB)."},"instruction":{"type":"string","maxLength":1000,"description":"Optional caller-supplied focus hint, e.g. \"describe the chart axes\"."}},"required":["imageUrl"],"additionalProperties":false}}}}}},"/api/ai/extract":{"post":{"tags":["ai"],"summary":"Extract structured data from a webpage. POST { url, schema, instruction? }. The schema is a JSON Schema object (top-level type:\"object\") describing the shape you want back; output is guaranteed to conform. Returns { url, finalUrl, extracted, meta:{ truncated } }.","operationId":"ai_extract","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.03 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"ai.extract","x-2s-version":null,"x-2s-price":{"usd":0.03,"tier":2},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048},"schema":{"type":"object","additionalProperties":{}},"instruction":{"type":"string","maxLength":2000}},"required":["url","schema"],"additionalProperties":false}}}}}},"/api/ai/screenshot":{"post":{"tags":["ai"],"summary":"Render a URL as a screenshot. POST { url, width?, height?, fullPage?, format?, quality?, waitUntil?, timeoutMs?, deviceScaleFactor?, blockAds? }. Returns raw image bytes (no JSON envelope) with X-2s-Render-Ms and X-2s-Image-Bytes headers. Viewport clamped 320-3840 × 320-2160. Timeout clamped 1-15s. Defaults: 1280×720 PNG, networkidle2 wait, ad-blocking on. Use cases: visual verification, archival, change detection, OG-card generation, RSS thumbnails.","operationId":"ai_screenshot","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"Raw image bytes (PNG / JPEG / WebP per `format`). X-2s-Render-Ms + X-2s-Image-Bytes response headers describe the render. No JSON envelope on success.","content":{"image/*":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0075 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"ai.screenshot","x-2s-version":null,"x-2s-price":{"usd":0.0075,"tier":2},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.007500"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"HTTPS URL to render."},"width":{"type":"integer","minimum":320,"maximum":3840,"description":"Viewport width (320-3840). Default 1280."},"height":{"type":"integer","minimum":320,"maximum":2160,"description":"Viewport height (320-2160). Default 720."},"fullPage":{"type":"boolean","description":"Capture the full scrollable page instead of the viewport."},"format":{"type":"string","enum":["png","jpeg","webp"],"description":"Image format. Default png."},"quality":{"type":"integer","minimum":1,"maximum":100,"description":"JPEG/WebP quality 1-100. Ignored for PNG."},"waitUntil":{"type":"string","enum":["load","domcontentloaded","networkidle0","networkidle2"],"description":"Wait condition before snap. Default networkidle2."},"timeoutMs":{"type":"integer","minimum":1000,"maximum":15000,"description":"Render timeout in milliseconds (1000-15000). Default 8000."},"deviceScaleFactor":{"type":"integer","minimum":1,"maximum":3,"description":"Pixel density multiplier 1-3. Default 1."},"blockAds":{"type":"boolean","description":"Block ads + trackers. Default true."}},"required":["url"],"additionalProperties":false}}}}}},"/api/ai/summarize":{"post":{"tags":["ai"],"summary":"Summarize a webpage. POST { url, instruction? }. Returns { url, finalUrl, summary (1-3 sentences), keyPoints (3-7 bullets), title, audience, estimatedReadingMinutes, meta:{ truncated } }. Sibling to /api/ai/extract — use extract when you need a typed payload conforming to your own schema; use summarize when you want a ready-made digest.","operationId":"ai_summarize","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0225 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"ai.summarize","x-2s-version":null,"x-2s-price":{"usd":0.0225,"tier":2},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.022500"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048},"instruction":{"type":"string","maxLength":1000}},"required":["url"],"additionalProperties":false}}}}}},"/api/ai/translate":{"post":{"tags":["ai"],"summary":"Translate text. POST { text, targetLanguage, sourceLanguage? } — language codes are BCP-47 (e.g. \"en\", \"es-MX\", \"zh-Hans\"). Source auto-detected when omitted. Returns { text, targetLanguage, detectedSourceLanguage, confidence (high|medium|low) }. Best for short-to-medium passages; chunk long documents on your side.","operationId":"ai_translate","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"Translation result with detected source language + confidence.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","properties":{"text":{"type":"string","description":"Translated text in targetLanguage."},"targetLanguage":{"type":"string"},"detectedSourceLanguage":{"type":"string","description":"BCP-47 source language tag (echoed when supplied, detected otherwise)."},"confidence":{"type":"string","enum":["high","medium","low"],"description":"Model confidence in the translation."}},"required":["text","targetLanguage","detectedSourceLanguage","confidence"],"additionalProperties":false},"meta":{"type":"object","description":"Per-call meta envelope — endpoint id, cost, caller kind, settlement details."}}}}}},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0075 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"ai.translate","x-2s-version":null,"x-2s-price":{"usd":0.0075,"tier":2},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.007500"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":6000,"description":"Source text to translate (1-6000 chars)."},"targetLanguage":{"type":"string","minLength":2,"maxLength":20,"description":"Target language as BCP-47 (e.g. \"en\", \"es-MX\", \"zh-Hans\")."},"sourceLanguage":{"type":"string","minLength":2,"maxLength":20,"description":"Source language as BCP-47. Auto-detected when omitted."}},"required":["text","targetLanguage"],"additionalProperties":false}}}}}},"/api/airport/lookup":{"get":{"tags":["airport"],"summary":"Look up an airport by 3-letter IATA (e.g. SFO) or 4-letter ICAO (e.g. KSFO) code. Query: code (3-5 chars, alphanumeric). Returns { airport: { id, ident, type, name, latitude, longitude, elevationFt, continent, isoCountry, isoRegion, municipality, scheduledService, icaoCode, iataCode, gpsCode, localCode, wikipediaLink } } or 404 NOT_FOUND.","operationId":"airport_lookup","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"Single-airport metadata. 404 if no airport matches the code.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","properties":{"airport":{"type":"object","properties":{"id":{"type":"integer","description":"OurAirports stable numeric id."},"ident":{"type":"string","description":"Globally unique identifier (usually ICAO)."},"type":{"type":"string","nullable":true,"description":"large_airport | medium_airport | small_airport | heliport | seaplane_base | closed."},"name":{"type":"string","nullable":true},"latitude":{"type":"number"},"longitude":{"type":"number"},"elevationFt":{"type":"integer","nullable":true},"continent":{"type":"string","nullable":true},"isoCountry":{"type":"string","nullable":true,"description":"ISO 3166-1 alpha-2 country code."},"isoRegion":{"type":"string","nullable":true,"description":"ISO 3166-2 region code (e.g. US-CA)."},"municipality":{"type":"string","nullable":true},"scheduledService":{"type":"boolean","nullable":true},"icaoCode":{"type":"string","nullable":true},"iataCode":{"type":"string","nullable":true},"gpsCode":{"type":"string","nullable":true},"localCode":{"type":"string","nullable":true},"wikipediaLink":{"type":"string","nullable":true}},"required":["id","ident","type","name","latitude","longitude","elevationFt","continent","isoCountry","isoRegion","municipality","scheduledService","icaoCode","iataCode","gpsCode","localCode","wikipediaLink"],"additionalProperties":false},"source":{"type":"object","properties":{"provider":{"type":"string"},"license":{"type":"string"},"url":{"type":"string"}},"required":["provider","license","url"],"additionalProperties":false}},"required":["airport","source"],"additionalProperties":false},"meta":{"type":"object","description":"Per-call meta envelope — endpoint id, cost, caller kind, settlement details."}}}}}},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"airport.lookup","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":5},"description":"3-letter IATA or 4-letter ICAO airport code (e.g. SFO, KSFO)."}]}},"/api/airport/near":{"get":{"tags":["airport"],"summary":"Airports within a radius of a coordinate, sorted by distance. Query: lat (-90..90), lon (-180..180), radius_km (1-2000, default 200), limit (1-100, default 20), type (optional: large_airport|medium_airport|small_airport|heliport|seaplane_base|balloonport|closed), country (optional 2-letter ISO 3166-1), scheduled_service (optional bool, true = commercial-service airports only). Returns { query, count, airports: [{ id, ident, name, iataCode, icaoCode, type, latitude, longitude, distanceKm, ... }] }.","operationId":"airport_near","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"Airports within radius_km of the coordinate, sorted by ascending distance.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","properties":{"query":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"radiusKm":{"type":"number"},"limit":{"type":"integer"},"type":{"type":"string","nullable":true},"country":{"type":"string","nullable":true},"scheduledServiceOnly":{"type":"boolean","nullable":true}},"required":["latitude","longitude","radiusKm","limit","type","country","scheduledServiceOnly"],"additionalProperties":false},"count":{"type":"integer"},"airports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"ident":{"type":"string"},"name":{"type":"string","nullable":true},"iataCode":{"type":"string","nullable":true},"icaoCode":{"type":"string","nullable":true},"type":{"type":"string","nullable":true},"latitude":{"type":"number"},"longitude":{"type":"number"},"distanceKm":{"type":"number","description":"Great-circle distance to (lat, lon), kilometers."},"isoCountry":{"type":"string","nullable":true},"isoRegion":{"type":"string","nullable":true},"municipality":{"type":"string","nullable":true},"scheduledService":{"type":"boolean","nullable":true}},"required":["id","ident","name","iataCode","icaoCode","type","latitude","longitude","distanceKm","isoCountry","isoRegion","municipality","scheduledService"],"additionalProperties":false}},"source":{"type":"object","properties":{"provider":{"type":"string"},"license":{"type":"string"},"url":{"type":"string"}},"required":["provider","license","url"],"additionalProperties":false}},"required":["query","count","airports","source"],"additionalProperties":false},"meta":{"type":"object","description":"Per-call meta envelope — endpoint id, cost, caller kind, settlement details."}}}}}},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"airport.near","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90},"description":"Latitude in decimal degrees (-90 to 90)."},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180},"description":"Longitude in decimal degrees (-180 to 180)."},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":2000,"default":200},"description":"Search radius in kilometers (1-2000). Default 200."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"description":"Max airports to return (1-100). Default 20."},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["large_airport","medium_airport","small_airport","heliport","seaplane_base","balloonport","closed"]},"description":"Filter by airport type."},{"name":"country","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$"},"description":"Filter by ISO 3166-1 alpha-2 country code (e.g. US)."},{"name":"scheduled_service","in":"query","required":false,"schema":{"type":"boolean"},"description":"When true, only commercial-service airports."}]}},"/api/barcode/generate":{"post":{"tags":["barcode"],"summary":"Generate QR / Aztec / Data Matrix / PDF417 codes from structured payloads (url, wifi, vcard, vevent, email, sms, tel, geo, bitcoin, json, text). QR supports rounded or dotted modules, solid colors or linear/radial gradients, transparent backgrounds, configurable error correction, and a centered logo image (URL or data URI).","operationId":"barcode_generate","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"barcode.generate","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"format":{"type":"string","enum":["qr","aztec","datamatrix","pdf417"],"default":"qr"},"data":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"text":{"type":"string","minLength":1,"maxLength":2000}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["url"]},"url":{"type":"string","format":"uri","maxLength":2000}},"required":["type","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["email"]},"to":{"type":"string","format":"email"},"subject":{"type":"string","maxLength":200},"body":{"type":"string","maxLength":1000}},"required":["type","to"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["sms"]},"to":{"type":"string","minLength":1,"maxLength":50},"body":{"type":"string","maxLength":1000}},"required":["type","to"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["phone"]},"number":{"type":"string","minLength":1,"maxLength":50}},"required":["type","number"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["wifi"]},"ssid":{"type":"string","minLength":1,"maxLength":100},"password":{"type":"string","maxLength":200},"security":{"type":"string","enum":["WPA","WEP","none"]},"hidden":{"type":"boolean"}},"required":["type","ssid"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["vcard"]},"name":{"type":"string","minLength":1,"maxLength":200},"firstName":{"type":"string","maxLength":100},"lastName":{"type":"string","maxLength":100},"phone":{"type":"string","maxLength":50},"email":{"type":"string","format":"email"},"org":{"type":"string","maxLength":200},"title":{"type":"string","maxLength":200},"url":{"type":"string","format":"uri"},"note":{"type":"string","maxLength":500}},"required":["type","name"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["geo"]},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"altitude":{"type":"number"}},"required":["type","lat","lon"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bitcoin"]},"address":{"type":"string","minLength":1,"maxLength":100},"amount":{"type":"number","exclusiveMinimum":true,"minimum":0},"label":{"type":"string","maxLength":200},"message":{"type":"string","maxLength":500}},"required":["type","address"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["calendar"]},"title":{"type":"string","minLength":1,"maxLength":200},"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"},"location":{"type":"string","maxLength":200},"description":{"type":"string","maxLength":1000}},"required":["type","title","start","end"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["json"]},"value":{}},"required":["type"],"additionalProperties":false}]},"output":{"type":"string","enum":["svg","png","dataurl"],"default":"svg"},"size":{"type":"integer","minimum":64,"maximum":4096,"default":512},"margin":{"type":"integer","minimum":0,"maximum":16,"default":4},"errorCorrection":{"type":"string","enum":["L","M","Q","H"],"default":"M","description":"L=~7%, M=~15%, Q=~25%, H=~30% recoverable damage (QR only)."},"style":{"type":"object","properties":{"modules":{"type":"string","enum":["square","rounded","dots"]},"foreground":{"anyOf":[{"type":"string"},{"type":"object","properties":{"type":{"type":"string","enum":["linear","radial"],"description":"Gradient type."},"stops":{"type":"array","items":{"type":"object","properties":{"offset":{"type":"number","minimum":0,"maximum":1},"color":{"type":"string"}},"required":["offset","color"],"additionalProperties":false},"minItems":2,"maxItems":10},"rotation":{"type":"number","description":"Linear gradient rotation in degrees."}},"required":["type","stops"],"additionalProperties":false}]},"background":{"type":"string","description":"CSS color or \"transparent\"."},"logo":{"type":"object","properties":{"source":{"type":"string","description":"https:// URL or data: URI. QR only."},"sizePct":{"type":"number","minimum":0.05,"maximum":0.4},"padding":{"type":"number","minimum":0,"maximum":32},"background":{"type":"string"},"cornerRadius":{"type":"number","minimum":0,"maximum":64}},"required":["source"],"additionalProperties":false}},"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}}}},"/api/census/zipcode":{"get":{"tags":["census"],"summary":"US Census ACS 5-year demographics for a ZIP code (ZCTA). Returns population, median age, median household income, poverty rate, household composition, race + ethnicity breakdown, education attainment, workforce (with computed unemployment rate), and housing (with computed owner-occupancy rate and median rent/home value). Backed by ~33k ZCTAs pre-ingested from api.census.gov; refreshed annually. Public-domain US government data.","operationId":"census_zipcode","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"census.zipcode","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"zip","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{5}$"}}]}},"/api/climate/station-near":{"get":{"tags":["climate"],"summary":"Find NOAA GHCN-Daily weather stations near a coordinate. Returns up to 100 stations within a configurable radius (default 500 km), sorted by distance. Each station includes id, name, lat/lon, elevation, country/state, and GSN/HCN/WMO flags. Backed by a ~132k-station registry refreshed monthly from ncei.noaa.gov.","operationId":"climate_station-near","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"climate.station-near","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":5000}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}}]}},"/api/countdown/gif":{"get":{"tags":["countdown"],"summary":"Animated countdown GIF from the current UTC time to endDate. Always uncached. Supports 5 templates (default, minimal, neon, retro, corporate) and full customization: colors, fonts, dimensions, padding, cell padding, labels, dividers. Animates for `seconds` frames at `fps`.","operationId":"countdown_gif","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.006 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"countdown.gif","x-2s-version":null,"x-2s-price":{"usd":0.006,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.006000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"template","in":"query","required":false,"schema":{"type":"string","enum":["default","minimal","neon","retro","corporate"]}},{"name":"seconds","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":60}},{"name":"fps","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10}},{"name":"width","in":"query","required":false,"schema":{"type":"integer","minimum":200,"maximum":1600}},{"name":"height","in":"query","required":false,"schema":{"type":"integer","minimum":80,"maximum":800}},{"name":"padding","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":200}},{"name":"cellPadding","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":200}},{"name":"digitFontSize","in":"query","required":false,"schema":{"type":"integer","minimum":20,"maximum":300}},{"name":"labelFontSize","in":"query","required":false,"schema":{"type":"integer","minimum":6,"maximum":80}},{"name":"labelPaddingY","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":60}},{"name":"digitPaddingY","in":"query","required":false,"schema":{"type":"integer","minimum":-60,"maximum":60}},{"name":"letterSpacing","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":20}},{"name":"bg","in":"query","required":false,"schema":{"type":"string","maxLength":40}},{"name":"fg","in":"query","required":false,"schema":{"type":"string","maxLength":40}},{"name":"labelColor","in":"query","required":false,"schema":{"type":"string","maxLength":40}},{"name":"dividerColor","in":"query","required":false,"schema":{"type":"string","maxLength":40}},{"name":"digitFont","in":"query","required":false,"schema":{"type":"string","enum":["mono","sans"]}},{"name":"labelFont","in":"query","required":false,"schema":{"type":"string","enum":["mono","sans"]}},{"name":"digitWeight","in":"query","required":false,"schema":{"type":"string","enum":["regular","bold"]}},{"name":"showLabels","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["true","false","0","1"]}]}},{"name":"showDays","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["true","false","0","1"]}]}},{"name":"dividerChar","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":3}},{"name":"expiredText","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":30}},{"name":"labelDays","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":12}},{"name":"labelHours","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":12}},{"name":"labelMinutes","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":12}},{"name":"labelSeconds","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":12}}]}},"/api/crypto/address-validate":{"get":{"tags":["crypto"],"summary":"Validate a cryptocurrency address with full checksum verification (not just regex). Returns {chain, address, valid, canonical, format, reason}. Chains: btc (P2PKH, P2SH, Bech32 SegWit v0, Taproot Bech32m), eth (full EIP-55 checksum; non-checksummed flagged), sol (Ed25519 32-byte Base58), ltc (Base58Check L.../M.../3... + ltc1 Bech32), trx (T-prefix Base58Check 0x41), xrp (r-prefix custom Base58), bch (legacy Base58Check + bitcoincash:q... CashAddr). Catches typos via cryptographic checksum; canonical field returns the checksummed/lowercased form.","operationId":"crypto_address-validate","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"crypto.address-validate","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"chain","in":"query","required":true,"schema":{"type":"string","enum":["btc","eth","sol","ltc","trx","xrp","bch"]}},{"name":"address","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100}}]}},"/api/crypto/gas-oracle":{"get":{"tags":["crypto"],"summary":"Live EVM gas oracle. Returns latest block baseFeePerGas + slow/standard/fast tiers derived from priority-fee percentiles (p25/p50/p75) over the trailing 4 blocks, plus a 21,000-gas transfer cost estimate in the chain native unit. Chains: base, ethereum, polygon, arbitrum, optimism. Real-time post-training data, ~5s freshness.","operationId":"crypto_gas-oracle","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"crypto.gas-oracle","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"chain","in":"query","required":true,"schema":{"type":"string","enum":["base","ethereum","polygon","arbitrum","optimism"]},"description":"EVM chain to query: base | ethereum | polygon | arbitrum | optimism."}]}},"/api/dns/lookup":{"get":{"tags":["dns"],"summary":"Resolve a hostname over public DNS and return parsed records. Query: host (required FQDN), types (comma-separated: A,AAAA,MX,TXT,NS,CAA,SRV,CNAME,PTR,SOA — default A,AAAA,MX,TXT,NS), resolver (cloudflare|google|quad9|opendns, optional). Returns one normalized JSON shape per record type with per-type error pass-through. Reserved/local TLDs (.local, .internal, .invalid, .test, localhost) are rejected. 4s per-query timeout.","operationId":"dns_lookup","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"dns.lookup","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"host","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":253}},{"name":"types","in":"query","required":false,"schema":{"type":"string","pattern":"^(A|AAAA|MX|TXT|NS|CAA|SRV|CNAME|PTR|SOA)(,(A|AAAA|MX|TXT|NS|CAA|SRV|CNAME|PTR|SOA)){0,9}$"}},{"name":"resolver","in":"query","required":false,"schema":{"type":"string","enum":["cloudflare","google","quad9","opendns"]}}]}},"/api/domain/whois":{"get":{"tags":["domain"],"summary":"Modern WHOIS via RDAP. Query: domain (e.g. example.com). Returns { domain, ldhName, handle, registrar:{ name, ianaId, url, abuseEmail, abusePhone }, registeredAt, expiresAt, updatedAt, statuses (camelCase ICANN EPP codes), nameservers[], dnssecSigned, rdapUrl }. GDPR: registrant personal data is generally redacted upstream and not returned. Some TLDs without RDAP are not supported and return 404 TLD_NOT_SUPPORTED.","operationId":"domain_whois","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"domain.whois","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":253}}]}},"/api/earth/now":{"get":{"tags":["earth"],"summary":"Situational awareness for a coordinate: recent earthquakes (USGS) and active wildfires (NIFC) within a configurable radius. Returns each with distance-from-query in km, sorted nearest-first. Multi-source synthesis from free US Government feeds. Real-time, post-training data.","operationId":"earth_now","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0012 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"earth.now","x-2s-version":null,"x-2s-price":{"usd":0.0012,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001200"},"protocols":[{"x402":{}}]},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":1000,"default":500}},{"name":"hours","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":168,"default":24}},{"name":"min_magnitude","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":10,"default":2}}]}},"/api/geo/ip":{"get":{"tags":["geo"],"summary":"Geolocate an IPv4/IPv6 address to country, region, city, and coordinates.","operationId":"geo_ip","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"geo.ip","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"ip","in":"query","required":true,"schema":{"type":"string","minLength":1}}]}},"/api/geocode/address":{"get":{"tags":["geocode"],"summary":"Forward geocoding — free-text address or place name → latitude/longitude plus structured address components (houseNumber, road, suburb, city, county, state, postcode, country, countryCode). Query: q (2-500 chars), limit (1-10, default 5), country (optional 2-letter ISO 3166-1 bias). Underlying data is OpenStreetMap (ODbL). Sister: /api/geocode/reverse.","operationId":"geocode_address","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"geocode.address","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":500}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10,"default":5}},{"name":"country","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$"}}]}},"/api/geocode/reverse":{"get":{"tags":["geocode"],"summary":"Reverse geocoding — latitude/longitude → nearest formatted address plus structured components (houseNumber, road, suburb, city, county, state, postcode, country, countryCode). Query: lat (-90..90), lon (-180..180). Underlying data is OpenStreetMap (ODbL). Sister: /api/geocode/address.","operationId":"geocode_reverse","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"geocode.reverse","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180}}]}},"/api/hash/compute":{"post":{"tags":["hash"],"summary":"Compute one or more cryptographic digests (MD5, SHA-1, SHA-2 family, SHA-3 family, BLAKE2) of a string or hex/base64-encoded byte buffer. Returns hex or base64-encoded digests.","operationId":"hash_compute","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"hash.compute","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"string","maxLength":524288},"algorithms":{"type":"array","items":{"type":"string","enum":["md5","sha1","sha224","sha256","sha384","sha512","sha3-224","sha3-256","sha3-384","sha3-512","blake2b512","blake2s256"]},"minItems":1,"maxItems":12},"algorithm":{"type":"string","enum":["md5","sha1","sha224","sha256","sha384","sha512","sha3-224","sha3-256","sha3-384","sha3-512","blake2b512","blake2s256"]},"inputEncoding":{"type":"string","enum":["utf8","hex","base64"],"default":"utf8"},"outputEncoding":{"type":"string","enum":["hex","base64"],"default":"hex"}},"required":["input"],"additionalProperties":false}}}}}},"/api/image/compress":{"post":{"tags":["image"],"summary":"Compress an image. POST exactly one of { url } or { imageBase64 }, plus optional { format?: auto|png|jpeg|webp|avif (default auto = keep input format), quality?: 1-100 (default 75), lossy?: bool (default true), effort?: 1-10 (default 6) }. Returns compressed image bytes directly with X-2s-* headers: Original-Bytes, Compressed-Bytes, Saved-Percent, Output-Format, Source-Format, Source-Width, Source-Height, Process-Ms. Limits: 5MB URL fetch, ~3MB inline body, 4096 × 4096 input pixels. Animated GIF input becomes animated WebP when format=webp or auto.","operationId":"image_compress","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0024 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"image.compress","x-2s-version":null,"x-2s-price":{"usd":0.0024,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002400"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048},"imageBase64":{"type":"string","maxLength":4400000},"format":{"type":"string","enum":["auto","png","jpeg","webp","avif"]},"quality":{"type":"integer","minimum":1,"maximum":100},"lossy":{"type":"boolean"},"effort":{"type":"integer","minimum":1,"maximum":10}},"additionalProperties":false}}}}}},"/api/ipinfo/bulk":{"post":{"tags":["ipinfo"],"summary":"Geolocate up to 100 IPv4/IPv6 addresses in a single call. Returns per-IP results in input order; failed entries include an error object instead of geo fields.","operationId":"ipinfo_bulk","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.006 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"ipinfo.bulk","x-2s-version":null,"x-2s-price":{"usd":0.006,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.006000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ips":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64},"minItems":1,"maxItems":100}},"required":["ips"],"additionalProperties":false}}}}}},"/api/law/case-search":{"get":{"tags":["law"],"summary":"Search US court opinions (SCOTUS, federal circuits, state appellate/supreme — ~9M opinions). Query by free-text (party names, keywords, docket #, citation). Filter by court slug (e.g., \"scotus\", \"ca9\", \"nysupct\"), filing date range, and order (relevance/dateFiled-desc/dateFiled-asc/citeCount-desc). Returns clusterId, caseName, court, year, docket, reporter citations, citationCount, snippet, canonical URL. Discovery-side complement to case-verify. Backed by CourtListener (Free Law Project); underlying opinions are public domain.","operationId":"law_case-search","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0036 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"law.case-search","x-2s-version":null,"x-2s-price":{"usd":0.0036,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003600"},"protocols":[{"x402":{}}]},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":500}},{"name":"court","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z0-9-]{2,40}(,[a-z0-9-]{2,40}){0,9}$"}},{"name":"filedAfter","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"filedBefore","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["relevance","dateFiled-desc","dateFiled-asc","citeCount-desc"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":20,"default":10}}]}},"/api/law/case-verify":{"post":{"tags":["law"],"summary":"Verify US legal case citations in a passage of text. POST { text } where text contains one or more citations (e.g. \"Marbury v. Madison, 5 U.S. 137 (1803)\"). Returns per-citation results with canonical case name, court, year, docket, citationCount, and a public CourtListener URL — or flags the citation as unverified. Anti-hallucination check for legal LLM output. Underlying opinions are public domain; CourtListener (Free Law Project) is the corpus.","operationId":"law_case-verify","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.006 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"law.case-verify","x-2s-version":null,"x-2s-price":{"usd":0.006,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.006000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":30000}},"required":["text"],"additionalProperties":false}}}}}},"/api/law/federal-register":{"get":{"tags":["law"],"summary":"Search the US Federal Register — proposed rules, final rules, notices, and presidential documents. Filter by free-text term, document type (RULE/PRORULE/NOTICE/PRESDOCU), agency slug (e.g., epa, fda, sec), and publication date range. Returns document_number, type, title, abstract, FR citation, agencies, publication_date, effective_on, comments_close_on, htmlUrl, pdfUrl, rawTextUrl. Public-domain US government data. Real-time — published daily, past LLM training cutoff.","operationId":"law_federal-register","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"law.federal-register","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":500}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["RULE","PRORULE","NOTICE","PRESDOCU"]}},{"name":"agency","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z0-9-]{2,60}$"}},{"name":"since","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"until","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":20,"default":10}}]}},"/api/law/opinion":{"post":{"tags":["law"],"summary":"Fetch the full text of a US court opinion by CourtListener opinion ID OR by citation. Returns plain text (preferred), HTML fallback, case metadata (case name, court, year, docket, citation), opinion type (lead/concurrence/dissent), author, and a list of alternate opinions in the same cluster. POST { opinionId?: number, citation?: string } — exactly one required. Anti-hallucination follow-up to case-verify: once you confirm the citation exists, fetch the text. Backed by CourtListener (public-domain underlying corpus).","operationId":"law_opinion","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0048 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"law.opinion","x-2s-version":null,"x-2s-price":{"usd":0.0048,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.004800"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"opinionId":{"type":"integer","exclusiveMinimum":true,"minimum":0},"citation":{"type":"string","minLength":2,"maxLength":500}},"additionalProperties":false}}}}}},"/api/law/sanctions-check":{"post":{"tags":["law"],"summary":"Fuzzy-match a name (person, company, vessel, aircraft) against the US Treasury OFAC Specially Designated Nationals list. POST { query, threshold?, limit?, sourceList? }. Returns ranked matches with similarity scores, entity type, sanctions programs, aliases, and remarks. Threshold default 0.4; scores ≥ 0.85 flagged as hasHighConfidenceMatch. List refreshed daily from public US Treasury data.","operationId":"law_sanctions-check","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0048 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"law.sanctions-check","x-2s-version":null,"x-2s-price":{"usd":0.0048,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.004800"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":2,"maxLength":500},"threshold":{"type":"number","minimum":0.1,"maximum":1},"limit":{"type":"integer","minimum":1,"maximum":100},"sourceList":{"type":"string","maxLength":64}},"required":["query"],"additionalProperties":false}}}}}},"/api/papers/search":{"get":{"tags":["papers"],"summary":"Unified scientific literature search across arXiv (preprints), PubMed (biomedical), and Semantic Scholar (cross-field, with citation counts). Returns a flat array of papers with stable schema: source, sourceId, doi, title, authors, abstract, year, publishedAt, citationCount, url, pdfUrl. Partial failures surface in the errors array rather than failing the whole call. Optional filters: since (YYYY-MM-DD), sources (subset), limit (max 20 per source).","operationId":"papers_search","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0024 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"papers.search","x-2s-version":null,"x-2s-price":{"usd":0.0024,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002400"},"protocols":[{"x402":{}}]},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":500}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":20,"default":10}},{"name":"since","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"sources","in":"query","required":false,"schema":{"type":"string"}}]}},"/api/patents/detail":{"get":{"tags":["patents"],"summary":"Full US patent application file-wrapper detail by application number. Returns bibliographic data (title, inventors, applicants, dates, status, examiner, art unit, docket #, confirmation #) plus the file-wrapper event timeline (filing, IDS, Office Actions, allowance, abandonment, …), continuity chain (parent / continuation / divisional / national stage), recorded assignments (assignor → assignee with reel/frame + conveyance text), and foreign priority claims under 35 USC § 119. Application number is the 6-10 digit USPTO ID (e.g. 18566276).","operationId":"patents_detail","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0018 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"patents.detail","x-2s-version":null,"x-2s-price":{"usd":0.0018,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001800"},"protocols":[{"x402":{}}]},"parameters":[{"name":"applicationNumber","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9]{6,10}$"}}]}},"/api/patents/documents":{"get":{"tags":["patents"],"summary":"List every document in the file wrapper for a US patent application. Returns each document with its USPTO code (e.g. CTNF non-final OA, CTFR final OA, IDS, WCLM claims worksheet, NOA notice of allowance), human-readable description, official date, direction (INTERNAL/INCOMING/OUTGOING), and available formats with page counts. Includes patentCenterUrl pointing at the public USPTO Patent Center documents page for direct PDF download. Application number is the 6-10 digit USPTO ID.","operationId":"patents_documents","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0018 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"patents.documents","x-2s-version":null,"x-2s-price":{"usd":0.0018,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001800"},"protocols":[{"x402":{}}]},"parameters":[{"name":"applicationNumber","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9]{6,10}$"}}]}},"/api/patents/search":{"get":{"tags":["patents"],"summary":"Search US patent applications and grants via the USPTO Open Data Portal. Query: q (required, 2+ chars), yearFrom / yearTo (optional filing-year bounds), applicationType (optional: Utility|Design|Plant|Reissue), limit (1-100, default 10), offset (0-based, default 0). Returns { total, returned, offset, limit, hits[{ applicationNumber, title, applicationType, firstInventor, inventors[], applicants[], filingDate, effectiveFilingDate, status:{ code, description, updatedAt }, cpcSymbols[], uspcSymbol, url }] }. URLs link to USPTO Patent Center for the public file wrapper.","operationId":"patents_search","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0018 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"patents.search","x-2s-version":null,"x-2s-price":{"usd":0.0018,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001800"},"protocols":[{"x402":{}}]},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":500}},{"name":"yearFrom","in":"query","required":false,"schema":{"type":"integer","minimum":1790,"maximum":2100}},{"name":"yearTo","in":"query","required":false,"schema":{"type":"integer","minimum":1790,"maximum":2100}},{"name":"applicationType","in":"query","required":false,"schema":{"type":"string","enum":["Utility","Design","Plant","Reissue"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}}]}},"/api/poi/near":{"get":{"tags":["poi"],"summary":"Find points of interest near a coordinate. Backed by OpenStreetMap via the Overpass API (free, public, ODbL). Returns name, OSM id (e.g. node/123 — deep-linkable to openstreetmap.org), latitude, longitude, distance in meters, composed street address (when present), phone, website, opening hours, brand, and cuisine tags. Results sorted nearest-first. Supported categories: restaurant, cafe, bar, fast_food, gas_station, ev_charging, parking, atm, bank, hospital, pharmacy, clinic, doctor, dentist, police, fire_station, post_office, library, toilets, school, university, supermarket, convenience, hotel, hostel, museum, attraction, park, playground. Query: lat (-90..90), lon (-180..180), category (one of the supported names), radius_m (1-10000, default 1000), limit (1-100, default 20).","operationId":"poi_near","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"poi.near","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"category","in":"query","required":true,"schema":{"type":"string","enum":["restaurant","cafe","bar","fast_food","gas_station","ev_charging","parking","atm","bank","hospital","pharmacy","clinic","doctor","dentist","police","fire_station","post_office","library","toilets","school","university","supermarket","convenience","hotel","hostel","museum","attraction","park","playground"]}},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10000,"default":1000}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}]}},"/api/quakes/recent":{"get":{"tags":["quakes"],"summary":"Recent earthquakes near a coordinate. Returns each quake with magnitude, place name, time (ISO), latitude/longitude/depth, tsunami flag, USGS event URL, and distance-from-query in km — sorted by time descending. Real-time data, post-LLM-training-cutoff. Backed by USGS FDSN event API (public domain). Query: lat (-90..90), lon (-180..180), radius_km (1-1000, default 500), hours (1-720, default 24), min_magnitude (0-10, default 2.0).","operationId":"quakes_recent","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"quakes.recent","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":1000,"default":500}},{"name":"hours","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":720,"default":24}},{"name":"min_magnitude","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":10,"default":2}}]}},"/api/sunrise/compute":{"get":{"tags":["sunrise"],"summary":"Compute sunrise, sunset, solar noon, and civil/nautical/astronomical twilight times for a coordinate + date. Query: lat (-90..90), lon (-180..180), date (YYYY-MM-DD). All times returned as ISO 8601 UTC. At high latitudes near solstices an event may not occur (polar day/night) — those fields return null and a note is included. dayLengthMinutes is the sunrise→sunset interval.","operationId":"sunrise_compute","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"sunrise.compute","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"date","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}]}},"/api/tides/now":{"get":{"tags":["tides"],"summary":"Next high/low tide predictions near a coordinate. Query: lat (-90..90), lon (-180..180), radius_km (1-500, default 100), hours (1-72, default 24). Returns { query, station:{ id, name, latitude, longitude, state, distanceKm }, predictions[{ time (station local), type: \"high\"|\"low\", heightMeters }], source }. Returns 404 NO_STATION if no NOAA tide station is within radius. Heights are referenced to MLLW (Mean Lower-Low Water).","operationId":"tides_now","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"tides.now","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":500,"default":100}},{"name":"hours","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":72,"default":24}}]}},"/api/url/clean":{"get":{"tags":["url"],"summary":"Fetch any URL and return the article content as clean markdown (with optional plain-text version). Strips nav, footer, ads, sidebars, scripts, styles, comments. Heuristic article extraction picks <article> / <main> / role=main / densest content block. SSRF-guarded, 512KB body cap, 8s timeout, 5 redirects max. Returns { url, finalUrl, title, markdown, text, wordCount, sourceBytes }. Sister to /api/url/unfurl (which returns metadata + 500-char preview); use clean when you want the FULL article for LLM consumption.","operationId":"url_clean","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.00108 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"url.clean","x-2s-version":null,"x-2s-price":{"usd":0.00108,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001080"},"protocols":[{"x402":{}}]},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","maxLength":2048}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["markdown","text","both"],"default":"markdown"}}]}},"/api/url/unfurl":{"get":{"tags":["url"],"summary":"Fetch any URL and extract structured page metadata: title, description, og:image, canonical, favicon, site name, author, published time, language, and the first ~500 chars of body text. SSRF-guarded against private networks. 8s timeout, 512 KB max body. Returns the parsed metadata plus the raw og:/twitter:/itemprop meta dictionary for inspection.","operationId":"url_unfurl","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"url.unfurl","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","maxLength":2048}}]}},"/api/weather/zip":{"get":{"tags":["weather"],"summary":"Current weather conditions for a US ZIP code (temperature, wind, humidity, conditions). Backed by the US National Weather Service (api.weather.gov) — public domain, no rate-limit pressure on commercial use.","operationId":"weather_zip","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.0012 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"weather.zip","x-2s-version":null,"x-2s-price":{"usd":0.0012,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001200"},"protocols":[{"x402":{}}]},"parameters":[{"name":"zip","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{5}$"}}]}},"/api/wikipedia/summary":{"get":{"tags":["wikipedia"],"summary":"Fetch a Wikipedia article summary in any of 30 supported languages. Returns title, displayTitle, lang, pageId, description, extract (plain text), extractHtml, lead image, canonical URLs, last-modified timestamp, word count, license, and an attribution string. Backed by https://<lang>.wikipedia.org/api/rest_v1/page/summary. Content is CC BY-SA 4.0 with attribution provided.","operationId":"wikipedia_summary","deprecated":false,"security":[{"x402Payment":[]}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request — invalid parameters."},"402":{"description":"Payment required — costs $0.001 per call. Body contains the x402 PaymentRequirements envelope; sign the EIP-3009 transferWithAuthorization and retry with PAYMENT-SIGNATURE header (X-PAYMENT also accepted for v1 clients)."},"405":{"description":"Method not allowed — see `Allow` header for the supported method."},"500":{"description":"Internal server error."},"502":{"description":"Upstream provider error."}},"x-2s-id":"wikipedia.summary","x-2s-version":null,"x-2s-price":{"usd":0.001,"tier":0},"x-2s-accepts":["x402"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"title","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":300}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","es","fr","de","it","pt","ru","ja","zh","ko","ar","nl","pl","tr","sv","cs","fi","da","no","el","he","hi","th","vi","uk","id","ms","ro","hu","simple"],"default":"en"}}]}}}}