{
  "network": "base",
  "currency": "USDC",
  "scheme": "exact",
  "agentId": 47167,
  "identityRegistry": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
  "generatedAt": "2026-05-18T03:24:00.861Z",
  "totalServices": 244,
  "services": {
    "13f-deltas": {
      "slug": "13f-deltas",
      "price": "0.05",
      "cluster": "edge-finance",
      "description": "13F-HR position-delta computation — diff the two most recent 13F-HR filings for an institutional CIK. Returns added/exited/increased/reduced positions with dollar deltas.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "sec-filings",
        "13f",
        "institutional-holdings",
        "position-changes",
        "hedge-fund-tracking",
        "13f-deltas"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "cik": {
            "type": "string",
            "description": "Institutional manager's SEC CIK (e.g. '0001067983' for Berkshire Hathaway). Required — 13F filings are by CIK only, no ticker."
          },
          "limit_holdings": {
            "type": "number",
            "description": "Max positions to include in each bucket (added/exited/increased/reduced). 1-50. Default 20."
          },
          "min_change_usd": {
            "type": "number",
            "description": "Filter out moves smaller than this dollar magnitude. Default 0 (no filter)."
          }
        },
        "required": [
          "cik"
        ]
      },
      "outputProperties": {
        "summary": {
          "type": "string",
          "description": "Counts of added, exited, increased, and reduced positions plus net dollar delta across the two filings."
        }
      },
      "url": "https://x402.org/v1/13f-deltas"
    },
    "address-geocode": {
      "slug": "address-geocode",
      "price": "0.02",
      "cluster": "locale",
      "description": "Geocoder / address-to-lat-lng / location resolver. Address or place-name → coords + structured parts (road, city, state, postcode, country). Powered by OpenStreetMap Nominatim (free public).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "geocode",
        "location",
        "maps",
        "osm",
        "nominatim"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Free-form address, postal code, place name, or POI. Examples: '1600 Amphitheatre Parkway, Mountain View, CA', '10115 Berlin', 'Eiffel Tower'."
          },
          "country_codes": {
            "type": "array",
            "description": "Optional ISO 3166-1 alpha-2 filter, e.g. ['us','ca']."
          },
          "limit": {
            "type": "number",
            "description": "1-10. Default 5."
          }
        },
        "required": [
          "address"
        ]
      },
      "outputProperties": {
        "query": {
          "type": "string",
          "description": "Echo of the address or place-name string that was geocoded."
        },
        "match_count": {
          "type": "number",
          "description": "Number of candidate matches Nominatim returned for the query."
        },
        "results": {
          "type": "array",
          "description": "Array of geocoded candidates, each with lat/lng plus parsed road, city, state, postcode, and country parts."
        },
        "best_match": {
          "type": "object",
          "description": "Top-ranked candidate object with coordinates and structured address parts for the most likely location."
        },
        "source": {
          "type": "string",
          "description": "Upstream geocoding provider that produced the results, e.g. 'openstreetmap-nominatim'."
        }
      },
      "url": "https://x402.org/v1/address-geocode"
    },
    "agent-card-resolve": {
      "slug": "agent-card-resolve",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Agent card resolver / ERC-8004 Identity Registry lookup / Trustless Agents / agentId → owner + agentURI / A2A identity / agent.json fetch / on-chain agent metadata. Pass an ERC-8004 agentId (uint256 on Base) — returns the on-chain owner address, the agentURI from the Identity Registry, and the resolved agent card JSON (set fetch_card=false to skip the HTTP follow-up). Reads from Base mainnet Identity Registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 via a static eth_call (no gas, no wallet). Useful for agents discovering peers in the A2A ecosystem.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "erc-8004",
        "agent",
        "identity",
        "registry",
        "trustless-agents",
        "a2a",
        "base"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "agent_id": {
            "type": [
              "integer",
              "string"
            ],
            "description": "ERC-8004 agentId on Base — non-negative integer. Accepted as number or decimal string."
          },
          "fetch_card": {
            "type": "boolean",
            "description": "If true (default), also fetches the resolved agentURI and embeds the JSON agent card in the response. Set false to skip the HTTP fetch."
          }
        },
        "required": [
          "agent_id"
        ]
      },
      "outputProperties": {
        "agent_id": {
          "type": "number",
          "description": "ERC-8004 agentId (uint256) that was resolved on the Base Identity Registry."
        },
        "network": {
          "type": "string",
          "description": "Chain the registry was read from, e.g. \"base\" for Base mainnet."
        },
        "identity_registry": {
          "type": "string",
          "description": "Contract address of the ERC-8004 Identity Registry on Base used for the lookup."
        },
        "owner": {
          "type": "string",
          "description": "On-chain owner address returned by the Identity Registry for this agentId."
        },
        "agent_uri": {
          "type": "string",
          "description": "agentURI string stored on-chain for this agent, typically an https:// or ipfs:// URL."
        },
        "agent_card": {
          "type": "object",
          "description": "Resolved agent card JSON fetched from agentURI; null when fetch_card=false or fetch failed."
        },
        "agent_card_fetch_error": {
          "type": [
            "string",
            "null"
          ],
          "description": "Error message if the agentURI HTTP fetch failed, otherwise null."
        },
        "rpc_used": {
          "type": "string",
          "description": "Base RPC endpoint URL that served the eth_call for the registry read."
        },
        "source": {
          "type": "string",
          "description": "Identifier of the resolver service that produced this response."
        },
        "attribution": {
          "type": "string",
          "description": "Credit string pointing back to the x402 agent-card-resolve endpoint."
        }
      },
      "url": "https://x402.org/v1/agent-card-resolve"
    },
    "ai-content-detector": {
      "slug": "ai-content-detector",
      "price": "0.03",
      "cluster": "prooflayer",
      "description": "AI content detector / GPT detector / ChatGPT plagiarism checker. Calibrated probability (0-1), verdict, suspicious phrases, per-axis style signals (em-dash overuse, hedge phrases, formulaic transitions).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "ai-detection",
        "content",
        "moderation",
        "llm",
        "classify"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "100-20,000 chars."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "probability_ai_generated": {
          "type": "number",
          "description": "Calibrated 0-1 probability that the submitted text was AI-generated."
        },
        "verdict": {
          "type": "string",
          "description": "Short label summarizing the call, like \"likely_ai\", \"likely_human\", or \"uncertain\"."
        },
        "confidence": {
          "type": "number",
          "description": "0-1 score for how strongly the per-axis signals agree on the verdict."
        },
        "reasoning": {
          "type": "array",
          "description": "Ordered list of human-readable reasons backing the verdict, citing which signals fired."
        },
        "suspicious_phrases": {
          "type": "array",
          "description": "Verbatim snippets from the input flagged as characteristic AI phrasing."
        },
        "style_signals": {
          "type": "object",
          "description": "Per-axis style scores: em-dash overuse, hedge phrases, formulaic transitions, and similar."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the submitted text after normalization."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the classifier model that produced the verdict."
        }
      },
      "url": "https://x402.org/v1/ai-content-detector"
    },
    "ai-to-human-text": {
      "slug": "ai-to-human-text",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "AI text humanizer / GPT detector bypass. Strips telltale LLM patterns (formulaic transitions, em-dash overuse, 'delve' / 'tapestry' / 'navigate the landscape'). 4 tones.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "humanize",
        "rewriter",
        "ai-detection",
        "paraphrase",
        "text"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text to humanize. Max 12,000 characters."
          },
          "tone": {
            "type": "string",
            "enum": [
              "neutral",
              "casual",
              "professional",
              "academic"
            ],
            "description": "'neutral' (default), 'casual', 'professional', or 'academic'."
          },
          "preserve_length": {
            "type": "boolean",
            "description": "If true (default), keep within ±15% of source length. If false, tighten freely."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "text": {
          "type": "string",
          "description": "Rewritten text."
        },
        "tone": {
          "type": "string",
          "description": "Tone applied."
        },
        "input_chars": {
          "type": "number",
          "description": "Source character count."
        },
        "output_chars": {
          "type": "number",
          "description": "Rewritten character count."
        },
        "model": {
          "type": "string",
          "description": "Model used for the rewrite."
        }
      },
      "url": "https://x402.org/v1/ai-to-human-text"
    },
    "airport-delays": {
      "slug": "airport-delays",
      "price": "0.02",
      "cluster": "locale",
      "description": "FAA NAS Status — current US airport delays, ground stops, ground delay programs, weather-driven program changes. Federal public, no auth.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "aviation",
        "airports",
        "flight-delays",
        "faa",
        "ground-stops",
        "nas-status",
        "airport-delays"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "airport": {
            "type": "string",
            "description": "IATA-3 (e.g. 'JFK')."
          },
          "event_type": {
            "type": "string",
            "enum": [
              "delay",
              "ground_stop",
              "ground_delay",
              "closure",
              "all"
            ],
            "description": "Filter event class. 'ground_stop' = full traffic halt, 'ground_delay' = GDP metering, 'delay' = arrival/departure delay, 'closure' = airport/runway closed, 'all' = no filter (default)."
          }
        }
      },
      "outputProperties": {
        "matched": {
          "type": "string",
          "description": "Airport code or facility name the FAA NAS Status query resolved to (e.g., 'JFK', 'ORD')."
        },
        "summary": {
          "type": "string",
          "description": "Plain-text rundown of current delays, ground stops, and ground delay programs at the matched airport."
        }
      },
      "url": "https://x402.org/v1/airport-delays"
    },
    "arbitrage-spread": {
      "slug": "arbitrage-spread",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Cross-exchange arbitrage spread / max-min price / CEX price dispersion / spread % calculator. For any CoinGecko-listed coin, pulls every tracked exchange ticker, computes the lowest and highest USD-converted prices, the spread %, and identifies which exchanges sit at each extreme plus the highest-volume venue. Filters out stale or anomalous tickers.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "crypto",
        "arbitrage",
        "price-spread",
        "cex-prices",
        "exchange-tickers",
        "cross-exchange",
        "arbitrage-spread"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "coingecko_id": {
            "type": "string",
            "description": "CoinGecko coin id (e.g. 'ethereum', 'bitcoin')."
          },
          "target": {
            "type": "string",
            "description": "Quote currency to filter for (e.g. 'USDT'). Optional — converted USD prices are used regardless."
          }
        },
        "required": [
          "coingecko_id"
        ]
      },
      "outputProperties": {
        "coingecko_id": {
          "type": "string",
          "description": "CoinGecko ID of the coin that was analyzed (e.g., bitcoin, ethereum)."
        },
        "ticker_count": {
          "type": "string",
          "description": "Number of exchange tickers included after filtering out stale or anomalous quotes."
        },
        "min_price_usd": {
          "type": "string",
          "description": "Lowest USD-converted price observed across all tracked exchange tickers."
        },
        "max_price_usd": {
          "type": "string",
          "description": "Highest USD-converted price observed across all tracked exchange tickers."
        },
        "spread_pct": {
          "type": "string",
          "description": "Percent gap between max and min price, computed as (max - min) / min * 100."
        },
        "lowest_price_exchange": {
          "type": "string",
          "description": "Name of the exchange quoting the lowest USD-converted price."
        },
        "highest_price_exchange": {
          "type": "string",
          "description": "Name of the exchange quoting the highest USD-converted price."
        },
        "top_exchange_by_volume": {
          "type": "string",
          "description": "Name of the exchange with the largest 24h USD trading volume for this coin."
        },
        "top_volume_usd": {
          "type": "string",
          "description": "24h USD trading volume at the highest-volume venue for this coin."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider for the ticker set (CoinGecko)."
        }
      },
      "url": "https://x402.org/v1/arbitrage-spread"
    },
    "archive-snapshot": {
      "slug": "archive-snapshot",
      "price": "0.02",
      "cluster": "web-probe",
      "description": "Wayback Machine API / archive.org wrapper. Returns closest archived snapshot URL + timestamp. Optionally fetches and cleans the archived page text. For historical content + reference rot fixes.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "archive",
        "wayback",
        "history",
        "monitor"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Original URL to look up in the Wayback Machine archive."
          },
          "timestamp": {
            "type": "string",
            "description": "ISO 8601, YYYY-MM-DD, YYYYMMDD, or YYYYMMDDhhmmss."
          },
          "fetch_text": {
            "type": "boolean",
            "description": "Also fetch + clean the archived page. Default false."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "requested_url": {
          "type": "string",
          "description": "Echoes back the URL submitted for archive lookup."
        },
        "snapshot_url": {
          "type": "string",
          "description": "Direct link to the closest archived snapshot on web.archive.org."
        },
        "snapshot_timestamp": {
          "type": "string",
          "description": "Wayback Machine timestamp of the snapshot in YYYYMMDDhhmmss format."
        },
        "snapshot_iso_timestamp": {
          "type": "string",
          "description": "Snapshot capture time as an ISO 8601 datetime string."
        },
        "snapshot_status": {
          "type": "string",
          "description": "HTTP status code the archive recorded when it captured the original page."
        },
        "archived_text": {
          "type": "string",
          "description": "Cleaned plain-text body extracted from the archived page, when text fetch was requested."
        },
        "archived_text_chars": {
          "type": "number",
          "description": "Character count of the cleaned archived_text payload."
        },
        "archive_fetch_status": {
          "type": "number",
          "description": "HTTP status code returned when fetching the snapshot page from web.archive.org."
        },
        "source": {
          "type": "string",
          "description": "Upstream archive provider used for the lookup, e.g. wayback or archive.org."
        }
      },
      "url": "https://x402.org/v1/archive-snapshot"
    },
    "arxiv-bibtex": {
      "slug": "arxiv-bibtex",
      "price": "0.002",
      "cluster": "web-probe",
      "description": "arXiv to BibTeX / arxiv citation generator / paper bibtex / LaTeX citation builder / academic citation lookup. Pulls a paper's title, authors, year, abstract, and DOI from the arXiv API and generates a properly-formatted BibTeX entry with an auto-derived cite key (or your own). Free public arXiv API. Pure XML parse — no upstream auth.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "bibtex",
        "arxiv",
        "citation-generator",
        "academic-papers",
        "latex",
        "doi-lookup",
        "arxiv-bibtex"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "arxiv_id": {
            "type": "string",
            "description": "arXiv ID. New-style (e.g. '1706.03762', '1706.03762v3') or old-style ('cs.AI/0602099'). 'arXiv:' prefix is stripped."
          },
          "cite_key": {
            "type": "string",
            "description": "Override the cite key. Default is auto-derived from first author surname + year + arxiv id."
          }
        },
        "required": [
          "arxiv_id"
        ]
      },
      "outputProperties": {
        "arxiv_id": {
          "type": "string",
          "description": "Normalized arXiv identifier of the paper (e.g., 2301.12345 or older-style cs.AI/0301001)."
        },
        "cite_key": {
          "type": "string",
          "description": "BibTeX citation key used inside the entry, either auto-derived from first author + year or your override."
        },
        "title": {
          "type": "string",
          "description": "Paper title as listed on arXiv, with LaTeX escaping applied for the BibTeX entry."
        },
        "authors": {
          "type": "string",
          "description": "Author list joined for the BibTeX author field, formatted as 'Last, First and Last, First'."
        },
        "year": {
          "type": "string",
          "description": "Four-digit publication year pulled from the arXiv submission or update date."
        },
        "abstract": {
          "type": "string",
          "description": "Paper abstract text scraped from the arXiv API response."
        },
        "doi": {
          "type": "string",
          "description": "DOI string if arXiv has one registered for the paper, otherwise empty."
        },
        "bibtex": {
          "type": "string",
          "description": "Fully-formatted BibTeX @article entry ready to paste into a .bib file."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source label, set to 'arxiv' for entries built from the arXiv API."
        }
      },
      "url": "https://x402.org/v1/arxiv-bibtex"
    },
    "arxiv-search": {
      "slug": "arxiv-search",
      "price": "0.03",
      "cluster": "web-probe",
      "description": "arXiv full-text search. Search by query / author / category / id-list. Returns title, authors, abstract, primary category, dates, PDF URL, DOI. Public arXiv API.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "arxiv",
        "academic-search",
        "research-papers",
        "preprints",
        "scholarly-search",
        "paper-search",
        "arxiv-search"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Free-text search terms matched against arXiv paper titles, abstracts, and full text."
          },
          "author": {
            "type": "string",
            "description": "Author name to filter results by (matches arXiv author field)."
          },
          "category": {
            "type": "string",
            "description": "arXiv subject category code to filter by (e.g. cs.AI, math.NT, hep-th)."
          },
          "id_list": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Specific arXiv IDs to fetch directly instead of running a search query."
          },
          "limit": {
            "type": "number",
            "description": "Maximum number of papers to return in the response."
          },
          "sort_by": {
            "type": "string",
            "enum": [
              "relevance",
              "lastUpdatedDate",
              "submittedDate"
            ],
            "description": "Field to sort results by, such as relevance, lastUpdatedDate, or submittedDate."
          },
          "sort_order": {
            "type": "string",
            "enum": [
              "ascending",
              "descending"
            ],
            "description": "Sort direction, either ascending or descending."
          },
          "include_abstract": {
            "type": "boolean",
            "description": "Whether to include the full paper abstract in each returned result."
          }
        }
      },
      "outputProperties": {
        "total_results": {
          "type": "string",
          "description": "Total number of arXiv papers matching the search query before the limit is applied."
        },
        "returned": {
          "type": "string",
          "description": "Number of papers actually included in this response after applying the limit."
        }
      },
      "url": "https://x402.org/v1/arxiv-search"
    },
    "arxiv-summarize": {
      "slug": "arxiv-summarize",
      "price": "0.04",
      "cluster": "web-probe",
      "description": "arXiv paper summarizer / research-paper TLDR. Given an arXiv ID or URL, fetches the abstract via arXiv API and produces structured summary: TLDR, key findings, methods, limitations, so-what, keywords. Plus authors, categories, DOI, PDF URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "arxiv",
        "research",
        "summarize",
        "papers",
        "science"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "arxiv_id_or_url": {
            "type": "string",
            "description": "arXiv paper identifier (e.g. 2301.12345) or full arXiv abs/pdf URL to summarize."
          },
          "include_abstract": {
            "type": "boolean",
            "description": "Include the raw abstract in response. Default true."
          }
        },
        "required": [
          "arxiv_id_or_url"
        ]
      },
      "outputProperties": {
        "arxiv_id": {
          "type": "string",
          "description": "Canonical arXiv ID parsed from the input (e.g. 2301.12345)."
        },
        "arxiv_url": {
          "type": "string",
          "description": "Canonical arXiv abstract page URL for the paper."
        },
        "pdf_url": {
          "type": "string",
          "description": "Direct URL to the paper's PDF on arxiv.org."
        },
        "title": {
          "type": "string",
          "description": "Paper title as registered on arXiv."
        },
        "authors": {
          "type": "array",
          "description": "Array of author names listed on the arXiv submission."
        },
        "primary_category": {
          "type": "string",
          "description": "Primary arXiv category code for the paper (e.g. cs.LG, hep-th)."
        },
        "categories": {
          "type": "array",
          "description": "All arXiv category codes the paper is cross-listed under."
        },
        "published": {
          "type": "string",
          "description": "ISO 8601 timestamp of the paper's initial arXiv submission."
        },
        "updated": {
          "type": "string",
          "description": "ISO 8601 timestamp of the most recent arXiv revision."
        },
        "doi": {
          "type": "string",
          "description": "DOI associated with the paper, if registered on arXiv."
        },
        "summary": {
          "type": "object",
          "description": "Structured TLDR object with key_findings, methods, limitations, so_what, and keywords fields."
        },
        "abstract": {
          "type": "string",
          "description": "Raw abstract text fetched from the arXiv API."
        },
        "abstract_chars": {
          "type": "number",
          "description": "Character count of the raw abstract string."
        }
      },
      "url": "https://x402.org/v1/arxiv-summarize"
    },
    "astro-times": {
      "slug": "astro-times",
      "price": "0.002",
      "cluster": "locale",
      "description": "sunrise-sunset / golden-hour / civil twilight / nautical dusk / day-length / solar-noon / dawn-dusk / astronomy times. Computes sunrise, sunset, solar noon, day length (seconds), and civil / nautical / astronomical twilight begin & end for any latitude/longitude on any date. UTC ISO8601 strings. Wraps sunrise-sunset.org's public API — no auth, commercial-OK.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "astronomy",
        "sunrise-sunset",
        "golden-hour",
        "twilight",
        "solar-noon",
        "day-length"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "Decimal degrees, range [-90, 90]. Positive north."
          },
          "longitude": {
            "type": "number",
            "description": "Decimal degrees, range [-180, 180]. Positive east."
          },
          "date": {
            "type": "string",
            "description": "Date in YYYY-MM-DD. Defaults to today (UTC) if omitted."
          }
        },
        "required": [
          "latitude",
          "longitude"
        ]
      },
      "outputProperties": {
        "date": {
          "type": "string",
          "description": "ISO date (YYYY-MM-DD) the astronomical times were computed for, echoed from the request."
        },
        "location": {
          "type": "string",
          "description": "Latitude/longitude pair the times were computed for, echoed from the request."
        },
        "times": {
          "type": "string",
          "description": "Object mapping each event (sunrise, sunset, solar_noon, day_length, civil/nautical/astronomical twilight begin & end) to UTC ISO8601 strings."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider, sunrise-sunset.org's public API."
        }
      },
      "url": "https://x402.org/v1/astro-times"
    },
    "audio-loudnorm": {
      "slug": "audio-loudnorm",
      "price": "0.02",
      "cluster": "mediakit",
      "description": "Audio loudness normalizer (EBU R128 LUFS). Podcast / Spotify / YouTube target presets (-23 / -16 / -14). Two-pass dynamic mode. Returns hosted MP3.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "audio",
        "loudnorm",
        "podcast",
        "normalization",
        "ebu-r128"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "audio_url": {
            "type": "string",
            "description": "Public URL of an audio or video file to normalize. Must be HTTPS-accessible."
          },
          "target_lufs": {
            "type": "number",
            "description": "Target integrated loudness in LUFS. Defaults to -16 (podcast/Spotify standard). Range: -30 to -10. Common targets: -23 (broadcast/EBU R128), -16 (podcast), -14 (YouTube/Apple Music)."
          },
          "true_peak": {
            "type": "number",
            "description": "Maximum true peak in dBTP. Defaults to -1.5. Range: -9 to 0."
          }
        },
        "required": [
          "audio_url"
        ]
      },
      "outputProperties": {
        "audio_url": {
          "type": "string",
          "description": "URL of the normalized audio file (hosted by fal.ai)"
        },
        "duration_seconds": {
          "type": "number",
          "description": "Duration of the source audio in seconds"
        },
        "target_lufs": {
          "type": "number",
          "description": "The LUFS target that was applied"
        },
        "true_peak": {
          "type": "number",
          "description": "The true peak limit that was applied"
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL"
        }
      },
      "url": "https://x402.org/v1/audio-loudnorm"
    },
    "audio-transcribe": {
      "slug": "audio-transcribe",
      "price": "0.01",
      "cluster": "mediakit",
      "description": "Audio transcribe / speech-to-text / Whisper-large / multi-language ASR / OpenAI Whisper API compat. Server-side fetches the audio URL (max 25 MB), relays to Venice's audio/transcriptions endpoint with whisper-large-v3, and returns the transcript with detected language, duration, and per-segment timestamps when response_format='verbose_json' (default). Also supports raw text, SRT, and VTT outputs.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "audio",
        "transcription",
        "speech-to-text",
        "asr",
        "whisper",
        "subtitles",
        "whisper-large-v3"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "audio_url": {
            "type": "string",
            "description": "Public http(s) URL of the audio file (mp3, wav, m4a, ogg, flac, webm). Up to 25 MB."
          },
          "language": {
            "type": "string",
            "description": "BCP-47 language hint (e.g. 'en', 'es'). 'auto' or omitted = auto-detect."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Default 'openai/whisper-large-v3'."
          },
          "response_format": {
            "type": "string",
            "enum": [
              "json",
              "text",
              "verbose_json",
              "srt",
              "vtt"
            ],
            "description": "Output format. Default 'verbose_json' (transcript + segments)."
          }
        },
        "required": [
          "audio_url"
        ]
      },
      "outputProperties": {
        "transcript": {
          "type": "string",
          "description": "Full transcribed text of the audio, concatenated across all detected speech segments."
        },
        "language_detected": {
          "type": "string",
          "description": "ISO 639-1 code of the language Whisper auto-detected in the audio (e.g. 'en', 'es', 'fr')."
        },
        "duration_seconds": {
          "type": "string",
          "description": "Length of the source audio in seconds, as reported by Whisper after decoding."
        },
        "segments": {
          "type": "string",
          "description": "Array of per-segment objects with start/end timestamps and text, present when response_format is verbose_json."
        },
        "response_format": {
          "type": "string",
          "description": "Output format used: verbose_json (default), json, text, srt, or vtt."
        },
        "model": {
          "type": "string",
          "description": "Whisper model used for transcription, fixed to 'whisper-large-v3' via Venice's audio/transcriptions endpoint."
        },
        "bytes_in": {
          "type": "string",
          "description": "Size in bytes of the audio file fetched from the source URL before relay to Whisper."
        },
        "source": {
          "type": "string",
          "description": "Original audio URL the server fetched and transcribed (echoed back from the request)."
        }
      },
      "url": "https://x402.org/v1/audio-transcribe"
    },
    "basename-resolve": {
      "slug": "basename-resolve",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Basename resolver / Coinbase Basenames / .base.eth lookup / Base name service / on-chain name resolution. Forward: pass a basename like 'alice.base.eth' (bare names are auto-suffixed with .base.eth) → returns the registered Ethereum address. Reverse: pass a 0x address → returns the primary basename, if any. Also returns avatar / url / com.twitter / com.github / email / com.discord text records on forward lookups (override with `text_records`). Reads from Base mainnet L2 Resolver 0xC6d566A56A1aFf6508b41f6c90ff131615583BCD via a static eth_call (no gas, no wallet, no API key). Useful for agent-payment flows that need to translate human names to Base addresses.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "basename",
        "base",
        "ens",
        "name-service",
        "coinbase",
        "resolver",
        "address"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "A basename ('alice.base.eth' or bare 'alice') for forward, OR a 0x address for reverse."
          },
          "text_records": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional text-record keys to fetch on forward lookups. Default: avatar/url/description/com.twitter/com.github/email/com.discord. Cap 12 keys."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "mode": {
          "type": "string",
          "enum": [
            "forward",
            "reverse"
          ],
          "description": "Either 'forward' (basename to address) or 'reverse' (address to basename), reflecting which lookup ran."
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Resolved basename (e.g. 'alice.base.eth') for reverse mode, or the queried name for forward mode; null if unset."
        },
        "address": {
          "type": [
            "string",
            "null"
          ],
          "description": "Ethereum address registered to the basename in forward mode, or the queried address in reverse mode; null if unset."
        },
        "text_records": {
          "type": "object",
          "description": "Map of requested text record keys (avatar, url, com.twitter, etc.) to their on-chain string values for forward lookups."
        },
        "network": {
          "type": "string",
          "description": "Chain the resolver was queried on, always 'base' (Base mainnet L2)."
        },
        "resolver": {
          "type": "string",
          "description": "Address of the Base L2 Resolver contract used (0xC6d566A56A1aFf6508b41f6c90ff131615583BCD)."
        },
        "rpc_used": {
          "type": "string",
          "description": "RPC endpoint URL that served the eth_call against the resolver."
        },
        "source": {
          "type": "string",
          "description": "Identifier for the data origin, e.g. 'base-l2-resolver' indicating on-chain Base mainnet read."
        },
        "attribution": {
          "type": "string",
          "description": "Credit string naming Coinbase Basenames as the underlying name service."
        }
      },
      "url": "https://x402.org/v1/basename-resolve"
    },
    "bin-lookup": {
      "slug": "bin-lookup",
      "price": "0.02",
      "cluster": "locale",
      "description": "Credit card BIN / IIN lookup. First 6-8 digits identify issuing bank, country, brand (Visa/Mastercard/Amex), card type (debit/credit/prepaid). Fraud screening, payment routing, geo-risk. Powered by binlist.net.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "bin",
        "iin",
        "credit-card",
        "fraud",
        "payments",
        "kyc"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "bin": {
            "type": "string",
            "description": "6-8 digit BIN. NEVER pass full card numbers — PCI scope risk."
          }
        },
        "required": [
          "bin"
        ]
      },
      "outputProperties": {
        "bin": {
          "type": "string",
          "description": "First 6-8 digits of the card number used for the lookup."
        },
        "scheme": {
          "type": "string",
          "description": "Card network scheme such as visa, mastercard, amex, discover, or jcb."
        },
        "type": {
          "type": "string",
          "description": "Card type indicator: debit, credit, or charge."
        },
        "brand": {
          "type": "string",
          "description": "Specific product brand within the scheme, like Visa Classic, World Elite, or Platinum."
        },
        "prepaid": {
          "type": "boolean",
          "description": "True if the BIN identifies a prepaid card, false for funded credit/debit accounts."
        },
        "card_number": {
          "type": "object",
          "description": "Card number metadata: length and whether the Luhn checksum applies."
        },
        "country": {
          "type": "object",
          "description": "Issuing country block with ISO alpha-2/alpha-3 codes, name, emoji, currency, and lat/lon."
        },
        "issuer": {
          "type": "object",
          "description": "Issuing bank details including name, website URL, and customer phone where known."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source for the lookup, typically binlist.net."
        },
        "note": {
          "type": "string",
          "description": "Optional note about data freshness, partial matches, or fallback behavior."
        }
      },
      "url": "https://x402.org/v1/bin-lookup"
    },
    "bls-occupational-stats": {
      "slug": "bls-occupational-stats",
      "price": "0.02",
      "cluster": "edge-finance",
      "description": "BLS Public Data API — wages, employment levels, growth by series ID. Federal public, free. Optional BLS_API_KEY for higher rate-limits.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "bls",
        "labor-stats",
        "wages",
        "employment",
        "occupational-data",
        "bls-api"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "series_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of BLS series IDs to fetch (e.g. occupational employment, wage, or growth series codes)."
          },
          "start_year": {
            "type": "string",
            "description": "Four-digit starting year for the data range (e.g. \"2020\")."
          },
          "end_year": {
            "type": "string",
            "description": "Four-digit ending year for the data range (e.g. \"2024\")."
          },
          "include_calculations": {
            "type": "boolean",
            "description": "When true, BLS returns net/percent change calculations alongside the raw data points."
          }
        },
        "required": [
          "series_ids"
        ]
      },
      "outputProperties": {
        "series_returned": {
          "type": "string",
          "description": "Count of series IDs successfully returned by the BLS API in this response."
        }
      },
      "url": "https://x402.org/v1/bls-occupational-stats"
    },
    "brand-clearance": {
      "slug": "brand-clearance",
      "price": "0.25",
      "cluster": "prooflayer",
      "description": "Brand clearance aggregator / name screening / product-name vetting / startup-brand pre-flight. Given a candidate brand name, returns a single composite clearance signal an agent can act on. Calls four checks in parallel (in-process, no x402 self-billing): USPTO TM name search, domain availability across requested TLDs (default .com .ai .dev .io .co), Wikipedia presence, Hacker News mention scan. Returns risk_level (clear|soft|moderate|hard), risk_score 0-100, sub-scores per signal, the raw hits, and a one-line recommendation. Designed for AI agents self-screening project / product / startup names before committing. Screening tool only — not legal advice.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "brand-clearance",
        "trademark-search",
        "domain-availability",
        "name-screening",
        "prooflayer",
        "startup-naming",
        "uspto",
        "product-naming"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Candidate brand name (1-60 chars). Used as-is for USPTO + HN search; lowercased + alphanumeric-stripped for domain construction."
          },
          "tlds": {
            "type": "array",
            "description": "TLDs to check, without dots. Default ['com','ai','dev','io','co']. Allowlist: com, ai, dev, io, co, app, xyz, org, net, tech, tools, page, studio, shop. Max 6."
          },
          "max_tm_hits": {
            "type": "number",
            "description": "Max trademark hits to include in the response. Default 5, hard cap 25."
          }
        },
        "required": [
          "name"
        ]
      },
      "outputProperties": {
        "name": {
          "type": "string",
          "description": "Candidate brand name that was screened, echoed back from the request."
        },
        "risk_level": {
          "type": "string",
          "description": "Composite risk verdict: clear, soft, moderate, or hard conflict."
        },
        "risk_score": {
          "type": "string",
          "description": "Composite risk score from 0 (clear) to 100 (hard conflict) across all four signals."
        },
        "recommendation": {
          "type": "string",
          "description": "One-line suggested next step for the agent based on the composite risk verdict."
        },
        "sub_scores": {
          "type": "string",
          "description": "Per-signal risk scores for USPTO trademark, domain availability, Wikipedia, and Hacker News checks."
        }
      },
      "url": "https://x402.org/v1/brand-clearance"
    },
    "bridge-rates": {
      "slug": "bridge-rates",
      "price": "0.03",
      "cluster": "edge-market",
      "description": "Cross-chain bridge rate aggregator. LiFi public quote API aggregates Across, Stargate, Hop, deBridge, Synapse, CCTP. Free, commercial-OK with attribution.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "bridge-rates",
        "cross-chain",
        "bridge-aggregator",
        "lifi",
        "stargate",
        "cctp",
        "bridge-quote"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "from_chain": {
            "type": "number",
            "description": "Source chain id. EVM chain id (1=Ethereum, 8453=Base, 42161=Arbitrum One, 10=Optimism, 137=Polygon, 56=BNB Chain)."
          },
          "to_chain": {
            "type": "number",
            "description": "Destination chain id (same id space as from_chain)."
          },
          "from_token": {
            "type": "string",
            "description": "Source token contract address. Use '0x0000000000000000000000000000000000000000' for the chain's native gas token (ETH, MATIC, BNB)."
          },
          "to_token": {
            "type": "string",
            "description": "Destination token contract address. Same '0x000...' convention for native."
          },
          "amount": {
            "type": "string",
            "description": "Source amount in the token's smallest unit (e.g. wei for ETH, '1000000000000000000' = 1 ETH; '1000000' = 1 USDC at 6 decimals)."
          },
          "from_address": {
            "type": "string",
            "description": "Optional EVM address of the sender. Required for slippage-checked + ready-to-sign quotes."
          },
          "to_address": {
            "type": "string",
            "description": "Optional EVM destination address. Defaults to from_address."
          },
          "slippage": {
            "type": "number",
            "description": "Max slippage as decimal fraction (0.01 = 1%). Default 0.005."
          },
          "limit": {
            "type": "number",
            "description": "Max routes to return. 1-10. Default 5."
          }
        },
        "required": [
          "from_chain",
          "to_chain",
          "from_token",
          "to_token",
          "amount"
        ]
      },
      "outputProperties": {
        "route_count": {
          "type": "string",
          "description": "Number of bridge routes returned across aggregated providers (Across, Stargate, Hop, deBridge, Synapse, CCTP)."
        }
      },
      "url": "https://x402.org/v1/bridge-rates"
    },
    "building-permits": {
      "slug": "building-permits",
      "price": "0.03",
      "cluster": "locale",
      "description": "Building permits multi-city open-data lookup. NYC, SF, Chicago, LA, Seattle, Austin. Filter by address substring, status, type, recency. Each city normalized to common shape (id, type, status, description, address, dates, cost). Real-estate / construction primitive.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "real-estate",
        "permits",
        "construction",
        "open-data",
        "building",
        "nyc",
        "sf",
        "chicago",
        "la",
        "seattle",
        "austin",
        "due-diligence",
        "property"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string",
            "description": "One of: 'nyc', 'sf', 'chicago', 'la', 'seattle', 'austin'."
          },
          "address": {
            "type": "string",
            "description": "Street name or address substring (case-insensitive). Optional."
          },
          "status": {
            "type": "string",
            "description": "Filter on permit status (city-specific values, e.g. 'ISSUED'). Optional."
          },
          "permit_type": {
            "type": "string",
            "description": "Filter on permit type (city-specific). Optional."
          },
          "days": {
            "type": "number",
            "description": "Restrict to permits within last N days. Optional."
          },
          "limit": {
            "type": "number",
            "description": "Max records to return (1-100). Default 20."
          }
        },
        "required": [
          "city"
        ]
      },
      "outputProperties": {
        "city": {
          "type": "string",
          "description": "City slug requested or matched (nyc, sf, chicago, la, seattle, austin)."
        },
        "city_name": {
          "type": "string",
          "description": "Human-readable city name for the permits returned."
        },
        "dataset": {
          "type": "string",
          "description": "Source open-data dataset identifier the permits were pulled from."
        },
        "source_portal": {
          "type": "string",
          "description": "URL of the city's open-data portal that hosts the underlying permit dataset."
        },
        "total": {
          "type": "number",
          "description": "Count of permit records returned after filters applied."
        },
        "permits": {
          "type": "array",
          "description": "Array of normalized permit records with id, type, status, description, address, dates, and cost."
        }
      },
      "url": "https://x402.org/v1/building-permits"
    },
    "card-bin-lookup": {
      "slug": "card-bin-lookup",
      "price": "0.02",
      "cluster": "locale",
      "description": "Credit card BIN lookup / IIN lookup / card-issuer lookup. First 6-8 digits to issuer bank, country, brand (Visa/Mastercard/Amex/Discover/JCB/UnionPay), card type (debit/credit/prepaid). Use for fraud screening, payment routing, geo-risk.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "card-bin-lookup",
        "iin-lookup",
        "card-issuer",
        "fraud-screening",
        "payment-routing",
        "bin-database"
      ],
      "aliasOf": "bin-lookup",
      "inputSchema": {
        "type": "object",
        "properties": {
          "bin": {
            "type": "string",
            "description": "First 6-8 digits of the card number to look up (the BIN/IIN identifying the issuer)."
          }
        },
        "required": [
          "bin"
        ]
      },
      "outputProperties": {
        "scheme": {
          "type": "string",
          "description": "Card network brand, e.g. Visa, Mastercard, Amex, Discover, JCB, or UnionPay."
        },
        "type": {
          "type": "string",
          "description": "Card funding type: debit, credit, or prepaid."
        },
        "country": {
          "type": "string",
          "description": "ISO country code of the issuing bank, used for geo-risk and routing."
        }
      },
      "url": "https://x402.org/v1/card-bin-lookup"
    },
    "citation-verify": {
      "slug": "citation-verify",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "Citation verifier / fact-check against URL / does-this-source-support-this-claim / hallucination detector. Fetches a source URL (HTML stripped, 100KB cap), and asks Venice claude-sonnet-4-6 whether a given claim is supported, contradicted, or absent. Returns verdict, confidence (0-1), and the strongest evidence quote when available.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "fact-check",
        "citation-verification",
        "hallucination-detector",
        "claim-verification",
        "source-grounding",
        "evidence-extraction"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "claim": {
            "type": "string",
            "description": "The claim to verify."
          },
          "source_url": {
            "type": "string",
            "description": "Public http(s) URL of the source to check against. Up to 100KB read."
          }
        },
        "required": [
          "claim",
          "source_url"
        ]
      },
      "outputProperties": {
        "claim": {
          "type": "string",
          "description": "Echoes the claim text that was checked against the source."
        },
        "source_url": {
          "type": "string",
          "description": "URL of the page that was fetched and used as evidence."
        },
        "source_chars": {
          "type": "string",
          "description": "Character count of the stripped HTML text passed to the model."
        },
        "source_bytes_total": {
          "type": "string",
          "description": "Total bytes downloaded from the source URL before the 100KB cap was applied."
        },
        "truncated": {
          "type": "string",
          "description": "True when the fetched source exceeded the 100KB cap and was cut off."
        },
        "verdict": {
          "type": "string",
          "description": "One of supported, contradicted, or absent based on what the source says about the claim."
        },
        "confidence": {
          "type": "string",
          "description": "Model's confidence in the verdict on a 0 to 1 scale."
        },
        "evidence_quote": {
          "type": "string",
          "description": "Strongest verbatim quote from the source that backs the verdict, or empty if none found."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the Venice model used, typically claude-sonnet-4-6."
        },
        "source": {
          "type": "string",
          "description": "Upstream provider tag, set to venice for this endpoint."
        }
      },
      "url": "https://x402.org/v1/citation-verify"
    },
    "classify": {
      "slug": "classify",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "Zero-shot text classifier. Caller supplies labels. Multi-label mode. Calibrated confidences + reasoning.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "classify",
        "categorize",
        "moderation",
        "routing",
        "ai",
        "llm"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text. Max 15,000 chars."
          },
          "labels": {
            "type": "array",
            "description": "Array of 2-25 candidate labels (strings, ≤80 chars each)."
          },
          "multi_label": {
            "type": "boolean",
            "description": "If true, returns all labels that meaningfully apply. Default false (single best)."
          },
          "label_descriptions": {
            "type": "object",
            "description": "Optional { label: description } mapping for finer control."
          }
        },
        "required": [
          "text",
          "labels"
        ]
      },
      "outputProperties": {
        "results": {
          "type": "array",
          "description": "Array of {label, confidence}."
        },
        "top_label": {
          "type": "string",
          "description": "Highest-confidence label from the caller-supplied set."
        },
        "reasoning": {
          "type": "string",
          "description": "Short explanation of why the chosen label(s) fit the input text."
        },
        "multi_label": {
          "type": "boolean",
          "description": "True if more than one label was assigned above threshold."
        },
        "labels": {
          "type": "array",
          "description": "Array of {label, score} pairs with calibrated confidences for each caller-supplied label."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the classified input text."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the underlying LLM used for classification."
        }
      },
      "url": "https://x402.org/v1/classify"
    },
    "classify-text": {
      "slug": "classify-text",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "Text classifier / zero-shot classifier / category sorter. Caller supplies labels (2-25). Multi-label mode. Calibrated confidences + reasoning. Mistral powered.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "classify",
        "categorize",
        "moderation",
        "routing",
        "ai",
        "llm"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text. Max 15,000 chars."
          },
          "labels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of 2-25 candidate labels (strings, ≤80 chars each)."
          },
          "multi_label": {
            "type": "boolean",
            "description": "If true, returns all labels that meaningfully apply. Default false (single best)."
          },
          "label_descriptions": {
            "type": "object",
            "description": "Optional { label: description } mapping for finer control."
          }
        },
        "required": [
          "text",
          "labels"
        ]
      },
      "outputProperties": {
        "results": {
          "type": "array",
          "description": "Array of {label, confidence}."
        },
        "top_label": {
          "type": "string",
          "description": "Highest-confidence label chosen from the caller's supplied label set."
        },
        "reasoning": {
          "type": "string",
          "description": "Short explanation of why the classifier picked the top label."
        },
        "multi_label": {
          "type": "boolean",
          "description": "True if multi-label mode was used (text can match more than one label)."
        },
        "labels": {
          "type": "array",
          "description": "Array of label objects with name and calibrated confidence score, sorted by score descending."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the input text submitted for classification."
        },
        "model": {
          "type": "string",
          "description": "Mistral model identifier used to produce the classification."
        }
      },
      "url": "https://x402.org/v1/classify-text"
    },
    "commit-message-from-diff": {
      "slug": "commit-message-from-diff",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "Git commit message generator / Conventional Commits / AI commit-msg. Type, scope, subject, body, breaking_change flag. Ready for git commit -m.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "git",
        "commit",
        "developer",
        "conventional-commits"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "diff": {
            "type": "string",
            "description": "Git diff text."
          },
          "style": {
            "type": "string",
            "enum": [
              "conventional",
              "plain"
            ],
            "description": "Commit message style preset, e.g. 'conventional' for Conventional Commits or 'plain' for free-form."
          },
          "scope": {
            "type": "string",
            "description": "Optional scope hint to inject into the message, like 'auth' or 'api', overriding model-inferred scope."
          }
        },
        "required": [
          "diff"
        ]
      },
      "outputProperties": {
        "type": {
          "type": "string",
          "description": "Conventional Commits type like feat, fix, chore, docs, refactor, test, or perf."
        },
        "scope": {
          "type": "string",
          "description": "Inferred scope of the change, like 'auth' or 'parser', or empty when no clear scope applies."
        },
        "subject": {
          "type": "string",
          "description": "Short imperative summary line under ~72 chars, no trailing period."
        },
        "body": {
          "type": "string",
          "description": "Longer explanation paragraph(s) describing what changed and why, blank when the diff is trivial."
        },
        "breaking_change": {
          "type": "boolean",
          "description": "True when the diff introduces a breaking API or behavior change requiring a BREAKING CHANGE footer."
        },
        "full_message": {
          "type": "string",
          "description": "Fully assembled commit text (subject + body + footers) ready to pass to git commit -m."
        },
        "style": {
          "type": "string",
          "description": "Style preset actually used to format the message, echoing the requested style or the default."
        },
        "diff_chars": {
          "type": "number",
          "description": "Character count of the input diff that was analyzed."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the LLM that generated the commit message, like 'claude-haiku-4-5'."
        }
      },
      "url": "https://x402.org/v1/commit-message-from-diff"
    },
    "compress-pdf": {
      "slug": "compress-pdf",
      "price": "0.005",
      "cluster": "mediakit",
      "description": "PDF compressor / PDF size reducer. CloudConvert optimize task. Profiles: web (default), print, archive, mrc (scanned), max. Reports % saved.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "pdf",
        "compress",
        "optimize",
        "shrink"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of the PDF to compress."
          },
          "profile": {
            "type": "string",
            "enum": [
              "web",
              "print",
              "archive",
              "mrc",
              "max"
            ],
            "description": "'web' (default), 'print', 'archive', 'mrc', 'max'."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "pdf_url": {
          "type": "string",
          "description": "Signed URL to download the compressed PDF output."
        },
        "original_size_bytes": {
          "type": "number",
          "description": "Byte size of the source PDF before compression."
        },
        "compressed_size_bytes": {
          "type": "number",
          "description": "Byte size of the output PDF after CloudConvert optimization."
        },
        "saved_percent": {
          "type": "number",
          "description": "Percent reduction in file size from original to compressed."
        },
        "profile": {
          "type": "string",
          "description": "Optimization profile applied: web, print, archive, mrc, or max."
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input PDF URL that was compressed."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job identifier for the optimize task."
        }
      },
      "url": "https://x402.org/v1/compress-pdf"
    },
    "content-simhash": {
      "slug": "content-simhash",
      "price": "0.001",
      "cluster": "wordmint",
      "description": "SimHash / 64-bit content fingerprint / near-duplicate detection / dedup hashing / locality-sensitive hash. Pure-local 64-bit SimHash over token-level k-shingles (default k=3) using FNV-1a. Two SimHashes are 'close' (small Hamming distance) iff the underlying texts share many shingles. Returns hex + decimal forms plus token + shingle counts. Useful for content dedup pipelines, plagiarism detection, and bot-content clustering.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "content-hashing",
        "simhash",
        "near-duplicate-detection",
        "dedup",
        "fingerprinting",
        "locality-sensitive-hash",
        "shingling"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to hash. Up to 500,000 chars."
          },
          "shingle_size": {
            "type": "number",
            "description": "k-gram size for shingles. Range [1, 8]. Default 3."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "hash_hex": {
          "type": "string",
          "description": "64-bit SimHash fingerprint as a 16-character lowercase hex string."
        },
        "hash_int": {
          "type": "string",
          "description": "Same 64-bit SimHash rendered as a decimal integer string (safe for languages without u64)."
        },
        "bit_count": {
          "type": "string",
          "description": "Number of set bits (popcount) in the SimHash, useful as a quick sanity check."
        },
        "token_count": {
          "type": "string",
          "description": "Number of tokens extracted from the input text before shingling."
        },
        "shingle_count": {
          "type": "string",
          "description": "Number of distinct k-shingles hashed into the SimHash."
        },
        "shingle_size": {
          "type": "string",
          "description": "Shingle width k used (tokens per shingle), default 3."
        },
        "text_chars": {
          "type": "string",
          "description": "Character length of the input text that was hashed."
        },
        "source": {
          "type": "string",
          "description": "Echoes how the text was supplied (e.g. inline text vs fetched URL)."
        }
      },
      "url": "https://x402.org/v1/content-simhash"
    },
    "contract-source": {
      "slug": "contract-source",
      "price": "0.01",
      "cluster": "edge-market",
      "description": "Verified contract source code / Etherscan source / contract ABI fetcher / Solidity source lookup. For any deployed contract on Ethereum, Base, Optimism, Arbitrum, or Polygon: returns is_verified, contract name, compiler version, parsed ABI, full source, license, optimizer settings, constructor args, and proxy implementation address.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "contract-source",
        "etherscan",
        "abi",
        "solidity",
        "verified-contracts",
        "proxy-implementation",
        "contract-abi"
      ],
      "aliasOf": "contract-source-verified",
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "0x-prefixed 20-byte EVM contract address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'base'. Other supported: 'ethereum', 'polygon', 'arbitrum', 'optimism'."
          }
        },
        "required": [
          "address"
        ]
      },
      "outputProperties": {
        "address": {
          "type": "string",
          "description": "Contract address that was queried, as a 0x-prefixed hex string."
        },
        "chain": {
          "type": "string",
          "description": "Chain the contract lives on (ethereum, base, optimism, arbitrum, or polygon)."
        },
        "is_verified": {
          "type": "string",
          "description": "Boolean string indicating whether source code is verified on the chain's block explorer."
        },
        "name": {
          "type": "string",
          "description": "Contract name as declared in the verified Solidity source."
        },
        "compiler_version": {
          "type": "string",
          "description": "Solidity compiler version used to build the verified contract (e.g. v0.8.20+commit.a1b79de6)."
        },
        "abi": {
          "type": "string",
          "description": "Parsed contract ABI as a JSON string describing functions, events, and errors."
        },
        "source_code": {
          "type": "string",
          "description": "Full verified Solidity source code, single-file or multi-file JSON standard input."
        },
        "license": {
          "type": "string",
          "description": "SPDX license identifier declared in the verified source (e.g. MIT, GPL-3.0, UNLICENSED)."
        },
        "optimization": {
          "type": "string",
          "description": "Optimizer settings used at compile time, including enabled flag and runs count."
        },
        "constructor_arguments": {
          "type": "string",
          "description": "ABI-encoded constructor arguments supplied at contract deployment, as a hex string."
        },
        "proxy": {
          "type": "string",
          "description": "Implementation address if the contract is a proxy, otherwise null or zero address."
        },
        "source": {
          "type": "string",
          "description": "Block explorer the verified source was fetched from (e.g. etherscan, basescan, arbiscan)."
        }
      },
      "url": "https://x402.org/v1/contract-source"
    },
    "contract-source-verified": {
      "slug": "contract-source-verified",
      "price": "0.01",
      "cluster": "edge-market",
      "description": "Verified contract source code / Etherscan source / Basescan ABI / Solidity source lookup / contract verification check / ABI fetcher / Etherscan-getsourcecode wrapper. For a deployed contract on Ethereum, Optimism, Polygon, Base, or Arbitrum, returns whether the source is verified, the contract name, compiler version, parsed ABI (as a JSON array, not a string), full Solidity source code (multi-file sources reassembled with '// File: ...' separators), license type, optimizer settings, constructor arguments, and — for proxy contracts — the implementation address. Wraps Etherscan v2's multichain getsourcecode endpoint.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "contract-verification",
        "etherscan",
        "abi-fetcher",
        "solidity-source",
        "proxy-implementation",
        "getsourcecode"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "0x-prefixed 20-byte EVM contract address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'base'. Other supported: 'ethereum', 'polygon', 'arbitrum', 'optimism'."
          }
        },
        "required": [
          "address"
        ]
      },
      "outputProperties": {
        "address": {
          "type": "string",
          "description": "Deployed contract address that was looked up."
        },
        "chain": {
          "type": "string",
          "description": "Chain the contract lives on (ethereum, optimism, polygon, base, or arbitrum)."
        },
        "is_verified": {
          "type": "string",
          "description": "Whether the contract source has been verified on the chain's explorer."
        },
        "name": {
          "type": "string",
          "description": "Contract name as declared in the verified Solidity source."
        },
        "compiler_version": {
          "type": "string",
          "description": "Solidity compiler version used to build the verified contract (e.g. v0.8.20+commit.a1b79de6)."
        },
        "abi": {
          "type": "string",
          "description": "Parsed contract ABI as a JSON array of function, event, and error definitions."
        },
        "source_code": {
          "type": "string",
          "description": "Full Solidity source code; multi-file contracts are reassembled with '// File: ...' separators."
        },
        "license": {
          "type": "string",
          "description": "SPDX license identifier declared in the verified source (e.g. MIT, GPL-3.0, UNLICENSED)."
        },
        "optimization": {
          "type": "string",
          "description": "Optimizer settings used at compile time, including whether enabled and the runs value."
        },
        "constructor_arguments": {
          "type": "string",
          "description": "ABI-encoded constructor arguments passed when the contract was deployed."
        },
        "proxy": {
          "type": "string",
          "description": "For proxy contracts, the implementation address the proxy delegates calls to."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source for the lookup (Etherscan v2 multichain getsourcecode)."
        }
      },
      "url": "https://x402.org/v1/contract-source-verified"
    },
    "convert-html-to-markdown": {
      "slug": "convert-html-to-markdown",
      "price": "0.005",
      "cluster": "mediakit",
      "description": "Convert HTML to Markdown. Strips nav, scripts, ads, and other boilerplate. Preserves headings, lists, tables, code blocks, links, and images. Accepts raw HTML or a URL. Returns clean Markdown ideal for LLM context windows or RAG ingestion.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "html-to-markdown",
        "markdown",
        "content-extraction",
        "rag",
        "llm-context",
        "boilerplate-removal",
        "html-parser"
      ],
      "aliasOf": "html-to-markdown",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html": {
            "type": "string",
            "description": "Raw HTML to convert. Mutually exclusive with 'url' — supply one."
          },
          "url": {
            "type": "string",
            "description": "Page URL to fetch and convert. Server follows redirects. Mutually exclusive with 'html'."
          },
          "include_links": {
            "type": "boolean",
            "description": "Keep hyperlinks as Markdown [text](href). Default true. Set false for prose-only output."
          },
          "include_images": {
            "type": "boolean",
            "description": "Keep images as Markdown ![alt](src). Default true."
          },
          "user_agent": {
            "type": "string",
            "description": "Optional User-Agent header sent when fetching 'url'. Default is a generic browser UA."
          }
        }
      },
      "outputProperties": {
        "source_url": {
          "type": "string",
          "description": "Original URL fetched when a URL was provided as input, or null when raw HTML was passed in."
        },
        "title": {
          "type": "string",
          "description": "Page title extracted from the HTML's <title> tag or top-level heading."
        },
        "markdown": {
          "type": "string",
          "description": "Cleaned Markdown output with boilerplate stripped and headings, lists, tables, code, links preserved."
        },
        "markdown_chars": {
          "type": "string",
          "description": "Character count of the returned Markdown string."
        },
        "html_chars": {
          "type": "string",
          "description": "Character count of the input HTML before conversion."
        }
      },
      "url": "https://x402.org/v1/convert-html-to-markdown"
    },
    "convert-pdf": {
      "slug": "convert-pdf",
      "price": "0.20",
      "cluster": "mediakit",
      "description": "Convert PDF to Markdown, HTML, JSON, or structured text via Datalab Marker. AI-powered, layout-aware, best-in-class for tables / equations / multi-column docs. For PDF→JPG/PNG see pdf-to-jpg; for PDF merge see pdf-merge; for PDF split see pdf-split; for PDF compression see compress-pdf. 30 pages max.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "pdf",
        "pdf-conversion",
        "markdown",
        "document-parsing",
        "ocr",
        "pdf-to-markdown"
      ],
      "aliasOf": "pdf-to-markdown",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of a PDF file."
          },
          "output_format": {
            "type": "string",
            "enum": [
              "markdown",
              "html",
              "json"
            ],
            "description": "'markdown' (default), 'html', or 'json'."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "markdown": {
          "type": "string",
          "description": "Converted document content in the requested format (Markdown by default, or HTML/JSON/text)."
        },
        "page_count": {
          "type": "string",
          "description": "Number of pages processed from the source PDF (capped at 30)."
        },
        "source_url": {
          "type": "string",
          "description": "URL of the PDF that was fetched and converted."
        }
      },
      "url": "https://x402.org/v1/convert-pdf"
    },
    "country-info": {
      "slug": "country-info",
      "price": "0.002",
      "cluster": "locale",
      "description": "Country info / ISO 3166 / country code lookup / capital city lookup / currencies by country / population / region resolver. Resolves country metadata by common name, ISO 3166 alpha-2/alpha-3 code, or capital city, returning name, codes, capital, region, subregion, population, area (km²), currencies, languages, timezones, flag emoji, neighboring-country codes, and international calling code. Wraps the public REST Countries v3.1 API — no auth, commercial-OK.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "country-info",
        "iso-3166",
        "country-code",
        "capital-lookup",
        "currencies",
        "geo-metadata",
        "rest-countries"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search string — country name (e.g. 'Germany'), ISO code (e.g. 'DE'), or capital city (e.g. 'Berlin'), depending on query_type."
          },
          "query_type": {
            "type": "string",
            "enum": [
              "name",
              "code",
              "capital"
            ],
            "description": "How to interpret 'query'. Default 'name'."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "matches": {
          "type": "string",
          "description": "Array of matched country records with name, codes, capital, region, population, currencies, languages, and flag emoji."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source identifier, typically 'restcountries.com v3.1'."
        }
      },
      "url": "https://x402.org/v1/country-info"
    },
    "cron-explain": {
      "slug": "cron-explain",
      "price": "0.002",
      "cluster": "wordmint",
      "description": "Cron expression explainer / cron parser / scheduling translator. Takes 5/6/7-field cron OR @yearly/@monthly/@daily macros. Returns plain English, frequency bucket, per-field breakdown, validation notes, runs-per-day estimate.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "cron",
        "schedule",
        "developer",
        "explain",
        "sysadmin"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "expression": {
            "type": "string",
            "description": "Cron expression to parse: 5/6/7-field syntax or macro like @yearly, @monthly, @weekly, @daily, @hourly."
          },
          "timezone": {
            "type": "string",
            "description": "IANA timezone (e.g. America/New_York) used to interpret the schedule; defaults to UTC if omitted."
          }
        },
        "required": [
          "expression"
        ]
      },
      "outputProperties": {
        "expression": {
          "type": "string",
          "description": "Echoes the input cron expression or macro that was parsed."
        },
        "timezone": {
          "type": "string",
          "description": "Timezone applied when interpreting the schedule, echoed back from input or defaulted."
        },
        "explanation": {
          "type": "string",
          "description": "Plain-English sentence describing when the cron fires (e.g. 'Every Monday at 9:00 AM')."
        },
        "frequency": {
          "type": "string",
          "description": "Frequency bucket label such as minutely, hourly, daily, weekly, monthly, or yearly."
        },
        "fields": {
          "type": "object",
          "description": "Parsed cron fields keyed by name (minute, hour, day, month, weekday, and optional second/year)."
        },
        "field_explanations": {
          "type": "object",
          "description": "Per-field plain-English breakdown keyed by field name (e.g. minute: 'at minute 0')."
        },
        "is_valid": {
          "type": "boolean",
          "description": "True if the cron expression parsed cleanly with no syntax or range errors."
        },
        "validation_notes": {
          "type": "array",
          "description": "Array of warnings or error strings flagged during parsing (empty when fully valid)."
        },
        "estimated_runs_per_day": {
          "type": "number",
          "description": "Approximate number of times the schedule fires in a 24-hour period."
        }
      },
      "url": "https://x402.org/v1/cron-explain"
    },
    "cron-parse": {
      "slug": "cron-parse",
      "price": "0.002",
      "cluster": "wordmint",
      "description": "Cron parser. Parses any 5 / 6 / 7-field cron expression or @yearly / @monthly / @weekly / @daily / @hourly macro and returns a plain-English explanation, frequency bucket, validation flag, and runs-per-day estimate. Same backend as cron-explain under a clearer slug.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "cron",
        "cron-parser",
        "scheduling",
        "cron-expression"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "expression": {
            "type": "string",
            "description": "Cron expression to parse, either a 5/6/7-field string or a macro like @yearly, @monthly, @weekly, @daily, @hourly."
          },
          "timezone": {
            "type": "string",
            "description": "IANA timezone name (e.g. America/New_York) used when interpreting fire times; defaults to UTC if omitted."
          }
        },
        "required": [
          "expression"
        ]
      },
      "outputProperties": {
        "explanation": {
          "type": "string",
          "description": "Plain-English description of when the cron expression fires, e.g. 'every weekday at 9:00 AM'."
        },
        "frequency": {
          "type": "string",
          "description": "Frequency bucket label such as minutely, hourly, daily, weekly, monthly, or yearly."
        }
      },
      "url": "https://x402.org/v1/cron-parse"
    },
    "crypto-tx-explainer": {
      "slug": "crypto-tx-explainer",
      "price": "0.04",
      "cluster": "edge-market",
      "description": "Ethereum/Base/Arbitrum/Optimism/Polygon transaction explainer. Returns receipt + ERC20/ERC721 transfers + contracts + fees + plain-English explanation (Venice).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "blockchain",
        "transaction-decoder",
        "evm",
        "erc20-transfers",
        "gas-fees",
        "tx-explainer"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "tx_hash": {
            "type": "string",
            "description": "Transaction hash (0x-prefixed) to look up on the chosen EVM chain."
          },
          "chain": {
            "type": "string",
            "enum": [
              "ethereum",
              "base",
              "arbitrum",
              "optimism",
              "polygon"
            ],
            "description": "EVM chain to query: ethereum, base, arbitrum, optimism, or polygon."
          },
          "explain": {
            "type": "boolean",
            "description": "If true, generates the plain-English Venice explanation alongside the raw receipt data."
          }
        },
        "required": [
          "tx_hash"
        ]
      },
      "outputProperties": {
        "status": {
          "type": "string",
          "description": "Transaction status, typically success or failed based on the receipt."
        },
        "explanation": {
          "type": "string",
          "description": "Plain-English summary of what the transaction did, generated by Venice when explain is true."
        }
      },
      "url": "https://x402.org/v1/crypto-tx-explainer"
    },
    "csv-to-ics": {
      "slug": "csv-to-ics",
      "price": "0.01",
      "cluster": "mediakit",
      "description": "CSV calendar to ICS / iCal file generator. RFC 5545 compliant. Auto-detects column mapping (summary/date/time/location). All-day + timed events. Up to 1000 rows.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "csv",
        "ics",
        "calendar",
        "ical",
        "convert",
        "events"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "csv": {
            "type": "string",
            "description": "CSV content as a string. First row must be a header. Max 200,000 chars / 1000 events."
          },
          "columns": {
            "type": "object",
            "description": "Optional explicit column-name mapping with keys: summary, start_date, end_date, start_time, end_time, location, description, url. Each value is the matching CSV header."
          },
          "calendar_name": {
            "type": "string",
            "description": "X-WR-CALNAME for the .ics output. Default 'Imported Events'."
          },
          "default_duration_minutes": {
            "type": "number",
            "description": "Used when only start_time is given. Default 60."
          },
          "delimiter": {
            "type": "string",
            "description": "Single-character delimiter. Default ','. Use ';' for European CSVs or '\\t' for TSV."
          }
        },
        "required": [
          "csv"
        ]
      },
      "outputProperties": {
        "ics": {
          "type": "string",
          "description": "Full .ics file as a string."
        },
        "mime_type": {
          "type": "string",
          "description": "MIME type of the generated file, typically text/calendar for ICS output."
        },
        "event_count": {
          "type": "number",
          "description": "Number of VEVENT entries successfully written to the ICS file."
        },
        "skipped_rows": {
          "type": "number",
          "description": "Count of CSV rows skipped due to missing required fields or unparseable dates."
        },
        "errors": {
          "type": "array",
          "description": "Array of per-row error messages describing why specific rows failed to convert."
        },
        "calendar_name": {
          "type": "string",
          "description": "X-WR-CALNAME value set on the calendar, derived from CSV header or filename."
        }
      },
      "url": "https://x402.org/v1/csv-to-ics"
    },
    "csv-to-jsonl": {
      "slug": "csv-to-jsonl",
      "price": "0.02",
      "cluster": "mediakit",
      "description": "CSV to JSON / CSV to JSONL converter / data pipeline preprocessor. RFC 4180 parser. Type inference (booleans, integers, floats, ISO dates, null). Configurable delimiter, quote, header, rename, drop columns.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "csv",
        "json",
        "jsonl",
        "data",
        "convert"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "csv": {
            "type": "string",
            "description": "Raw CSV / TSV text. Up to ~1MB recommended."
          },
          "format": {
            "type": "string",
            "enum": [
              "jsonl",
              "json",
              "ndarray"
            ],
            "description": "Output shape. 'jsonl' (default, newline-delimited JSON objects), 'json' (single JSON array), 'ndarray' (column-oriented arrays)."
          },
          "delimiter": {
            "type": "string",
            "description": "Field delimiter. Default ','. Use '\\t' for TSV, ';' for European CSV, '|' for pipe-delimited."
          },
          "quote_char": {
            "type": "string",
            "description": "Quote character for fields containing the delimiter or newlines. Default '\"'."
          },
          "has_header": {
            "type": "boolean",
            "description": "Whether the first row is the header. Default true. If false, columns are named c1, c2, ..."
          },
          "rename": {
            "type": "object",
            "description": "Optional column-rename map, e.g. { 'first name': 'first_name', 'DOB': 'date_of_birth' }."
          },
          "drop_columns": {
            "type": "array",
            "description": "Column names to drop from the output."
          },
          "infer_types": {
            "type": "boolean",
            "description": "If true (default), parse booleans, integers, floats, ISO-8601 dates, and null tokens. If false, every value stays a string."
          },
          "null_values": {
            "type": "array",
            "description": "Strings to coerce to JSON null. Default ['', 'null', 'NULL', 'NA', 'N/A']."
          },
          "trim": {
            "type": "boolean",
            "description": "Trim leading/trailing whitespace from each field. Default true."
          }
        },
        "required": [
          "csv"
        ]
      },
      "outputProperties": {
        "jsonl": {
          "type": "string",
          "description": "Newline-delimited JSON string with one parsed CSV row per line; present when output format is jsonl."
        },
        "data": {
          "type": "array",
          "description": "Array of parsed row objects keyed by column name, with values coerced via type inference."
        },
        "mime_type": {
          "type": "string",
          "description": "MIME type of the converted payload, e.g. application/json or application/x-ndjson."
        },
        "row_count": {
          "type": "number",
          "description": "Number of data rows parsed from the input CSV, excluding the header row."
        },
        "column_count": {
          "type": "number",
          "description": "Number of columns detected in the parsed CSV after any drop/rename operations."
        },
        "columns": {
          "type": "array",
          "description": "Ordered list of final column names after header parsing and any rename or drop transforms."
        },
        "format": {
          "type": "string",
          "description": "Output format selected for the conversion, either json or jsonl."
        }
      },
      "url": "https://x402.org/v1/csv-to-jsonl"
    },
    "cve": {
      "slug": "cve",
      "price": "0.005",
      "cluster": "prooflayer",
      "description": "CVE lookup / vulnerability database. NIST NVD-backed. CVSS v3.1+v2 scores, severity, affected CPEs, CWE, exploit indicators + LLM summary.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "cve",
        "vulnerability",
        "security",
        "nvd",
        "exploit"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "cve_id": {
            "type": "string",
            "description": "e.g. 'CVE-2021-44228'."
          }
        },
        "required": [
          "cve_id"
        ]
      },
      "outputProperties": {
        "cve_id": {
          "type": "string",
          "description": "CVE identifier in the form CVE-YYYY-NNNNN (e.g., CVE-2024-3094)."
        },
        "description": {
          "type": "string",
          "description": "NVD's plain-text summary of the vulnerability and its impact."
        },
        "published": {
          "type": "string",
          "description": "ISO 8601 timestamp when NVD first published the CVE record."
        },
        "cvss_v3_1": {
          "type": "object",
          "description": "CVSS v3.1 metrics object with base score, vector string, and severity breakdown."
        },
        "cvss_v2": {
          "type": "object",
          "description": "Legacy CVSS v2 metrics object with base score, vector, and access/impact subscores."
        },
        "score": {
          "type": "number",
          "description": "Primary numeric CVSS base score (v3.1 preferred, falls back to v2) on the 0.0–10.0 scale."
        },
        "severity": {
          "type": "string",
          "description": "Qualitative severity label: NONE, LOW, MEDIUM, HIGH, or CRITICAL."
        },
        "cwe": {
          "type": "array",
          "description": "Array of associated CWE weakness identifiers (e.g., CWE-79, CWE-787)."
        },
        "affected_cpes": {
          "type": "array",
          "description": "Array of CPE 2.3 URIs identifying vulnerable products, versions, and configurations."
        },
        "exploit_summary": {
          "type": "string",
          "description": "LLM-generated plain-English summary of how the vulnerability is exploited and its blast radius."
        },
        "public_exploit_known": {
          "type": "boolean",
          "description": "True if public exploit code, PoC, or active exploitation evidence is referenced."
        },
        "exploit_references": {
          "type": "array",
          "description": "Array of URLs to public PoCs, Metasploit modules, or exploit-DB entries."
        },
        "references": {
          "type": "array",
          "description": "Array of NVD reference URLs (vendor advisories, patches, analysis writeups)."
        }
      },
      "url": "https://x402.org/v1/cve"
    },
    "cve-lookup": {
      "slug": "cve-lookup",
      "price": "0.005",
      "cluster": "prooflayer",
      "description": "CVE lookup / vulnerability database. NIST NVD-backed. CVSS v3.1 + v2 scores, severity, affected CPEs, CWE class, references, public-exploit indicators. Plus LLM exploitability summary.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "cve",
        "vulnerability",
        "security",
        "nvd",
        "exploit"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "cve_id": {
            "type": "string",
            "description": "e.g. 'CVE-2021-44228'."
          }
        },
        "required": [
          "cve_id"
        ]
      },
      "outputProperties": {
        "cve_id": {
          "type": "string",
          "description": "CVE identifier in standard CVE-YYYY-NNNNN format."
        },
        "description": {
          "type": "string",
          "description": "Official NVD summary of the vulnerability and its impact."
        },
        "published": {
          "type": "string",
          "description": "ISO 8601 timestamp of when the CVE was first published to NVD."
        },
        "cvss_v3_1": {
          "type": "object",
          "description": "Full CVSS v3.1 metrics object with base score, vector string, and impact/exploitability subscores."
        },
        "cvss_v2": {
          "type": "object",
          "description": "Full CVSS v2 metrics object with base score, vector, and access/impact subscores when available."
        },
        "score": {
          "type": "number",
          "description": "Primary numeric CVSS score (v3.1 base score preferred, falls back to v2) on a 0-10 scale."
        },
        "severity": {
          "type": "string",
          "description": "Severity label derived from the CVSS score: NONE, LOW, MEDIUM, HIGH, or CRITICAL."
        },
        "cwe": {
          "type": "array",
          "description": "Array of associated CWE identifiers classifying the weakness type (e.g. CWE-79, CWE-89)."
        },
        "affected_cpes": {
          "type": "array",
          "description": "Array of CPE 2.3 URIs identifying vendor, product, and version ranges affected by the CVE."
        },
        "exploit_summary": {
          "type": "string",
          "description": "LLM-generated plain-English summary of how the vulnerability is exploited and its practical impact."
        },
        "public_exploit_known": {
          "type": "boolean",
          "description": "True if a public proof-of-concept or weaponized exploit exists for this CVE."
        },
        "exploit_references": {
          "type": "array",
          "description": "Array of URLs pointing to public exploit code, PoCs, or exploit-DB entries for the CVE."
        },
        "references": {
          "type": "array",
          "description": "Array of NVD reference URLs: vendor advisories, patches, mailing-list posts, and analysis writeups."
        }
      },
      "url": "https://x402.org/v1/cve-lookup"
    },
    "dao-proposal-monitor": {
      "slug": "dao-proposal-monitor",
      "price": "0.03",
      "cluster": "edge-market",
      "description": "Snapshot.org DAO proposal monitor. Recent proposals + vote tallies + voter counts for any Snapshot space. Optional Venice TLDR.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "dao",
        "governance",
        "snapshot",
        "proposals",
        "voting",
        "edge-market",
        "dao-monitor"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "space": {
            "type": "string",
            "description": "Snapshot space (e.g. 'aave.eth')."
          },
          "state": {
            "type": "string",
            "enum": [
              "active",
              "closed",
              "pending",
              "all"
            ],
            "description": "Filter by proposal state. Default 'all'."
          },
          "limit": {
            "type": "number",
            "description": "Max proposals to return. 1-50. Default 10 (most-recent-first)."
          },
          "summarize": {
            "type": "boolean",
            "description": "If true, generates a Venice-LLM TLDR per proposal (extra latency). Default false."
          }
        },
        "required": [
          "space"
        ]
      },
      "outputProperties": {
        "proposal_count": {
          "type": "string",
          "description": "Number of recent Snapshot proposals returned for the requested space."
        }
      },
      "url": "https://x402.org/v1/dao-proposal-monitor"
    },
    "db-migration-risk": {
      "slug": "db-migration-risk",
      "price": "0.02",
      "cluster": "prooflayer",
      "description": "DB migration risk audit / SQL migration safety check / DROP COLUMN detector / unsafe ALTER TABLE detector / Postgres CREATE INDEX CONCURRENTLY check / Alembic op.drop_* detector / TRUNCATE/DELETE WHERE detector / foreign key NOT VALID check / pre-deploy DB gate. Walks `migrations/`, `prisma/migrations/`, `db/migrate/`, `supabase/migrations/`, `alembic/versions/` and flags destructive DDL, lock-heavy ALTER TABLE, NOT NULL without DEFAULT, plain CREATE INDEX (vs CONCURRENTLY), unbounded TRUNCATE/DELETE, and FK validation without NOT VALID. Returns 0-100 score, per-finding kind/severity/path/line/evidence/recommendation, and a Venice plain-English verdict. Dual input: {repo: 'owner/name'} for public GitHub or {files: [{path, content}, …]} for private / agent-workspace use.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "security",
        "database",
        "migrations",
        "sql",
        "alembic",
        "postgres",
        "prooflayer"
      ],
      "inputSchema": {
        "type": "object"
      },
      "outputProperties": {
        "score": {
          "type": "number",
          "description": "Overall migration safety score from 0-100, with higher meaning safer (fewer destructive or lock-heavy operations found)."
        },
        "risk_level": {
          "type": "string",
          "description": "Bucketed risk label like low/medium/high/critical derived from the score and worst-finding severity."
        },
        "findings": {
          "type": "array",
          "description": "Array of detected issues, each with kind, severity, file path, line number, evidence snippet, and recommendation."
        },
        "signals": {
          "type": "object",
          "description": "Counts of detected patterns by kind (drop_column, alter_table, create_index_blocking, fk_not_valid, truncate, etc.)."
        },
        "summary": {
          "type": "string",
          "description": "Venice-generated plain-English verdict explaining the top risks and whether the migration set is safe to deploy."
        },
        "metadata": {
          "type": "object",
          "description": "Run metadata: files scanned, migration dirs found, repo or files mode, framework detected (alembic/prisma/etc), timing."
        }
      },
      "url": "https://x402.org/v1/db-migration-risk"
    },
    "defi-llama-protocol": {
      "slug": "defi-llama-protocol",
      "price": "0.02",
      "cluster": "edge-market",
      "description": "DefiLlama protocol lookup — TVL, chain breakdown, current TVL, 24h/7d/30d changes, audits, parent protocol, categories. Free public API with attribution.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "defi",
        "tvl",
        "protocol-lookup",
        "onchain-data",
        "defillama"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "protocol": {
            "type": "string",
            "description": "DefiLlama slug (e.g. 'aave', 'lido')."
          },
          "include_tvl_series": {
            "type": "boolean",
            "description": "If true, attach the full historical TVL time-series under tvl_summary.series. Adds significant payload size. Default false."
          }
        },
        "required": [
          "protocol"
        ]
      },
      "outputProperties": {
        "current_tvl_usd": {
          "type": "string",
          "description": "Current total value locked across all chains for the protocol, denominated in USD."
        },
        "name": {
          "type": "string",
          "description": "Protocol name as listed on DefiLlama (e.g., Aave, Uniswap, Lido)."
        }
      },
      "url": "https://x402.org/v1/defi-llama-protocol"
    },
    "defi-yield-pools": {
      "slug": "defi-yield-pools",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "DeFi yield pools / APY aggregator / yield-farming opportunities / DeFiLlama yields / cross-protocol APY ranking / stablecoin yields / LP pool returns. Filter and rank thousands of DeFi yield-bearing pools across every chain DeFiLlama tracks. Filters: chain, project, asset symbol, stablecoin-only, single-vs-LP exposure, TVL minimum, APY range, impermanent-loss risk. Returns pool ID, chain, project, symbol, current APY (base + reward), 30-day mean APY, day/week/month APY change, TVL, exposure, IL risk, and predicted-class. Differentiates from defi-llama-protocol (single-protocol TVL) — this is the yield-discovery surface.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "defi",
        "yield-aggregator",
        "apy-ranking",
        "defillama",
        "stablecoin-yields",
        "liquidity-pools",
        "yield-farming",
        "pool-screener"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "chain": {
            "type": "string",
            "description": "e.g. 'Ethereum', 'Base', 'Arbitrum'. Exact-case match against DeFiLlama's chain field."
          },
          "project": {
            "type": "string",
            "description": "e.g. 'aave-v3', 'lido', 'uniswap-v3'. Exact match against DeFiLlama project slug."
          },
          "symbol": {
            "type": "string",
            "description": "Substring match against pool symbol, e.g. 'USDC'."
          },
          "stablecoin_only": {
            "type": "boolean",
            "description": "Only stablecoin pools."
          },
          "single_only": {
            "type": "boolean",
            "description": "Only single-asset exposure (excludes LP pairs)."
          },
          "min_tvl_usd": {
            "type": "number",
            "description": "Minimum TVL in USD."
          },
          "min_apy": {
            "type": "number",
            "description": "Minimum APY %."
          },
          "max_apy": {
            "type": "number",
            "description": "Maximum APY % (filters out outliers)."
          },
          "il_risk": {
            "type": "string",
            "enum": [
              "no",
              "yes"
            ],
            "description": "Filter by impermanent-loss risk classification."
          },
          "order_by": {
            "type": "string",
            "enum": [
              "apy",
              "tvlUsd",
              "apyBase",
              "apyReward"
            ],
            "description": "Default 'apy'."
          },
          "limit": {
            "type": "number",
            "description": "1-500. Default 50."
          }
        }
      },
      "outputProperties": {
        "pools": {
          "type": "string",
          "description": "Array of yield pool objects, each with chain, project, symbol, APY breakdown, TVL, exposure, and IL risk."
        },
        "count": {
          "type": "string",
          "description": "Number of pools returned in the pools array after filters and any result-limit truncation."
        },
        "matched_count": {
          "type": "string",
          "description": "Total pools matching the requested filters before any truncation to the returned page."
        },
        "universe_count": {
          "type": "string",
          "description": "Total pools in the DeFiLlama yields universe before filters are applied."
        },
        "summary": {
          "type": "string",
          "description": "Short text rollup of the result set: top APYs, dominant chains/projects, and TVL coverage."
        },
        "attribution": {
          "type": "string",
          "description": "Upstream data credit string pointing to DeFiLlama yields as the source of pool data."
        }
      },
      "url": "https://x402.org/v1/defi-yield-pools"
    },
    "dep-risk-summary": {
      "slug": "dep-risk-summary",
      "price": "0.03",
      "cluster": "prooflayer",
      "description": "repo dependency risk audit / package.json + lockfile vetter / unpinned dep detector / transitive dep counter / requirements.txt audit / pyproject dep risk / repo-level supply-chain risk score / Snyk-adjacent / deprecated dep detector / install-script dep detector. Best-effort scan of package.json, pnpm-lock.yaml, package-lock.json, yarn.lock, bun.lock (JS); requirements.txt, pyproject.toml, poetry.lock (Python); go.mod, go.sum (Go). Samples 10 alphabetically-first direct deps via npm/PyPI registry for deprecation + install-script signals. Returns 0-100 score, per-finding kind/severity/path/evidence/recommendation, and a Venice plain-English verdict. Dual input: {repo: 'owner/name'} or {files: [{path, content}, …]}.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "security",
        "dependencies",
        "supply-chain",
        "npm",
        "pypi",
        "lockfile",
        "prooflayer"
      ],
      "inputSchema": {
        "type": "object"
      },
      "outputProperties": {
        "score": {
          "type": "number",
          "description": "Overall dependency risk score from 0 (clean) to 100 (severe), aggregated across findings and sampled registry signals."
        },
        "risk_level": {
          "type": "string",
          "description": "Bucketed risk tier derived from score: low, medium, high, or critical."
        },
        "findings": {
          "type": "array",
          "description": "Per-issue list with kind, severity, file path, evidence snippet, and recommendation for each detected risk."
        },
        "signals": {
          "type": "object",
          "description": "Counters and flags like unpinned deps, deprecated packages, install-script presence, transitive count, and lockfile state."
        },
        "summary": {
          "type": "string",
          "description": "Venice-generated plain-English verdict explaining the score and top risks in a few sentences."
        },
        "metadata": {
          "type": "object",
          "description": "Scan context including manifests parsed, ecosystems detected, sampled package count, repo or files mode, and timing."
        }
      },
      "url": "https://x402.org/v1/dep-risk-summary"
    },
    "deploy-config-risk": {
      "slug": "deploy-config-risk",
      "price": "0.02",
      "cluster": "prooflayer",
      "description": "deploy config audit / Dockerfile lint / vercel.json hardening / wrangler.toml review / docker-compose.yml safety / fly.toml secrets check / netlify deploy gate / open CORS detector / exposed admin port detector / plaintext secret in env detector / production-readiness deploy gate. Fetches deploy config files (Dockerfile, wrangler.toml, vercel.json, netlify.toml, fly.toml, docker-compose.yml, serverless.yml) and flags open CORS with credentials, exposed admin ports (22/5432/6379/etc), plaintext secrets in inline env, dev/debug mode left enabled, missing healthchecks. Returns 0-100 score, per-finding kind/severity/path/line/redacted-evidence/recommendation, and a Venice plain-English verdict. Dual input: {repo: 'owner/name'} for public GitHub or {files: [{path, content}, …]} for private / agent-workspace use.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "security",
        "deploy",
        "dockerfile",
        "cors",
        "secrets",
        "prooflayer"
      ],
      "inputSchema": {
        "type": "object"
      },
      "outputProperties": {
        "score": {
          "type": "number",
          "description": "Risk score from 0-100 where higher means safer deploy config; aggregates all finding severities."
        },
        "risk_level": {
          "type": "string",
          "description": "Risk bucket like 'low', 'medium', 'high', or 'critical' derived from the score and worst findings."
        },
        "findings": {
          "type": "array",
          "description": "Array of issues with kind, severity, file path, line number, redacted evidence, and recommendation per item."
        },
        "signals": {
          "type": "object",
          "description": "Object of detected config signals like open_cors, exposed_ports, plaintext_secrets, debug_mode, missing_healthcheck."
        },
        "summary": {
          "type": "string",
          "description": "Venice plain-English verdict summarizing the deploy config's production-readiness and top risks."
        },
        "metadata": {
          "type": "object",
          "description": "Run metadata including files scanned, file types detected, repo or input mode, and audit timestamp."
        }
      },
      "url": "https://x402.org/v1/deploy-config-risk"
    },
    "describe-image": {
      "slug": "describe-image",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "AI image descriptor / vision LLM. Modes: describe, alt_text (accessibility, ≤125 chars), OCR (extract visible text), tags (8-15 keywords), caption (single-sentence). Vision LLM powered.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "image",
        "vision",
        "ocr",
        "alt-text",
        "caption",
        "ai",
        "llm"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public URL of an image."
          },
          "mode": {
            "type": "string",
            "enum": [
              "describe",
              "alt_text",
              "ocr",
              "tags",
              "caption"
            ],
            "description": "'describe' (default), 'alt_text', 'ocr', 'tags', 'caption'."
          },
          "prompt": {
            "type": "string",
            "description": "Optional custom instruction. Overrides mode."
          }
        },
        "required": [
          "image_url"
        ]
      },
      "outputProperties": {
        "text": {
          "type": "string",
          "description": "Generated output for the selected mode: prose description, alt text, extracted OCR text, keyword list, or caption."
        },
        "mode": {
          "type": "string",
          "description": "Mode used to generate the output: describe, alt_text, ocr, tags, or caption."
        },
        "image_url": {
          "type": "string",
          "description": "URL of the source image that was analyzed by the vision LLM."
        },
        "model": {
          "type": "string",
          "description": "Vision LLM model name that produced the description (e.g. claude-haiku-4-5)."
        }
      },
      "url": "https://x402.org/v1/describe-image"
    },
    "detect-language": {
      "slug": "detect-language",
      "price": "0.005",
      "cluster": "wordmint",
      "description": "Language detector / language identification. ISO 639-1 code, full name, confidence (0-1). Mixed-language detection with secondary languages list. 100+ languages.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "nlp",
        "language",
        "detect",
        "ai",
        "i18n"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text. Max 10,000 chars (only first 2k sampled to model)."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "language_code": {
          "type": "string",
          "description": "ISO 639-1 two-letter code."
        },
        "language_name": {
          "type": "string",
          "description": "Full English name of the detected primary language (e.g., 'English', 'Spanish', 'Mandarin Chinese')."
        },
        "confidence": {
          "type": "number",
          "description": "0 to 1."
        },
        "is_mixed": {
          "type": "boolean",
          "description": "True when the input contains meaningful content in more than one language above the detection threshold."
        },
        "secondary_languages": {
          "type": "array",
          "description": "ISO codes if is_mixed=true."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the submitted text that was analyzed for language detection."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the language-detection model or library version used to produce the result."
        }
      },
      "url": "https://x402.org/v1/detect-language"
    },
    "detect-pii": {
      "slug": "detect-pii",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "PII detector / data leak scanner. Emails, phones, SSNs, credit cards, addresses, names, IPs, API tokens. Returns matches + risk_level. Optional redaction with [TYPE] tokens.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "pii",
        "privacy",
        "redact",
        "compliance",
        "security"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Raw text to scan for PII like emails, phones, SSNs, credit cards, addresses, names, IPs, and API tokens."
          },
          "redact": {
            "type": "boolean",
            "description": "Return text with matches replaced by [TYPE]."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "matches": {
          "type": "array",
          "description": "Array of detected PII items, each with the matched value, type label, and character offset in the text."
        },
        "match_count": {
          "type": "number",
          "description": "Total number of PII matches found across all types."
        },
        "pii_density": {
          "type": "number",
          "description": "Ratio of PII characters to total input characters, roughly 0 to 1."
        },
        "risk_level": {
          "type": "string",
          "description": "Overall risk bucket such as none, low, medium, or high based on match types and density."
        },
        "redacted_text": {
          "type": "string",
          "description": "Input text with each match replaced by a [TYPE] token like [EMAIL] or [SSN] when redaction is requested."
        },
        "input_chars": {
          "type": "number",
          "description": "Character length of the submitted text."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the detection model or ruleset version used for this scan."
        }
      },
      "url": "https://x402.org/v1/detect-pii"
    },
    "dex-liquidity-depth": {
      "slug": "dex-liquidity-depth",
      "price": "0.01",
      "cluster": "edge-market",
      "description": "DEX liquidity depth / pool TVL aggregator / total liquidity per token / on-chain liquidity audit. Sums TVL across every DefiLlama-tracked yield pool that holds a given ERC-20 on Ethereum, Base, Polygon, Arbitrum, or Optimism. Returns per-pool TVL + APY plus total liquidity in USD and the deepest pool. Free public DefiLlama backend, no auth.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "defi",
        "liquidity-depth",
        "pool-tvl",
        "token-liquidity",
        "dex-aggregator",
        "defillama"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "token_address": {
            "type": "string",
            "description": "0x-prefixed 20-byte ERC-20 contract address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'base'."
          }
        },
        "required": [
          "token_address"
        ]
      },
      "outputProperties": {
        "token_address": {
          "type": "string",
          "description": "ERC-20 contract address queried, lowercased hex."
        },
        "chain": {
          "type": "string",
          "description": "Chain the token lives on (ethereum, base, polygon, arbitrum, or optimism)."
        },
        "pool_count": {
          "type": "string",
          "description": "Number of DefiLlama-tracked yield pools holding this token on the chain."
        },
        "total_liquidity_usd": {
          "type": "string",
          "description": "Sum of TVL in USD across every matched pool."
        },
        "pools": {
          "type": "string",
          "description": "Array of pools with project, symbol, TVL in USD, and APY for each."
        },
        "top_pool": {
          "type": "string",
          "description": "Deepest single pool by TVL, with project name, symbol, and USD depth."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider, always defillama for this endpoint."
        }
      },
      "url": "https://x402.org/v1/dex-liquidity-depth"
    },
    "dictionary-define": {
      "slug": "dictionary-define",
      "price": "0.002",
      "cluster": "wordmint",
      "description": "English dictionary / word definition / lookup word / pronunciation / part of speech / synonyms / etymology adjacent. Returns part-of-speech-grouped definitions with usage examples and per-sense synonyms, plus IPA phonetic and a pronunciation audio URL when available. Wraps the public Free Dictionary API — no auth, commercial-OK.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "dictionary",
        "wordmint",
        "define-word",
        "pronunciation",
        "synonyms",
        "etymology",
        "ipa-phonetic",
        "word-lookup"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "word": {
            "type": "string",
            "description": "English word to define (case-insensitive). Single token, no whitespace required for compound words."
          }
        },
        "required": [
          "word"
        ]
      },
      "outputProperties": {
        "word": {
          "type": "string",
          "description": "Headword that was looked up, normalized to lowercase as returned by the Free Dictionary API."
        },
        "phonetic": {
          "type": "string",
          "description": "IPA phonetic transcription of the word (e.g. /ˈwɜːrd/), empty string when no phonetic is available."
        },
        "pronunciation_audio_url": {
          "type": "string",
          "description": "URL to an MP3 pronunciation clip when one is available, empty string otherwise."
        },
        "meanings": {
          "type": "string",
          "description": "Array of part-of-speech groups, each with definitions, usage examples, and per-sense synonyms/antonyms."
        },
        "source": {
          "type": "string",
          "description": "Upstream source attribution, set to \"Free Dictionary API (dictionaryapi.dev)\"."
        }
      },
      "url": "https://x402.org/v1/dictionary-define"
    },
    "disposable-email-check": {
      "slug": "disposable-email-check",
      "price": "0.005",
      "cluster": "web-probe",
      "description": "Disposable email detector / fake email filter / fraud signup defense. Cross-checks 100k+ disposable domains list. Flags role accounts (admin@, noreply@). Verifies MX record via Cloudflare DoH.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "email",
        "disposable",
        "validation",
        "fraud"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Email address to evaluate (e.g. 'user@mailinator.com'). Only the domain and local-part shape are used; the address is not contacted."
          }
        },
        "required": [
          "email"
        ]
      },
      "outputProperties": {
        "email": {
          "type": "string",
          "description": "Normalized email address that was checked, lowercased with whitespace trimmed."
        },
        "local_part": {
          "type": "string",
          "description": "Portion before the @ sign, e.g. 'jdoe' from 'jdoe+tag@example.com'."
        },
        "domain": {
          "type": "string",
          "description": "Portion after the @ sign, lowercased, e.g. 'mailinator.com'."
        },
        "is_valid_format": {
          "type": "boolean",
          "description": "True if the address parses as a syntactically valid RFC 5322 email."
        },
        "is_disposable": {
          "type": "boolean",
          "description": "True if the domain matches a known disposable/throwaway email provider in the blocklist."
        },
        "matched_blocklist_domain": {
          "type": "string",
          "description": "Exact blocklist entry that matched the email's domain, or empty string if no match."
        },
        "is_explicitly_allowed": {
          "type": "boolean",
          "description": "True if the domain is on the allowlist override, bypassing the disposable check."
        },
        "is_role_account": {
          "type": "boolean",
          "description": "True if the local part is a generic role address like admin, noreply, support, or info."
        },
        "has_plus_tag": {
          "type": "boolean",
          "description": "True if the local part contains a '+' subaddress tag (e.g. 'user+spam@gmail.com')."
        },
        "has_mx_record": {
          "type": "boolean",
          "description": "True if the domain has at least one MX record resolvable via Cloudflare DoH."
        },
        "blocklist_size": {
          "type": "number",
          "description": "Total number of disposable domains in the blocklist used for this check."
        },
        "source": {
          "type": "string",
          "description": "Identifier for the blocklist source or version used, e.g. 'disposable-email-domains'."
        }
      },
      "url": "https://x402.org/v1/disposable-email-check"
    },
    "dmarc-check": {
      "slug": "dmarc-check",
      "price": "0.02",
      "cluster": "web-probe",
      "description": "DMARC / SPF / DKIM checker. Email-authentication audit — pulls TXT records, parses DMARC policy (none/quarantine/reject), SPF mechanisms, DKIM selectors. Returns 0-100 score + grade A-F + reasons.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "dmarc",
        "spf",
        "dkim",
        "email-auth",
        "deliverability",
        "security"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Apex domain to audit (e.g. 'google.com'). Resolves SPF/DMARC TXT at the domain and at _dmarc.<domain>."
          },
          "dkim_selectors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional list of DKIM selectors (e.g. ['google','default']). Default: 15 common selectors."
          }
        },
        "required": [
          "domain"
        ]
      },
      "outputProperties": {
        "domain": {
          "type": "string",
          "description": "Domain that was audited, echoed back from the request."
        },
        "score": {
          "type": "number",
          "description": "Numeric email-auth health score from 0 to 100 based on SPF, DKIM, and DMARC posture."
        },
        "grade": {
          "type": "string",
          "description": "Letter grade A through F mapped from the numeric score."
        },
        "reasons": {
          "type": "array",
          "description": "Array of strings explaining what hurt or helped the score (missing DMARC, weak policy, no DKIM, etc.)."
        },
        "spf": {
          "type": "object",
          "description": "Parsed SPF record: presence, raw TXT, mechanisms (include/ip4/all), and qualifier on the all directive."
        },
        "dmarc": {
          "type": "object",
          "description": "Parsed DMARC record: presence, policy (none/quarantine/reject), pct, subdomain policy, and rua/ruf tags."
        },
        "dkim": {
          "type": "object",
          "description": "DKIM lookup result: selectors probed, which returned valid public keys, and key algorithm/length where found."
        },
        "source": {
          "type": "string",
          "description": "Resolver or upstream used to fetch the TXT records (e.g. cloudflare-dns, google-dns)."
        }
      },
      "url": "https://x402.org/v1/dmarc-check"
    },
    "dns-lookup": {
      "slug": "dns-lookup",
      "price": "0.02",
      "cluster": "web-probe",
      "description": "DNS lookup / DNS resolver / DoH proxy. Query A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, CAA, DNSKEY, DS, TLSA, HTTPS, SVCB records via Cloudflare DNS-over-HTTPS. No DNS infrastructure required.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "dns",
        "doh",
        "resolver",
        "mx",
        "txt",
        "spf"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Domain or hostname to resolve (e.g. 'example.com', 'mail.example.com'). Sent as-is, not stripped to apex."
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Default: A, AAAA, MX, TXT, NS, CAA. Max 12 types per call."
          }
        },
        "required": [
          "domain"
        ]
      },
      "outputProperties": {
        "domain": {
          "type": "string",
          "description": "Domain name that was queried (echoed from the request input)."
        },
        "types_queried": {
          "type": "array",
          "description": "List of DNS record types resolved in this call (e.g. A, AAAA, MX, TXT, NS, CNAME)."
        },
        "records": {
          "type": "object",
          "description": "Map keyed by record type, each value an array of resolved DNS records returned by Cloudflare DoH."
        },
        "flat": {
          "type": "object",
          "description": "Convenience flat fields: a[], aaaa[], mx[], ns[], txt[], cname[], caa[]."
        },
        "total_records": {
          "type": "number",
          "description": "Total count of DNS records returned across all queried types."
        },
        "source": {
          "type": "string",
          "description": "Upstream resolver identifier, typically cloudflare-dns.com (DNS-over-HTTPS)."
        }
      },
      "url": "https://x402.org/v1/dns-lookup"
    },
    "domain-availability": {
      "slug": "domain-availability",
      "price": "0.005",
      "cluster": "web-probe",
      "description": "Domain availability / RDAP lookup / WHOIS replacement / domain registration checker / expiry date lookup. Returns is_registered, registrar, registration date, expiry date, days_until_expiry, and current EPP status flags for any TLD that supports RDAP (effectively all gTLDs and most ccTLDs). Backed by rdap.org, the public RFC-7480-compliant aggregator. 404s map to is_registered: false rather than an error.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "domain-availability",
        "rdap",
        "whois",
        "domain-lookup",
        "domain-expiry",
        "registrar-lookup"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Domain to check (e.g. 'example.com'). Strip protocol/path automatically."
          }
        },
        "required": [
          "domain"
        ]
      },
      "outputProperties": {
        "domain": {
          "type": "string",
          "description": "Domain name that was queried, echoed back in lowercase canonical form."
        },
        "is_registered": {
          "type": "string",
          "description": "Boolean indicating whether the domain has an active RDAP record; false when rdap.org returns 404."
        },
        "registrar": {
          "type": "string",
          "description": "Sponsoring registrar name from the RDAP record, or null if not disclosed by the registry."
        },
        "status": {
          "type": "string",
          "description": "Array of EPP status codes currently set on the domain, like clientTransferProhibited or pendingDelete."
        },
        "registered_date": {
          "type": "string",
          "description": "Original registration timestamp from the RDAP events array, in ISO 8601 format."
        },
        "expires_date": {
          "type": "string",
          "description": "Current expiration timestamp from the RDAP events array, in ISO 8601 format."
        },
        "last_changed": {
          "type": "string",
          "description": "Most recent modification timestamp from the RDAP events array, in ISO 8601 format."
        },
        "days_until_expiry": {
          "type": "string",
          "description": "Integer days between now and expires_date; negative if the domain has already expired."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source identifier, typically rdap.org indicating which RDAP aggregator answered."
        }
      },
      "url": "https://x402.org/v1/domain-availability"
    },
    "domain-suggest": {
      "slug": "domain-suggest",
      "price": "0.05",
      "cluster": "web-probe",
      "description": "Brandable domain suggester / startup-name brainstormer / product-name proposer / domain candidate generator. LLM brainstorms N short brandable candidates fitting a concept + tone, then verifies TLD availability across up to 6 TLDs via in-process domain-availability lookups. Returns candidates ranked by # available TLDs then brandability score, with per-TLD registrar info for each candidate. Pair with brand-clearance (Prooflayer) on the shortlist for trademark + Wikipedia + HN signal before adopting. Allowlisted TLDs: com, ai, dev, io, co, app, xyz, org, net, tech, tools, page, studio, shop.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "domain-availability",
        "brandable-names",
        "startup-naming",
        "product-naming",
        "tld-check",
        "name-generator",
        "domain-suggest"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "concept": {
            "type": "string",
            "description": "Plain-language product / project description (1-240 chars). Example: 'graded-card portfolio tracker for collectors' or 'paid AI utility primitives for agents'."
          },
          "count": {
            "type": "number",
            "description": "Number of candidates to brainstorm. 1-20. Default 10. Multiplied by tlds.length must stay <= 80 lookups."
          },
          "tlds": {
            "type": "array",
            "description": "TLDs to check, without dots. Default ['com','ai','dev','io','co']. Allowlist: com, ai, dev, io, co, app, xyz, org, net, tech, tools, page, studio, shop. Max 6."
          },
          "tone": {
            "type": "string",
            "enum": [
              "neutral",
              "playful",
              "technical",
              "luxury",
              "industrial"
            ],
            "description": "Naming tone hint passed to the brainstorm LLM. Default 'neutral'."
          }
        },
        "required": [
          "concept"
        ]
      },
      "outputProperties": {
        "concept": {
          "type": "string",
          "description": "Echoes back the concept/seed phrase the caller supplied for brandable name brainstorming."
        },
        "returned_count": {
          "type": "string",
          "description": "Number of candidate names returned in the candidates array after LLM brainstorm + TLD checks."
        },
        "tlds_checked": {
          "type": "string",
          "description": "List of TLDs queried for each candidate, drawn from the 14-TLD allowlist (com, ai, dev, io, etc.)."
        },
        "candidates": {
          "type": "string",
          "description": "Ranked array of brandable name candidates, each with per-TLD availability + registrar info and a brandability score."
        }
      },
      "url": "https://x402.org/v1/domain-suggest"
    },
    "earnings-calendar": {
      "slug": "earnings-calendar",
      "price": "0.03",
      "cluster": "edge-finance",
      "description": "Earnings calendar derived from SEC 8-K Item 2.02, 10-Q, 10-K, NT 10-Q, NT 10-K filings. Federal public SEC EDGAR data only — no aggregator ToU concerns.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "earnings-calendar",
        "sec-filings",
        "sec-edgar",
        "8-k",
        "10-q",
        "earnings-dates"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string",
            "description": "US-listed ticker (e.g. 'AAPL', 'MSFT'). Either ticker or cik is required."
          },
          "cik": {
            "type": "string",
            "description": "SEC CIK (zero-padded or numeric, e.g. '0000320193'). Use when ticker is ambiguous or unavailable."
          },
          "limit": {
            "type": "number",
            "description": "Max earnings-related filings to return. 1-50. Default 8."
          },
          "upcoming_only": {
            "type": "boolean",
            "description": "If true, only returns the next-earnings estimate plus future-dated filings (skips historical events). Default false."
          }
        }
      },
      "outputProperties": {
        "event_count": {
          "type": "string",
          "description": "Total number of earnings-related filings matched across the requested ticker and date window."
        },
        "next_earnings_estimate": {
          "type": "string",
          "description": "Projected date of the next earnings release based on the issuer's prior 8-K/10-Q/10-K cadence."
        }
      },
      "url": "https://x402.org/v1/earnings-calendar"
    },
    "earnings-call-transcribe": {
      "slug": "earnings-call-transcribe",
      "price": "0.03",
      "cluster": "edge-finance",
      "description": "Earnings call transcriber. Caller-supplied IR webcast/replay URL → Whisper v3 transcript → optional Venice structured summary (prepared remarks, Q&A, guidance, key metrics).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "earnings-call",
        "transcription",
        "whisper",
        "investor-relations",
        "q-and-a",
        "earnings-transcript"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "audio_url": {
            "type": "string",
            "description": "Public URL to the IR webcast or replay audio/video file to transcribe."
          },
          "ticker": {
            "type": "string",
            "description": "Company stock ticker symbol, used to label the transcript and guide structured summary extraction."
          },
          "summarize": {
            "type": "boolean",
            "description": "If true, runs the Venice structured summary pass over the transcript (prepared remarks, Q&A, guidance, metrics)."
          },
          "language": {
            "type": "string",
            "description": "ISO language code for the audio; defaults to auto-detect if omitted."
          }
        },
        "required": [
          "audio_url"
        ]
      },
      "outputProperties": {
        "transcript_chars": {
          "type": "string",
          "description": "Character count of the full Whisper v3 transcript returned in the response."
        },
        "duration_seconds": {
          "type": "string",
          "description": "Length of the transcribed audio in seconds, as measured from the source file."
        }
      },
      "url": "https://x402.org/v1/earnings-call-transcribe"
    },
    "earnings-transcript": {
      "slug": "earnings-transcript",
      "price": "0.03",
      "cluster": "edge-finance",
      "description": "Earnings call transcript generator. Submit any IR webcast or replay URL — Whisper v3 returns a full transcript, plus an optional Venice structured summary (prepared remarks, Q&A, guidance, key metrics). Same backend as earnings-call-transcribe under a clearer slug.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "earnings-call",
        "transcript",
        "whisper",
        "investor-relations",
        "earnings-summary",
        "webcast-transcription"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "audio_url": {
            "type": "string",
            "description": "URL of the earnings call webcast, replay, or audio file to transcribe."
          },
          "ticker": {
            "type": "string",
            "description": "Stock ticker symbol for the company (e.g., AAPL) to tag the transcript."
          },
          "summarize": {
            "type": "boolean",
            "description": "If true, returns a Venice structured summary with prepared remarks, Q&A, guidance, and key metrics."
          },
          "language": {
            "type": "string",
            "description": "ISO language code hint for Whisper v3 transcription (defaults to auto-detect)."
          }
        },
        "required": [
          "audio_url"
        ]
      },
      "outputProperties": {
        "transcript_chars": {
          "type": "string",
          "description": "Character count of the returned earnings call transcript."
        },
        "duration_seconds": {
          "type": "string",
          "description": "Length of the transcribed audio in seconds."
        }
      },
      "url": "https://x402.org/v1/earnings-transcript"
    },
    "earthquakes-recent": {
      "slug": "earthquakes-recent",
      "price": "0.002",
      "cluster": "locale",
      "description": "Earthquake feed / seismic activity / USGS / recent quakes / quake monitor / tremor data / fault line activity / tsunami alerts. Returns recent earthquakes from the past hour / day / week / month, filtered by minimum magnitude and an optional bounding box. Each quake includes magnitude + type, depth (km), place, ISO8601 time, lat/lon, tsunami flag, USGS event URL, and felt-report count when available. Wraps USGS GeoJSON summary feeds — public domain, no auth.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "earthquakes",
        "seismic",
        "usgs",
        "tsunami-alerts",
        "magnitude-filter",
        "quake-feed"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "time_range": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "description": "Time window for the feed. Default 'day'."
          },
          "min_magnitude": {
            "type": "number",
            "description": "Lower bound on quake magnitude (Richter/moment). Default 2.5."
          },
          "bounds": {
            "type": "object",
            "description": "Optional geographic bounding box { north, south, east, west } in decimal degrees. Antimeridian-crossing boxes (west > east) supported.",
            "properties": {
              "north": {
                "type": "number"
              },
              "south": {
                "type": "number"
              },
              "east": {
                "type": "number"
              },
              "west": {
                "type": "number"
              }
            }
          }
        }
      },
      "outputProperties": {
        "count": {
          "type": "string",
          "description": "Number of earthquakes returned in this response after magnitude and bounding-box filtering."
        },
        "range": {
          "type": "string",
          "description": "Time window covered (hour, day, week, or month) corresponding to the USGS feed selected."
        },
        "earthquakes": {
          "type": "string",
          "description": "Array of quake records with magnitude, depth km, place, ISO8601 time, lat/lon, tsunami flag, and USGS URL."
        },
        "source": {
          "type": "string",
          "description": "Upstream USGS GeoJSON summary feed URL the records were pulled from."
        }
      },
      "url": "https://x402.org/v1/earthquakes-recent"
    },
    "email-draft": {
      "slug": "email-draft",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "AI email writer / cold outreach / follow-up generator. Subject + body + salutation + sign-off. 7 tones × 10 email types (cold_outreach, follow_up, decline, reply, internal_update, thank_you, intro, request, apology, general). Length controls.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "email",
        "writing",
        "outreach",
        "ai"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "What you want to communicate, to whom."
          },
          "recipient_name": {
            "type": "string",
            "description": "Name of the person the email is addressed to, used in the salutation."
          },
          "sender_name": {
            "type": "string",
            "description": "Name of the person sending the email, used in the sign-off."
          },
          "tone": {
            "type": "string",
            "description": "Voice for the draft (one of 7 tones, e.g. formal, casual, friendly, direct, warm, professional, urgent)."
          },
          "email_type": {
            "type": "string",
            "description": "Email category: cold_outreach, follow_up, decline, reply, internal_update, thank_you, intro, request, apology, or general."
          },
          "length": {
            "type": "string",
            "enum": [
              "very_short",
              "short",
              "medium",
              "long"
            ],
            "description": "Target draft length (short, medium, or long) controlling word count."
          },
          "cta": {
            "type": "string",
            "description": "Call-to-action the body should drive toward (meeting, reply, link click, etc.)."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "subject": {
          "type": "string",
          "description": "Generated subject line for the email."
        },
        "body": {
          "type": "string",
          "description": "Main email body text between salutation and sign-off."
        },
        "salutation": {
          "type": "string",
          "description": "Opening greeting line (e.g. 'Hi Sarah,')."
        },
        "sign_off": {
          "type": "string",
          "description": "Closing line with sender name (e.g. 'Best, Adam')."
        },
        "word_count": {
          "type": "number",
          "description": "Total word count of the generated body."
        },
        "estimated_reading_seconds": {
          "type": "number",
          "description": "Estimated time in seconds for a typical reader to finish the email."
        },
        "tone": {
          "type": "string",
          "description": "Tone that was applied to the generated draft."
        },
        "email_type": {
          "type": "string",
          "description": "Email category that was generated."
        },
        "length": {
          "type": "string",
          "description": "Length bucket the draft was generated at."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the AI model that produced the draft."
        }
      },
      "url": "https://x402.org/v1/email-draft"
    },
    "embedding-similarity": {
      "slug": "embedding-similarity",
      "price": "0.002",
      "cluster": "wordmint",
      "description": "Embedding similarity / cosine similarity / semantic match / vector compare / are-these-strings-similar. Embeds two strings via Venice (default model: text-embedding-bge-m3) and returns the cosine similarity as a single float in [-1, 1]. Useful for paraphrase detection, dedup, and cheap retrieval routing.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "embeddings",
        "cosine-similarity",
        "semantic-search",
        "vector-compare",
        "paraphrase-detection",
        "dedup",
        "embedding-similarity"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text_a": {
            "type": "string",
            "description": "First text. Up to 30,000 chars."
          },
          "text_b": {
            "type": "string",
            "description": "Second text. Up to 30,000 chars."
          },
          "model": {
            "type": "string",
            "description": "Venice embedding model. Default 'text-embedding-bge-m3'."
          }
        },
        "required": [
          "text_a",
          "text_b"
        ]
      },
      "outputProperties": {
        "text_a": {
          "type": "string",
          "description": "Echoes back the first input string that was embedded for comparison."
        },
        "text_b": {
          "type": "string",
          "description": "Echoes back the second input string that was embedded for comparison."
        },
        "similarity": {
          "type": "string",
          "description": "Cosine similarity between the two embeddings as a float in [-1, 1]; 1 means identical direction."
        },
        "model": {
          "type": "string",
          "description": "Venice embedding model used to produce the vectors, defaults to text-embedding-bge-m3."
        },
        "dimensions": {
          "type": "string",
          "description": "Number of dimensions in each embedding vector returned by the model."
        },
        "source": {
          "type": "string",
          "description": "Upstream embedding provider that generated the vectors, typically venice."
        }
      },
      "url": "https://x402.org/v1/embedding-similarity"
    },
    "ens-resolve": {
      "slug": "ens-resolve",
      "price": "0.03",
      "cluster": "edge-market",
      "description": "ENS resolver / Ethereum Name Service lookup. Forward (vitalik.eth → 0x...address) and reverse (0x... → primary ENS name) with text records (avatar, url, description, com.twitter, com.github, email, org.telegram).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "ens",
        "ethereum",
        "crypto",
        "name-service",
        "web3"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "ENS name (vitalik.eth) or 0x address."
          },
          "text_records": {
            "type": "array",
            "description": "Optional text record keys to fetch (max 15). Default: avatar, url, description, com.twitter, com.github, email, org.telegram."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "mode": {
          "type": "string",
          "enum": [
            "forward",
            "reverse"
          ],
          "description": "Lookup direction performed: 'forward' for name-to-address, 'reverse' for address-to-name."
        },
        "ens_name": {
          "type": "string",
          "description": "ENS name resolved or queried (e.g. vitalik.eth), including subdomains when applicable."
        },
        "address": {
          "type": "string",
          "description": "Ethereum address (0x-prefixed, 20 bytes) tied to the ENS name."
        },
        "text_records": {
          "type": "object",
          "description": "Map of ENS text record keys to values (avatar, url, description, com.twitter, com.github, email, org.telegram)."
        },
        "source": {
          "type": "string",
          "description": "Resolver source used for the lookup (e.g. ENS public resolver contract or RPC endpoint)."
        }
      },
      "url": "https://x402.org/v1/ens-resolve"
    },
    "erc20-balance": {
      "slug": "erc20-balance",
      "price": "0.002",
      "cluster": "edge-market",
      "description": "ERC-20 balance reader / balanceOf / on-chain token balance / wallet balance lookup / multi-chain ERC20 balance / read Base / read Ethereum / read Arbitrum / read Optimism / read Polygon. Reads balanceOf(wallet) on a token contract across any supported EVM chain via public RPC (no API key needed). Co-fetches decimals to return both raw bigint and decimal-formatted balance. Supports historical block parameter. Useful for agent wallet introspection, payment reconciliation, treasury monitoring.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "erc20",
        "balance-of",
        "token-balance",
        "wallet-balance",
        "onchain-read",
        "evm-rpc",
        "multi-chain",
        "erc20-balance"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "ERC-20 contract address (0x...)."
          },
          "wallet": {
            "type": "string",
            "description": "Wallet address to query (0x...)."
          },
          "chain": {
            "description": "Chain id or slug. 8453|'base' (default), 1|'ethereum', 42161|'arbitrum', 10|'optimism', 137|'polygon', 56|'bsc', 43114|'avalanche'."
          },
          "block": {
            "description": "'latest' default, or hex/decimal block number for historical reads."
          }
        },
        "required": [
          "token",
          "wallet"
        ]
      },
      "outputProperties": {
        "chain": {
          "type": "string",
          "description": "Echoed EVM chain name the balance was read from (e.g. base, ethereum, arbitrum, optimism, polygon)."
        },
        "chain_id": {
          "type": "string",
          "description": "Numeric EVM chain ID as a string, matching the resolved chain (e.g. 8453 for Base, 1 for Ethereum)."
        },
        "token": {
          "type": "string",
          "description": "ERC-20 contract address whose balanceOf was called, echoed back in lowercase hex."
        },
        "wallet": {
          "type": "string",
          "description": "Wallet address whose token balance was queried, echoed back in lowercase hex."
        },
        "block": {
          "type": "string",
          "description": "Block tag or number at which balanceOf was evaluated (latest, or a specific block height as string)."
        },
        "balance_raw": {
          "type": "string",
          "description": "Raw balanceOf return value as a base-10 bigint string, before decimals scaling."
        },
        "balance_hex": {
          "type": "string",
          "description": "Raw balanceOf return value as a 0x-prefixed hex string straight from the eth_call response."
        },
        "decimals": {
          "type": "string",
          "description": "Token decimals fetched from the contract's decimals() call, used to format the human-readable balance."
        },
        "balance": {
          "type": "string",
          "description": "Decimal-formatted token balance as a string, scaled by decimals (e.g. 1234.5678 instead of raw units)."
        }
      },
      "url": "https://x402.org/v1/erc20-balance"
    },
    "erc20-metadata": {
      "slug": "erc20-metadata",
      "price": "0.002",
      "cluster": "edge-market",
      "description": "ERC-20 metadata reader / token info / token symbol lookup / token decimals / total supply / multi-chain ERC20 reader / Base / Ethereum / Arbitrum / Optimism / Polygon / BSC / Avalanche. Reads name(), symbol(), decimals(), totalSupply() in parallel via public RPC. Robust to non-standard tokens that return bytes32 instead of string (MakerDAO MKR pattern is decoded). Returns formatted total supply when decimals are present, plus a chain-appropriate block explorer URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "erc20",
        "token-metadata",
        "token-symbol",
        "token-decimals",
        "total-supply",
        "multi-chain",
        "edge-market",
        "erc20-reader"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "ERC-20 contract address (0x...)."
          },
          "chain": {
            "description": "Chain id or slug. 8453|'base' (default), 1|'ethereum', 42161|'arbitrum', 10|'optimism', 137|'polygon', 56|'bsc', 43114|'avalanche'."
          },
          "block": {
            "description": "'latest' default, or hex/decimal block number."
          }
        },
        "required": [
          "token"
        ]
      },
      "outputProperties": {
        "chain": {
          "type": "string",
          "description": "Chain name the token lives on (Base, Ethereum, Arbitrum, Optimism, Polygon, BSC, Avalanche)."
        },
        "chain_id": {
          "type": "string",
          "description": "EVM chain ID for the network the lookup ran against."
        },
        "token": {
          "type": "string",
          "description": "ERC-20 contract address that was queried, echoed back checksummed."
        },
        "block": {
          "type": "string",
          "description": "Block number the name/symbol/decimals/totalSupply reads were resolved against."
        },
        "name": {
          "type": "string",
          "description": "Token name from name(), with bytes32 fallback decoded for non-standard tokens like MKR."
        },
        "symbol": {
          "type": "string",
          "description": "Token symbol from symbol(), with bytes32 fallback decoded for non-standard tokens."
        },
        "decimals": {
          "type": "string",
          "description": "Decimals from decimals() as a stringified integer (e.g. '18', '6')."
        },
        "total_supply_raw": {
          "type": "string",
          "description": "Raw totalSupply() return value as a base-units integer string, no decimal scaling applied."
        },
        "total_supply": {
          "type": "string",
          "description": "Human-formatted total supply scaled by decimals, omitted if decimals weren't readable."
        },
        "explorer_url": {
          "type": "string",
          "description": "Block explorer link for the token on its chain (Basescan, Etherscan, Arbiscan, etc.)."
        }
      },
      "url": "https://x402.org/v1/erc20-metadata"
    },
    "eth-logs": {
      "slug": "eth-logs",
      "price": "0.01",
      "cluster": "edge-market",
      "description": "eth_getLogs / on-chain event logs / EVM event reader / Transfer event scan / ERC20 Transfer logs / NFT mint logs / DEX swap events / multi-chain log scanner / log indexer / smart contract event reader. Generic eth_getLogs across Base / Ethereum / Arbitrum / Optimism / Polygon / BSC via public no-auth RPC. Supports address + up to 4 topics (with OR arrays), from/to block range, and a 'last_n_blocks' convenience param. Hard-capped at 5,000 logs and 10,000-block range per call.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "eth-getlogs",
        "event-logs",
        "evm-rpc",
        "erc20-transfers",
        "multi-chain",
        "log-indexer",
        "onchain-events"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "chain": {
            "description": "Chain id or slug. Default 'base'. Supported: 8453|'base', 1|'ethereum', 42161|'arbitrum', 10|'optimism', 137|'polygon', 56|'bsc'."
          },
          "address": {
            "description": "Contract address (0x..., string or array of strings). Optional."
          },
          "topics": {
            "type": "array",
            "description": "Up to 4 topics. Each element: hex string (32 bytes), array of hex strings (OR-filter), or null (wildcard at that position)."
          },
          "from_block": {
            "description": "Hex string ('0x...'), decimal number, or 'latest'/'earliest'/'pending'/'safe'/'finalized'."
          },
          "to_block": {
            "description": "Same shape as from_block. Default 'latest'."
          },
          "last_n_blocks": {
            "type": "number",
            "description": "Convenience: query the last N blocks. Overrides from/to_block."
          }
        }
      },
      "outputProperties": {
        "chain": {
          "type": "string",
          "description": "Chain name queried (base, ethereum, arbitrum, optimism, polygon, or bsc)."
        },
        "chain_id": {
          "type": "string",
          "description": "Numeric EVM chain ID corresponding to the chain that was queried."
        },
        "from_block": {
          "type": "string",
          "description": "Starting block number (inclusive) of the scanned range, as a decimal string."
        },
        "to_block": {
          "type": "string",
          "description": "Ending block number (inclusive) of the scanned range, as a decimal string."
        },
        "count": {
          "type": "string",
          "description": "Number of logs actually returned in this response after the 5,000-log cap."
        },
        "total_count": {
          "type": "string",
          "description": "Total logs matched by the filter before the 5,000-log cap was applied."
        },
        "truncated": {
          "type": "string",
          "description": "True if results hit the 5,000-log cap and more matching logs exist beyond what's returned."
        },
        "logs": {
          "type": "string",
          "description": "Array of raw eth_getLogs entries with address, topics, data, blockNumber, txHash, and logIndex."
        }
      },
      "url": "https://x402.org/v1/eth-logs"
    },
    "excel-to-csv": {
      "slug": "excel-to-csv",
      "price": "0.005",
      "cluster": "mediakit",
      "description": "Excel (.xlsx / .xls) → CSV / TSV / JSON converter. Multi-sheet handling. Returns each sheet by name. Adjacent to 'convert excel to google sheets' demand cluster.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "file-conversion",
        "excel",
        "xlsx",
        "csv",
        "tsv",
        "spreadsheet",
        "excel-to-csv"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "xlsx_url": {
            "type": "string",
            "description": "Public URL of the .xlsx or .xls workbook to download and convert."
          },
          "sheet": {
            "type": "string",
            "description": "Name of a specific sheet to extract; omit to return the first sheet or all sheets."
          },
          "format": {
            "type": "string",
            "enum": [
              "csv",
              "tsv",
              "json"
            ],
            "description": "Output format for sheet data: csv, tsv, or json."
          },
          "include_all_sheets": {
            "type": "boolean",
            "description": "If true, returns every sheet keyed by name instead of just one."
          }
        },
        "required": [
          "xlsx_url"
        ]
      },
      "outputProperties": {
        "sheet_count": {
          "type": "string",
          "description": "Number of sheets found in the workbook."
        },
        "total_rows": {
          "type": "string",
          "description": "Total row count summed across all converted sheets."
        }
      },
      "url": "https://x402.org/v1/excel-to-csv"
    },
    "excel-to-google-sheets": {
      "slug": "excel-to-google-sheets",
      "price": "0.005",
      "cluster": "mediakit",
      "description": "Convert Excel to Google Sheets / XLSX to Google Sheets / spreadsheet import / Numbers to Google Sheets / Excel to gsheet. Outputs CSV that imports directly into Google Sheets via File → Import → Upload (or paste-into-cells). Multi-sheet handling, encoding control, quote style. Same handler as excel-to-csv / xlsx-to-csv under a Google-Sheets-named slug.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "excel",
        "google-sheets",
        "csv",
        "spreadsheet",
        "import",
        "xlsx"
      ],
      "aliasOf": "excel-to-csv",
      "inputSchema": {
        "type": "object",
        "properties": {
          "xlsx_url": {
            "type": "string",
            "description": "Public URL of the Excel (.xlsx/.xls) or Numbers file to convert to Google-Sheets-ready CSV."
          },
          "sheet": {
            "type": "string",
            "description": "Sheet name or zero-based index to export; defaults to the first sheet when omitted."
          },
          "format": {
            "type": "string",
            "enum": [
              "csv",
              "tsv",
              "json"
            ],
            "description": "Output format selector (csv, tsv) controlling delimiter and quoting style for the Google Sheets import."
          },
          "include_all_sheets": {
            "type": "boolean",
            "description": "When true, exports every sheet concatenated or zipped instead of just the selected one."
          }
        },
        "required": [
          "xlsx_url"
        ]
      },
      "outputProperties": {
        "sheet_count": {
          "type": "string",
          "description": "Number of sheets found in the source workbook."
        },
        "total_rows": {
          "type": "string",
          "description": "Total row count across the exported sheet(s) in the returned CSV."
        }
      },
      "url": "https://x402.org/v1/excel-to-google-sheets"
    },
    "exchange-rates": {
      "slug": "exchange-rates",
      "price": "0.002",
      "cluster": "edge-finance",
      "description": "FX rates / forex / currency converter / USD to EUR / ECB rates / historical exchange rates. Returns the latest or any historical day's exchange rates between currencies, sourced from the European Central Bank via the public Frankfurter API. Specify a base currency (default USD), an optional quote currency or list, an optional date (YYYY-MM-DD or 'latest'), and an optional amount to also receive a converted value when a single quote is supplied. No auth, commercial-OK.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "forex",
        "exchange-rates",
        "currency-converter",
        "fx-rates",
        "ecb-rates",
        "historical-rates",
        "frankfurter"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "base": {
            "type": "string",
            "description": "ISO 4217 base currency code (e.g. 'USD', 'EUR'). Default 'USD'."
          },
          "quote": {
            "description": "Single ISO 4217 quote currency, or array of codes. Omit for all available rates."
          },
          "date": {
            "type": "string",
            "description": "'latest' (default) or a historical date in YYYY-MM-DD format."
          },
          "amount": {
            "type": "number",
            "description": "Optional amount in the base currency. When a single quote is supplied, the response includes the converted amount."
          }
        }
      },
      "outputProperties": {
        "base": {
          "type": "string",
          "description": "Base currency code used for the returned rates (e.g. USD, EUR), echoing the request's base parameter."
        },
        "date": {
          "type": "string",
          "description": "Date of the rates in YYYY-MM-DD format; resolves to the latest ECB publication date when 'latest' was requested."
        },
        "rates": {
          "type": "string",
          "description": "Object mapping quote currency codes to their exchange rate against the base currency on the given date."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider label, identifying the European Central Bank via the Frankfurter API."
        }
      },
      "url": "https://x402.org/v1/exchange-rates"
    },
    "expand-url": {
      "slug": "expand-url",
      "price": "0.02",
      "cluster": "web-probe",
      "description": "URL expander / redirect chain tracer / link-shortener resolver. Follows HTTP redirects step-by-step, returns every hop with status, location, redirect type, response time. Phishing-link analysis, marketing attribution, click-tracking.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "url",
        "redirect",
        "shortlink",
        "trace",
        "phishing"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Starting URL (typically a shortlink). Must be http(s)."
          },
          "max_hops": {
            "type": "number",
            "description": "1-50. Default 15."
          },
          "user_agent": {
            "type": "string",
            "description": "Optional User-Agent header to send (some shorteners gate by UA). Default is a generic browser UA."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "initial_url": {
          "type": "string",
          "description": "Original URL submitted for expansion before any redirects were followed."
        },
        "final_url": {
          "type": "string",
          "description": "Terminal URL reached after following the full redirect chain."
        },
        "final_status": {
          "type": "number",
          "description": "HTTP status code returned at the final hop (200, 404, etc.)."
        },
        "hop_count": {
          "type": "number",
          "description": "Number of redirect hops traversed between the initial and final URL."
        },
        "total_duration_ms": {
          "type": "number",
          "description": "Total wall-clock time in milliseconds to trace the full redirect chain."
        },
        "hops": {
          "type": "array",
          "description": "Ordered list of each redirect step with URL, status, location header, redirect type, and response time."
        },
        "truncated": {
          "type": "boolean",
          "description": "True if the chain hit the max-hop cap before reaching a terminal URL."
        },
        "error": {
          "type": "string",
          "description": "Error message if the trace failed (DNS failure, timeout, redirect loop, invalid URL)."
        }
      },
      "url": "https://x402.org/v1/expand-url"
    },
    "extract": {
      "slug": "extract",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "Named entity extractor / NER. People, organizations, locations, dates, emails, URLs, phone numbers, monetary amounts. Mistral-powered.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "nlp",
        "ner",
        "entities",
        "extraction",
        "ai",
        "llm"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text. Max 25,000 chars."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "entities": {
          "type": "object",
          "description": "Object with arrays: people, organizations, locations, dates, emails, urls, phone_numbers, amounts (each amount has mention/value/currency)."
        },
        "total_entities": {
          "type": "number",
          "description": "Count of named entities extracted across all categories (people, orgs, locations, dates, emails, URLs, phones, money)."
        },
        "input_chars": {
          "type": "number",
          "description": "Character length of the input text submitted for entity extraction."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the Mistral model used to perform the entity extraction."
        }
      },
      "url": "https://x402.org/v1/extract"
    },
    "extract-entities": {
      "slug": "extract-entities",
      "price": "0.005",
      "cluster": "wordmint",
      "description": "Named entity recognition (NER) / entity extractor. Pulls people, organizations, locations, dates, emails, URLs, phone numbers, monetary amounts. Verbatim with context. Mistral powered.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "nlp",
        "ner",
        "entities",
        "extraction",
        "ai",
        "llm"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text. Max 25,000 chars."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "entities": {
          "type": "object",
          "description": "Object with arrays: people, organizations, locations, dates, emails, urls, phone_numbers, amounts (each amount has mention/value/currency)."
        },
        "total_entities": {
          "type": "number",
          "description": "Count of entities extracted across all categories (people, orgs, locations, dates, emails, URLs, phones, amounts)."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the input text submitted for entity extraction."
        },
        "model": {
          "type": "string",
          "description": "Mistral model identifier used to perform the named entity recognition pass."
        }
      },
      "url": "https://x402.org/v1/extract-entities"
    },
    "extract-tables": {
      "slug": "extract-tables",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "Extract tables from PDF / table extractor / PDF to CSV / spreadsheet from PDF. Detects and extracts every table from a PDF document. Returns structured JSON or CSV per table. 30 pages max via Datalab Marker.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "pdf",
        "table-extraction",
        "pdf-to-csv",
        "data-extraction",
        "tables",
        "pdf-tables"
      ],
      "aliasOf": "pdf-extract-tables",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of a PDF file (http or https). Must be directly fetchable, not behind auth or a viewer redirect. Max 30 pages."
          },
          "page_range": {
            "type": "string",
            "description": "Optional 1-indexed page filter applied after extraction. Accepts ranges, single pages, or comma-lists: '1-5', '3', '1,3,5'. Default: all pages."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "source_url": {
          "type": "string",
          "description": "URL of the source PDF that was processed for table extraction."
        },
        "page_count": {
          "type": "string",
          "description": "Number of pages in the PDF that were scanned for tables (max 30)."
        },
        "tables": {
          "type": "string",
          "description": "Array of extracted tables, each with structured rows and columns in JSON or CSV form."
        },
        "source": {
          "type": "string",
          "description": "Upstream extraction provider used, typically Datalab Marker."
        }
      },
      "url": "https://x402.org/v1/extract-tables"
    },
    "fda-calendar": {
      "slug": "fda-calendar",
      "price": "0.03",
      "cluster": "edge-finance",
      "description": "FDA Advisory Committee meeting calendar. Upcoming + recent AdComm meetings scraped from FDA.gov public pages. Federal public.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "fda",
        "adcomm",
        "drug-approvals",
        "biotech-calendar",
        "regulatory-events",
        "fda-calendar"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "upcoming_only": {
            "type": "boolean",
            "description": "If true, return only meetings scheduled in the future (relative to fetched_at). Default false (returns recent + upcoming within the days_back window)."
          },
          "search": {
            "type": "string",
            "description": "Free-text filter applied to meeting title/committee (case-insensitive substring). Examples: 'vaccine', 'oncology', 'cardiovascular'."
          },
          "limit": {
            "type": "number",
            "description": "Max meetings to return (1-50). Default 25."
          }
        }
      },
      "outputProperties": {
        "returned": {
          "type": "string",
          "description": "JSON payload listing upcoming and recent FDA Advisory Committee meetings scraped from FDA.gov public pages."
        }
      },
      "url": "https://x402.org/v1/fda-calendar"
    },
    "fec-political-contributions": {
      "slug": "fec-political-contributions",
      "price": "0.04",
      "cluster": "edge-finance",
      "description": "FEC political contributions search via api.open.fec.gov. By donor / committee / candidate / cycle / state / amount. Federal public.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "political-contributions",
        "fec",
        "campaign-finance",
        "donor-search",
        "federal-elections",
        "fec-filings"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "donor_name": {
            "type": "string",
            "description": "Donor name in 'LAST FIRST' format (FEC convention, e.g. 'SMITH JOHN'). Case-insensitive."
          },
          "committee_id": {
            "type": "string",
            "description": "FEC committee id (recipient), e.g. 'C00401224' for Obama for America."
          },
          "candidate_id": {
            "type": "string",
            "description": "FEC candidate id (recipient candidate), e.g. 'P80003338'."
          },
          "cycle": {
            "type": "number",
            "description": "Election cycle (even year, e.g. 2024, 2026). Default: latest available."
          },
          "state": {
            "type": "string",
            "description": "Donor state, 2-letter code (e.g. 'CA', 'NY')."
          },
          "min_amount": {
            "type": "number",
            "description": "Minimum contribution amount in USD. Default no floor."
          },
          "max_amount": {
            "type": "number",
            "description": "Maximum contribution amount in USD. Default no ceiling."
          },
          "limit": {
            "type": "number",
            "description": "Max records to return. 1-100. Default 20."
          }
        }
      },
      "outputProperties": {
        "total": {
          "type": "string",
          "description": "Total count of FEC contribution records matching the query filters across all pages."
        },
        "returned": {
          "type": "string",
          "description": "Number of contribution records included in this response page."
        }
      },
      "url": "https://x402.org/v1/fec-political-contributions"
    },
    "flight-status": {
      "slug": "flight-status",
      "price": "0.01",
      "cluster": "locale",
      "description": "Flight status / live aircraft position / flight tracker / ICAO24 lookup / callsign lookup / aircraft bounding-box / OpenSky Network state-vector wrapper. Pass icao24 (6-char hex transponder, e.g. 'a808c5'), a callsign (e.g. 'UAL124'), or a bbox {lamin,lamax,lomin,lomax}. Returns last-known position, altitude, speed, heading, on-ground flag, and origin country per aircraft. Single hit to OpenSky's anonymous tier (no API key, commercial-OK with attribution; shared 400 req/day pool).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "flight",
        "aircraft",
        "tracker",
        "opensky",
        "icao24",
        "aviation"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "icao24": {
            "type": "string",
            "description": "24-bit ICAO transponder address in hex (e.g. 'a808c5'). Lowercase, exactly 6 chars."
          },
          "callsign": {
            "type": "string",
            "description": "Flight callsign (e.g. 'UAL124'). Matched against the global state vector; expect higher latency than icao24 lookups."
          },
          "bbox": {
            "type": "object",
            "properties": {
              "lamin": {
                "type": "number"
              },
              "lamax": {
                "type": "number"
              },
              "lomin": {
                "type": "number"
              },
              "lomax": {
                "type": "number"
              }
            },
            "description": "Optional lat/lon bounding box. lamin<lamax, lomin<lomax, |lat|<=90, |lon|<=180."
          }
        }
      },
      "outputProperties": {
        "mode": {
          "type": "string",
          "description": "Lookup mode used: 'icao24', 'callsign', or 'bbox' depending on which input was supplied."
        },
        "query": {
          "type": "object",
          "description": "Echo of the input query parameters (icao24, callsign, or bbox coords) used for this lookup."
        },
        "snapshot_time": {
          "type": "number",
          "description": "Unix timestamp (seconds) of when OpenSky captured this state-vector snapshot."
        },
        "count": {
          "type": "number",
          "description": "Number of aircraft state-vectors returned in the states array for this query."
        },
        "states": {
          "type": "array",
          "description": "Array of aircraft state objects with icao24, callsign, position, altitude, velocity, heading, on-ground flag, origin country."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider identifier, typically 'opensky-network'."
        },
        "attribution": {
          "type": "string",
          "description": "Required attribution string for OpenSky Network's anonymous commercial-OK tier."
        }
      },
      "url": "https://x402.org/v1/flight-status"
    },
    "funding-rates": {
      "slug": "funding-rates",
      "price": "0.002",
      "cluster": "edge-market",
      "description": "Perp funding rates / Binance USD-M futures funding / next-funding-time / 24h history / perp basis. Current funding %, mark + index price, next funding timestamp, and last 24 funding intervals (default 24 × 1h-since-event) for any Binance USD-M futures symbol (BTCUSDT, ETHUSDT, SOLUSDT…). Free public Binance API — no auth.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "funding-rates",
        "perp-funding",
        "binance-futures",
        "perp-basis",
        "mark-price",
        "next-funding-time",
        "derivatives",
        "usd-m-futures"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string",
            "description": "Binance futures symbol — uppercase, no slash. e.g. 'BTCUSDT', 'ETHUSDT'."
          },
          "history_intervals": {
            "type": "number",
            "description": "How many past funding events to include. Range [1, 48]. Default 24."
          }
        },
        "required": [
          "symbol"
        ]
      },
      "outputProperties": {
        "symbol": {
          "type": "string",
          "description": "Binance USD-M futures symbol queried (e.g. BTCUSDT, ETHUSDT, SOLUSDT)."
        },
        "mark_price": {
          "type": "string",
          "description": "Current mark price used for funding and PnL calculations on the perp contract."
        },
        "index_price": {
          "type": "string",
          "description": "Spot index price the perp tracks, used as the funding-rate reference."
        },
        "current_funding_rate_pct": {
          "type": "string",
          "description": "Current funding rate as a percent (positive = longs pay shorts, negative = shorts pay longs)."
        },
        "next_funding_at": {
          "type": "string",
          "description": "ISO timestamp when the next funding payment settles on this perp."
        },
        "last_24h_avg_pct": {
          "type": "string",
          "description": "Mean funding rate percent across the last 24 hourly funding intervals."
        },
        "last_24h_max_abs_pct": {
          "type": "string",
          "description": "Largest absolute funding rate percent seen in the last 24 funding intervals."
        },
        "history": {
          "type": "string",
          "description": "Array of the last 24 funding intervals with rate percent and settlement timestamp per entry."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider, here Binance USD-M futures public API."
        }
      },
      "url": "https://x402.org/v1/funding-rates"
    },
    "gas-now-base": {
      "slug": "gas-now-base",
      "price": "0.02",
      "cluster": "edge-market",
      "description": "Gas oracle / EIP-1559 fee estimator. Real-time base fee + priority fee for Base / Ethereum / Optimism / Arbitrum / Polygon. USD-cost estimates for native transfer, USDC transfer, ERC-20 approve, Uniswap V2/V3 swap, NFT mint, contract deploy.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "gas",
        "crypto",
        "base",
        "ethereum",
        "l2",
        "fee"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "optimism",
              "arbitrum",
              "polygon"
            ],
            "description": "EVM L1/L2 to read gas from. Default 'base'."
          }
        }
      },
      "outputProperties": {
        "chain": {
          "type": "string",
          "description": "Chain name (base, ethereum, optimism, arbitrum, or polygon)."
        },
        "chain_id": {
          "type": "string",
          "description": "EVM chain ID as a string (e.g. 8453 for Base, 1 for Ethereum, 137 for Polygon)."
        },
        "block_number": {
          "type": "string",
          "description": "Latest block number used to read the base fee, as a decimal string."
        },
        "block_timestamp": {
          "type": "number",
          "description": "Unix timestamp (seconds) of the latest block sampled for the fee reading."
        },
        "block_iso_timestamp": {
          "type": "string",
          "description": "ISO 8601 timestamp of the latest block sampled for the fee reading."
        },
        "block_age_seconds": {
          "type": "number",
          "description": "Seconds elapsed between the sampled block and the response time, for staleness checks."
        },
        "base_fee_gwei": {
          "type": "number",
          "description": "Current EIP-1559 base fee for the chain, in gwei."
        },
        "priority_fee_suggestion_gwei": {
          "type": "number",
          "description": "Suggested priority (tip) fee in gwei for timely inclusion in the next block."
        },
        "total_recommended_gwei": {
          "type": "number",
          "description": "Recommended max fee per gas in gwei (base fee plus priority fee suggestion)."
        },
        "legacy_gas_price_gwei": {
          "type": "number",
          "description": "Legacy (non-1559) gas price in gwei for transactions that don't set fee caps."
        },
        "native_token": {
          "type": "string",
          "description": "Symbol of the chain's native gas token (ETH, MATIC, etc.)."
        },
        "native_token_price_usd": {
          "type": "number",
          "description": "Spot USD price of the native gas token used to derive USD cost estimates."
        },
        "cost_estimates": {
          "type": "object",
          "description": "USD cost estimates per common action (native transfer, USDC transfer, ERC-20 approve, swap, NFT mint, deploy)."
        },
        "rpc_url": {
          "type": "string",
          "description": "Public RPC endpoint used to query the chain's latest block and base fee."
        }
      },
      "url": "https://x402.org/v1/gas-now-base"
    },
    "gas-price": {
      "slug": "gas-price",
      "price": "0.02",
      "cluster": "edge-market",
      "description": "Gas price API / EIP-1559 fee estimator / Base + Ethereum + Optimism + Arbitrum gas tracker / pre-tx cost estimator. Reads the chain's latest block, derives base fee, suggests priority fees for safe-low/standard/fast tiers, computes total maxFeePerGas, and converts cost to USD for common tx types.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "gas-price",
        "eip-1559",
        "fee-estimator",
        "base-fee",
        "priority-fee",
        "gas-tracker"
      ],
      "aliasOf": "gas-now-base",
      "inputSchema": {
        "type": "object",
        "properties": {
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "optimism",
              "arbitrum",
              "polygon"
            ],
            "description": "EVM L1/L2 to read gas from. Default 'base'."
          }
        }
      },
      "outputProperties": {
        "chain": {
          "type": "string",
          "description": "Chain name queried (e.g. base, ethereum, optimism, arbitrum)."
        },
        "base_fee_gwei": {
          "type": "string",
          "description": "Latest block's base fee per gas in gwei, derived from EIP-1559."
        },
        "priority_fee_gwei": {
          "type": "string",
          "description": "Suggested miner tip in gwei for the requested speed tier."
        },
        "total_recommended_gwei": {
          "type": "string",
          "description": "Recommended maxFeePerGas in gwei (base fee plus priority fee)."
        },
        "block_number": {
          "type": "string",
          "description": "Block height the base fee was read from."
        },
        "eth_price_usd": {
          "type": "string",
          "description": "ETH spot price in USD used to convert gas cost."
        },
        "cost_usd": {
          "type": "string",
          "description": "Estimated total tx cost in USD for a common transaction type."
        },
        "timestamp": {
          "type": "string",
          "description": "ISO-8601 UTC time the gas reading was taken."
        }
      },
      "url": "https://x402.org/v1/gas-price"
    },
    "github-readme": {
      "slug": "github-readme",
      "price": "0.002",
      "cluster": "web-probe",
      "description": "GitHub README fetch / repo readme / open-source-readme-as-markdown / package documentation puller. Pulls the raw README markdown for any public GitHub repository via the official GitHub REST API — no auth required for public repos. Returns the unaltered markdown plus byte size and char count. Useful for agents documenting a stack, explaining a library, or snipping an example.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "github",
        "readme",
        "markdown",
        "documentation",
        "repo-metadata",
        "github-readme"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "repo": {
            "type": "string",
            "description": "Repository in 'owner/name' form (e.g. 'vercel/next.js')."
          }
        },
        "required": [
          "repo"
        ]
      },
      "outputProperties": {
        "repo": {
          "type": "string",
          "description": "Repository slug in owner/name form that was fetched, echoed back from the request input."
        },
        "raw_markdown": {
          "type": "string",
          "description": "Unaltered README markdown as returned by the GitHub REST API, with original headings, code fences, and links intact."
        },
        "byte_size": {
          "type": "string",
          "description": "Size of the raw markdown payload in bytes, useful for budgeting downstream context windows."
        },
        "char_count": {
          "type": "string",
          "description": "Total character count of the markdown string, including whitespace and newlines."
        },
        "source": {
          "type": "string",
          "description": "Upstream API the markdown came from, typically the GitHub REST contents endpoint URL for the repo's README."
        }
      },
      "url": "https://x402.org/v1/github-readme"
    },
    "github-repo-health": {
      "slug": "github-repo-health",
      "price": "0.03",
      "cluster": "prooflayer",
      "description": "GitHub repo health score / open-source maintainability checker. 0-100 score + grade (abandoned/stale/okay/healthy/thriving). Commit activity, contributors, license, CI, tests. Plus LLM verdict.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "github",
        "open-source",
        "repo",
        "health",
        "score"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "repo": {
            "type": "string",
            "description": "owner/name."
          }
        },
        "required": [
          "repo"
        ]
      },
      "outputProperties": {
        "repo": {
          "type": "string",
          "description": "GitHub owner/name slug that was scored (e.g. 'facebook/react')."
        },
        "score": {
          "type": "number",
          "description": "Overall health score from 0 to 100 aggregated across activity, contributors, license, CI, and tests."
        },
        "grade": {
          "type": "string",
          "description": "Bucket label for the score: abandoned, stale, okay, healthy, or thriving."
        },
        "verdict": {
          "type": "string",
          "description": "LLM-written one-line take on the repo's maintainability and whether it's safe to depend on."
        },
        "signals": {
          "type": "object",
          "description": "Per-signal breakdown: commit activity, contributor count, license, CI presence, and test coverage hints."
        },
        "metadata": {
          "type": "object",
          "description": "Repo metadata pulled from GitHub: stars, forks, primary language, default branch, last push timestamp."
        }
      },
      "url": "https://x402.org/v1/github-repo-health"
    },
    "github-stars-history": {
      "slug": "github-stars-history",
      "price": "0.005",
      "cluster": "web-probe",
      "description": "GitHub stars history / star growth chart / repo popularity over time / trending tracker. Current star count plus a sampled cumulative-stars-vs-date series for any public GitHub repo. Walks 1-10 evenly-spaced pages of /stargazers using application/vnd.github.star+json so each sample carries a starred_at timestamp. Free public API, no auth (subject to GitHub's 60 req/h unauthenticated limit).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "github",
        "repo-stats",
        "stars-history",
        "star-growth",
        "trending-repos",
        "web-probe",
        "stargazers"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "repo": {
            "type": "string",
            "description": "Repository in 'owner/name' form."
          },
          "pages": {
            "type": "number",
            "description": "How many sample pages to walk. Range [1, 10]. Default 5."
          }
        },
        "required": [
          "repo"
        ]
      },
      "outputProperties": {
        "repo": {
          "type": "string",
          "description": "Canonical owner/name slug of the GitHub repo that was queried."
        },
        "current_stars": {
          "type": "string",
          "description": "Total stargazer count for the repo at query time."
        },
        "forks": {
          "type": "string",
          "description": "Total fork count for the repo at query time."
        },
        "created_at": {
          "type": "string",
          "description": "ISO 8601 timestamp of when the repo was created on GitHub."
        },
        "pushed_at": {
          "type": "string",
          "description": "ISO 8601 timestamp of the most recent push to the repo."
        },
        "history": {
          "type": "string",
          "description": "Array of {date, stars} samples giving cumulative star count over time from sampled stargazer pages."
        },
        "sampled_pages": {
          "type": "string",
          "description": "Number of /stargazers pages walked (1-10) to build the history series."
        },
        "note": {
          "type": "string",
          "description": "Caveat about sampling resolution or GitHub rate-limit truncation when applicable."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source label, e.g. \"github.com/repos\" + \"/stargazers\"."
        }
      },
      "url": "https://x402.org/v1/github-stars-history"
    },
    "hacker-news-search": {
      "slug": "hacker-news-search",
      "price": "0.001",
      "cluster": "web-probe",
      "description": "Hacker News search / HN search / yc-news / Algolia HN. Searches 30M+ Hacker News stories and comments. Filter by type (story/comment/poll), author, min points, ISO8601 date range; sort by relevance or recency. Returns title, author, points, comment count, URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "hacker-news",
        "hn-search",
        "tech-news",
        "algolia-hn",
        "story-search",
        "comment-search",
        "yc-news"
      ],
      "aliasOf": "hn-search",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Free-text search query (matches title, body, author, URL)."
          },
          "type": {
            "type": "string",
            "enum": [
              "story",
              "comment",
              "poll"
            ],
            "description": "Restrict to a single HN item type. Omit to include all types."
          },
          "author": {
            "type": "string",
            "description": "Filter to a specific HN username (e.g. 'pg', 'dang')."
          },
          "min_points": {
            "type": "number",
            "description": "Minimum points (upvotes) floor. Comments don't have points; using this implicitly filters to stories."
          },
          "since": {
            "type": "string",
            "description": "Lower bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
          },
          "until": {
            "type": "string",
            "description": "Upper bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
          },
          "sort": {
            "type": "string",
            "enum": [
              "relevance",
              "date"
            ],
            "description": "'relevance' (default, popularity-weighted) or 'date' (most-recent-first)."
          },
          "limit": {
            "type": "number",
            "description": "Max hits to return. 1-20. Default 10."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "query": {
          "type": "string",
          "description": "Echoes back the search query string that was submitted to the Algolia HN index."
        },
        "total_hits": {
          "type": "string",
          "description": "Total number of HN stories or comments matching the query before pagination."
        },
        "results": {
          "type": "string",
          "description": "Array of matching HN items with title, author, points, comment count, URL, and timestamp."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source identifier, typically 'algolia-hn' for the HN Search API."
        }
      },
      "url": "https://x402.org/v1/hacker-news-search"
    },
    "hn-search": {
      "slug": "hn-search",
      "price": "0.001",
      "cluster": "web-probe",
      "description": "HN search / Hacker News search / yc-news / startup-news search / Algolia HN / who-is-hiring scraper / programmer-news firehose. Searches 30M+ Hacker News stories and comments via the public Algolia HN index. Filter by type (story|comment|poll), author, minimum points, ISO8601 date range (since/until), and sort by relevance or recency. Returns total hit count plus per-hit objectID, title, author, points, comment count, created_at, URL, and story/comment text. Public Algolia API — no auth, commercial-OK.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "hacker-news",
        "hn-search",
        "algolia-hn",
        "story-search",
        "who-is-hiring",
        "yc-news"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Free-text search query (matches title, body, author, URL)."
          },
          "type": {
            "type": "string",
            "enum": [
              "story",
              "comment",
              "poll"
            ],
            "description": "Restrict to a single HN item type. Omit to include all types."
          },
          "author": {
            "type": "string",
            "description": "Filter to a specific HN username (e.g. 'pg', 'dang')."
          },
          "min_points": {
            "type": "number",
            "description": "Minimum points (upvotes) floor. Comments don't have points; using this implicitly filters to stories."
          },
          "since": {
            "type": "string",
            "description": "Lower bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
          },
          "until": {
            "type": "string",
            "description": "Upper bound on created_at — ISO8601 date (YYYY-MM-DD) or full timestamp."
          },
          "sort": {
            "type": "string",
            "enum": [
              "relevance",
              "date"
            ],
            "description": "'relevance' (default, popularity-weighted) or 'date' (most-recent-first)."
          },
          "limit": {
            "type": "number",
            "description": "Max hits to return. 1-20. Default 10."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "query": {
          "type": "string",
          "description": "Echoes back the search query string that was submitted to the Algolia HN index."
        },
        "total_hits": {
          "type": "string",
          "description": "Total number of HN stories or comments matching the query before pagination is applied."
        },
        "results": {
          "type": "string",
          "description": "Array of hit objects with objectID, title, author, points, num_comments, created_at, url, and story/comment text."
        },
        "source": {
          "type": "string",
          "description": "Identifier for the upstream index queried, typically the Algolia HN search endpoint."
        }
      },
      "url": "https://x402.org/v1/hn-search"
    },
    "holiday-lookup": {
      "slug": "holiday-lookup",
      "price": "0.002",
      "cluster": "locale",
      "description": "Public holidays / bank holidays / national holidays / federal holidays / holiday calendar / per-country dates. Returns the official public holidays for any ISO 3166-1 alpha-2 country and year, with localized names, English names, type (Public, Bank, School, etc.), regional vs. national flag, and county/region scoping where applicable. Wraps the public Nager.Date API — no auth, commercial-OK.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "holidays",
        "public-holidays",
        "calendar",
        "locale",
        "country-holidays",
        "bank-holidays",
        "nager-date"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code (e.g. 'US', 'DE', 'JP')."
          },
          "year": {
            "type": "number",
            "description": "Calendar year (e.g. 2026). Range [1900, 2200]."
          }
        },
        "required": [
          "country",
          "year"
        ]
      },
      "outputProperties": {
        "country": {
          "type": "string",
          "description": "ISO 3166-1 alpha-2 country code echoed back from the request (e.g. US, GB, DE, JP)."
        },
        "year": {
          "type": "string",
          "description": "Calendar year the holiday list covers, echoed back from the request as a 4-digit string."
        },
        "holidays": {
          "type": "string",
          "description": "Array of holiday objects with date, local name, English name, type, and county/region scoping."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider attribution, set to Nager.Date for the wrapped public holiday API."
        }
      },
      "url": "https://x402.org/v1/holiday-lookup"
    },
    "homoglyph-check": {
      "slug": "homoglyph-check",
      "price": "0.003",
      "cluster": "web-probe",
      "description": "Homoglyph attack detector / Unicode lookalike scanner. Detects Cyrillic / Greek / fullwidth / mathematical lookalikes commonly used in phishing (apple.com vs аpple.com). Plus invisible / zero-width / RTL-override characters. Risk score 0-100 + normalized form.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "homoglyph",
        "unicode",
        "phishing",
        "security",
        "domain",
        "spoofing"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Max 10000 chars."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "text": {
          "type": "string",
          "description": "Original input string that was scanned for homoglyphs and invisible characters."
        },
        "text_length": {
          "type": "number",
          "description": "Character count of the input string."
        },
        "homoglyph_findings": {
          "type": "array",
          "description": "Array of detected lookalike characters with position, script (Cyrillic/Greek/etc), and ASCII equivalent."
        },
        "homoglyph_count": {
          "type": "number",
          "description": "Total number of homoglyph characters found in the input."
        },
        "invisible_findings": {
          "type": "array",
          "description": "Array of zero-width, invisible, or RTL-override characters detected, with positions and codepoints."
        },
        "invisible_count": {
          "type": "number",
          "description": "Total number of invisible or zero-width characters found."
        },
        "block_counts": {
          "type": "object",
          "description": "Map of Unicode block names to character counts (e.g. Latin, Cyrillic, Greek)."
        },
        "has_mixed_scripts": {
          "type": "boolean",
          "description": "True if the input mixes multiple writing scripts, a common phishing signal."
        },
        "ascii_only": {
          "type": "boolean",
          "description": "True if every character is plain ASCII with no Unicode lookalikes possible."
        },
        "normalized": {
          "type": "string",
          "description": "ASCII-folded form of the input with homoglyphs mapped back to their Latin equivalents."
        },
        "is_suspicious": {
          "type": "boolean",
          "description": "True if the input shows signs of a homoglyph or invisible-character attack."
        },
        "risk_score": {
          "type": "number",
          "description": "Phishing risk score from 0 (safe) to 100 (highly suspicious) based on findings."
        },
        "risk_level": {
          "type": "string",
          "enum": [
            "none",
            "low",
            "medium",
            "high"
          ],
          "description": "Categorical risk bucket such as low, medium, high, or critical."
        }
      },
      "url": "https://x402.org/v1/homoglyph-check"
    },
    "honeypot-check": {
      "slug": "honeypot-check",
      "price": "0.05",
      "cluster": "edge-market",
      "description": "Honeypot.is buy/sell simulation for any Base or Ethereum ERC-20. Returns is_honeypot verdict, buy/sell/transfer tax %, simulation success flag, and a reason string when a honeypot is detected. Use before every swap to detect sell-blocking risk.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "honeypot-check",
        "token-safety",
        "rug-detection",
        "swap-protection",
        "erc20-scanner",
        "buy-sell-tax",
        "honeypot-simulation"
      ],
      "aliasOf": "token-honeypot",
      "inputSchema": {
        "type": "object",
        "properties": {
          "token_address": {
            "type": "string",
            "description": "0x-prefixed 20-byte EVM token contract address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "bsc"
            ],
            "description": "EVM chain. Default 'base'."
          }
        },
        "required": [
          "token_address"
        ]
      },
      "outputProperties": {
        "token": {
          "type": "string",
          "description": "ERC-20 contract address that was simulated."
        },
        "chain": {
          "type": "string",
          "description": "Chain the token lives on, either base or ethereum."
        },
        "simulation": {
          "type": "string",
          "description": "Nested object with buy/sell/transfer tax percentages and the success flag from the Honeypot.is simulation."
        },
        "contract": {
          "type": "string",
          "description": "Nested object with contract metadata like name, symbol, decimals, and any owner or proxy flags."
        },
        "risk": {
          "type": "string",
          "description": "Object with is_honeypot verdict plus a reason string when sell-blocking or tax-trap behavior is detected."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider, set to honeypot.is."
        }
      },
      "url": "https://x402.org/v1/honeypot-check"
    },
    "html-to-markdown": {
      "slug": "html-to-markdown",
      "price": "0.005",
      "cluster": "mediakit",
      "description": "HTML → Markdown converter. Accepts raw HTML or a URL. Strips nav/script/style/ad noise. Preserves headings, lists, tables, code blocks, links, images.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "html-to-markdown",
        "markdown-converter",
        "content-extraction",
        "url-to-markdown",
        "readability",
        "scraping"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "html": {
            "type": "string",
            "description": "Raw HTML to convert. Mutually exclusive with 'url' — supply one."
          },
          "url": {
            "type": "string",
            "description": "Page URL to fetch and convert. Server follows redirects. Mutually exclusive with 'html'."
          },
          "include_links": {
            "type": "boolean",
            "description": "Keep hyperlinks as Markdown [text](href). Default true. Set false for prose-only output."
          },
          "include_images": {
            "type": "boolean",
            "description": "Keep images as Markdown ![alt](src). Default true."
          },
          "user_agent": {
            "type": "string",
            "description": "Optional User-Agent header sent when fetching 'url'. Default is a generic browser UA."
          }
        }
      },
      "outputProperties": {
        "title": {
          "type": "string",
          "description": "Page title extracted from the HTML <title> tag or first heading."
        },
        "markdown_chars": {
          "type": "string",
          "description": "Character count of the converted markdown output."
        }
      },
      "url": "https://x402.org/v1/html-to-markdown"
    },
    "html-to-pdf": {
      "slug": "html-to-pdf",
      "price": "0.08",
      "cluster": "mediakit",
      "description": "URL to PDF / HTML to PDF / webpage screenshot to PDF. CloudConvert capture-website. Configurable page size, orientation, margins, wait conditions. Renders JS.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "html",
        "pdf",
        "url",
        "screenshot",
        "render",
        "capture"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Public URL to render."
          },
          "page_format": {
            "type": "string",
            "description": "letter, legal, tabloid, ledger, a0-a6."
          },
          "page_orientation": {
            "type": "string",
            "enum": [
              "portrait",
              "landscape"
            ],
            "description": "'portrait' (default) or 'landscape'."
          },
          "margin_top": {
            "type": "number",
            "description": "Inches. 0-5."
          },
          "margin_bottom": {
            "type": "number",
            "description": "Inches. 0-5."
          },
          "print_background": {
            "type": "boolean",
            "description": "Print CSS backgrounds. Default true."
          },
          "wait_until": {
            "type": "string",
            "description": "'load' (default), 'domcontentloaded', 'networkidle0', 'networkidle2'."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "pdf_url": {
          "type": "string",
          "description": "Signed download URL for the rendered PDF file produced from the source webpage."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the generated PDF in bytes."
        },
        "source_url": {
          "type": "string",
          "description": "Original webpage URL that was captured and converted to PDF."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job identifier for the capture-website conversion task."
        }
      },
      "url": "https://x402.org/v1/html-to-pdf"
    },
    "humanize": {
      "slug": "humanize",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "AI text humanizer / GPT detector bypass. Strips LLM tells (em-dash overuse, formulaic transitions, 'delve', 'tapestry'). 4 tones.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "humanize",
        "rewriter",
        "ai-detection",
        "paraphrase",
        "text"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text to humanize. Max 12,000 characters."
          },
          "tone": {
            "type": "string",
            "description": "'neutral' (default), 'casual', 'professional', or 'academic'."
          },
          "preserve_length": {
            "type": "boolean",
            "description": "If true (default), keep within ±15% of source length. If false, tighten freely."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "text": {
          "type": "string",
          "description": "Rewritten text."
        },
        "tone": {
          "type": "string",
          "description": "Tone applied."
        },
        "input_chars": {
          "type": "number",
          "description": "Source character count."
        },
        "output_chars": {
          "type": "number",
          "description": "Rewritten character count."
        },
        "model": {
          "type": "string",
          "description": "Model used for the rewrite."
        }
      },
      "url": "https://x402.org/v1/humanize"
    },
    "iata-airport-info": {
      "slug": "iata-airport-info",
      "price": "0.005",
      "cluster": "locale",
      "description": "IATA / ICAO airport code lookup. Returns name, type, location, country, region, municipality, scheduled-service flag, home/wikipedia links. OurAirports CC0.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "airport",
        "iata",
        "icao",
        "airport-codes",
        "airport-lookup"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "IATA-3 or ICAO-4 code."
          }
        },
        "required": [
          "code"
        ]
      },
      "outputProperties": {
        "airport": {
          "type": "string",
          "description": "Airport record with IATA/ICAO codes, name, type, coordinates, country, region, municipality, scheduled-service flag, and links."
        }
      },
      "url": "https://x402.org/v1/iata-airport-info"
    },
    "image-convert": {
      "slug": "image-convert",
      "price": "0.01",
      "cluster": "mediakit",
      "description": "Universal image format converter (PNG, JPG, WEBP, AVIF, GIF, BMP, TIFF, ICO, HEIC, HEIF, PSD, SVG). Optional resize + quality. CloudConvert engine.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "image",
        "convert",
        "png",
        "jpg",
        "webp",
        "avif",
        "heic",
        "format"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "URL of source image. Format inferred from extension."
          },
          "output_format": {
            "type": "string",
            "description": "Target format: png, jpg, webp, avif, gif, bmp, tiff, ico, heic, heif, psd."
          },
          "quality": {
            "type": "number",
            "description": "1-100. Affects jpg/webp/avif."
          },
          "width": {
            "type": "number",
            "description": "Optional resize width (1-16000)."
          },
          "height": {
            "type": "number",
            "description": "Optional resize height (1-16000)."
          },
          "fit": {
            "type": "string",
            "enum": [
              "max",
              "crop",
              "scale"
            ],
            "description": "'max' (default), 'crop', or 'scale' when resizing."
          }
        },
        "required": [
          "image_url",
          "output_format"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "URL to the converted image file hosted on CloudConvert's CDN, ready for download."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the converted output image in bytes."
        },
        "input_format": {
          "type": "string",
          "description": "Detected format of the source image (png, jpg, webp, avif, heic, etc.)."
        },
        "output_format": {
          "type": "string",
          "description": "Target format the image was converted to (png, jpg, webp, avif, gif, bmp, tiff, ico, heic, heif, psd, svg)."
        },
        "source_url": {
          "type": "string",
          "description": "Original URL of the source image that was fetched and converted."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job identifier for the conversion task, useful for debugging or support."
        }
      },
      "url": "https://x402.org/v1/image-convert"
    },
    "image-edit": {
      "slug": "image-edit",
      "price": "0.02",
      "cluster": "synthforge",
      "description": "Image edit / instruction-based image edit / text-driven photo edit / nano-banana image editor / GPT-image-2 edit. Mask-free instruction-driven image editing — describe the change in text and the model applies it to the whole image. Default model: nano-banana-pro. Returns a permanent fal-hosted PNG URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "synthforge",
        "image-editing",
        "instruction-edit",
        "text-to-image-edit",
        "nano-banana",
        "mask-free-edit",
        "photo-editor"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public http(s) URL of the source image."
          },
          "prompt": {
            "type": "string",
            "description": "Edit instructions in plain English."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Default 'nano-banana-pro'."
          }
        },
        "required": [
          "image_url",
          "prompt"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Permanent fal-hosted PNG URL of the edited image."
        },
        "model": {
          "type": "string",
          "description": "Model that ran the edit (default nano-banana-pro)."
        },
        "prompt": {
          "type": "string",
          "description": "Echoed text instruction that described the edit applied to the source image."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Upstream provider request ID for the edit job, useful for tracing or support."
        },
        "source": {
          "type": "string",
          "description": "Upstream backend that served the edit (e.g. fal, venice)."
        }
      },
      "url": "https://x402.org/v1/image-edit"
    },
    "image-expand": {
      "slug": "image-expand",
      "price": "0.15",
      "cluster": "synthforge",
      "description": "AI image outpainting / image expansion. Bria Expand model. Generates realistic content beyond original borders. Set canvas size + original placement. Commercial-license model.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "FAL_KEY"
      ],
      "tags": [
        "outpaint",
        "expand",
        "image",
        "ai",
        "bria",
        "generative"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public URL of the source image."
          },
          "canvas_width": {
            "type": "number",
            "description": "Final canvas width in pixels (256-4096)."
          },
          "canvas_height": {
            "type": "number",
            "description": "Final canvas height in pixels (256-4096)."
          },
          "original_width": {
            "type": "number",
            "description": "Width to render the original at within the new canvas."
          },
          "original_height": {
            "type": "number",
            "description": "Height to render the original at within the new canvas."
          },
          "original_x": {
            "type": "number",
            "description": "X position of the original (top-left) within the canvas."
          },
          "original_y": {
            "type": "number",
            "description": "Y position of the original (top-left) within the canvas."
          },
          "prompt": {
            "type": "string",
            "description": "Optional guidance for the generated regions."
          },
          "seed": {
            "type": "number",
            "description": "Optional seed for reproducibility (0 to 2^31-1)."
          }
        },
        "required": [
          "image_url",
          "canvas_width",
          "canvas_height"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "URL of the outpainted image with generated content extending beyond the original borders."
        },
        "width": {
          "type": "number",
          "description": "Final canvas width in pixels after expansion."
        },
        "height": {
          "type": "number",
          "description": "Final canvas height in pixels after expansion."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the output image file in bytes."
        },
        "seed": {
          "type": "number",
          "description": "Random seed used by the Bria Expand model for this generation, reusable for reproducible results."
        },
        "source_url": {
          "type": "string",
          "description": "URL of the original input image that was expanded."
        }
      },
      "url": "https://x402.org/v1/image-expand"
    },
    "image-format-convert": {
      "slug": "image-format-convert",
      "price": "0.01",
      "cluster": "mediakit",
      "description": "Image converter. Convert any image between PNG, JPG, WEBP, AVIF, GIF, BMP, TIFF, ICO, HEIC, HEIF, PSD, and SVG. Optional resize and quality. CloudConvert engine. Same backend as image-convert under a more search-friendly slug.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "image-conversion",
        "format-converter",
        "png-to-jpg",
        "webp",
        "avif",
        "heic",
        "image-resize"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "HTTPS URL of the source image to convert; CloudConvert fetches it directly."
          },
          "output_format": {
            "type": "string",
            "description": "Target format: png, jpg, webp, avif, gif, bmp, tiff, ico, heic, heif, psd, or svg."
          },
          "quality": {
            "type": "number",
            "description": "Encoder quality 1-100 for lossy outputs (jpg/webp/avif); ignored for lossless formats."
          },
          "width": {
            "type": "number",
            "description": "Optional target width in pixels; pair with height or omit to preserve aspect ratio."
          },
          "height": {
            "type": "number",
            "description": "Optional target height in pixels; pair with width or omit to preserve aspect ratio."
          },
          "fit": {
            "type": "string",
            "enum": [
              "max",
              "crop",
              "scale"
            ],
            "description": "Resize mode when width/height are set: contain, cover, fill, inside, or outside."
          }
        },
        "required": [
          "image_url",
          "output_format"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Temporary CloudConvert download URL for the converted image; fetch promptly before it expires."
        },
        "output_format": {
          "type": "string",
          "description": "Format of the returned file, echoing the requested output_format."
        },
        "file_size_bytes": {
          "type": "string",
          "description": "Size of the converted file in bytes, as a string."
        }
      },
      "url": "https://x402.org/v1/image-format-convert"
    },
    "image-generate": {
      "slug": "image-generate",
      "price": "0.01",
      "cluster": "synthforge",
      "description": "Image generate (fast/cheap) / text-to-image / AI art. SFW, sub-5s turnaround. Four tiers backed by curated $0.01 Venice models: 'fast' (z-image-turbo, default), 'creative' (chroma), 'anime' (wai-Illustrious), 'sd35' (venice-sd35). For top-tier quality use image-generate-pro ($0.10, Flux 2 Pro / Recraft / Seedream / Qwen Image 2 Pro) or image-generate-ultra ($0.30, Google nano-banana-pro / OpenAI gpt-image-2). Returns a permanent fal-hosted PNG URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "image-generation",
        "text-to-image",
        "ai-art",
        "synthforge",
        "venice",
        "z-image-turbo",
        "chroma",
        "anime"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Image description. Up to 2000 chars."
          },
          "width": {
            "type": "number",
            "description": "Output width in pixels. Range [256, 2048], snapped to multiples of 16. Default 1024."
          },
          "height": {
            "type": "number",
            "description": "Output height in pixels. Range [256, 2048], snapped to multiples of 16. Default 1024."
          },
          "tier": {
            "type": "string",
            "enum": [
              "fast",
              "creative",
              "anime",
              "sd35"
            ],
            "description": "Model shorthand. Default 'fast'."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Must be one of: z-image-turbo, chroma, wai-Illustrious, venice-sd35."
          },
          "steps": {
            "type": "number",
            "description": "Diffusion steps. Optional; depends on model."
          },
          "cfg_scale": {
            "type": "number",
            "description": "Classifier-free guidance scale. Optional."
          },
          "seed": {
            "type": "number",
            "description": "Random seed. Optional."
          },
          "negative_prompt": {
            "type": "string",
            "description": "Negative prompt. Optional."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Permanent fal-hosted PNG URL of the generated image."
        },
        "model": {
          "type": "string",
          "description": "Underlying Venice model that produced the image (z-image-turbo, chroma, wai-Illustrious, or venice-sd35)."
        },
        "width": {
          "type": "string",
          "description": "Pixel width of the returned PNG as a string."
        },
        "height": {
          "type": "string",
          "description": "Pixel height of the returned PNG as a string."
        },
        "tier": {
          "type": "string",
          "description": "Which tier was used: fast, creative, anime, or sd35."
        },
        "prompt": {
          "type": "string",
          "description": "Text prompt that was sent to the image model."
        },
        "seed": {
          "type": "number",
          "description": "Numeric seed used for generation, useful for reproducing the same image."
        },
        "elapsed_ms": {
          "type": "number",
          "description": "Wall-clock time in milliseconds from request to PNG URL ready."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Upstream Venice request ID for tracing or support lookups."
        },
        "source": {
          "type": "string",
          "description": "Backend provider tag, e.g. venice, identifying who actually ran the model."
        }
      },
      "url": "https://x402.org/v1/image-generate"
    },
    "image-generate-pro": {
      "slug": "image-generate-pro",
      "price": "0.10",
      "cluster": "synthforge",
      "description": "Image generate (pro) / premium text-to-image / Flux 2 Pro / Recraft / Seedream / Qwen Image 2 Pro / xAI Grok Imagine. Premium multi-model lineup for photoreal, design/illustration, text-in-image, and stylized art. Tiers: 'balanced' (flux-2-pro, default), 'max' (flux-2-max), 'text' (qwen-image-2-pro — best at rendering text in images), 'recraft' (recraft-v4), 'seedream' (seedream-v4), 'grok' (grok-imagine-image), 'art' (imagineart-1.5-pro), 'hunyuan' (hunyuan-image-v3). For flagship Google/OpenAI models use image-generate-ultra. Returns a permanent fal-hosted PNG URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "image-generation",
        "text-to-image",
        "synthforge",
        "flux-2-pro",
        "recraft",
        "seedream",
        "text-in-image",
        "premium-image"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Image description. Up to 3000 chars."
          },
          "width": {
            "type": "number",
            "description": "Output width in pixels. Range [256, 2048]. Default 1024."
          },
          "height": {
            "type": "number",
            "description": "Output height in pixels. Range [256, 2048]. Default 1024."
          },
          "tier": {
            "type": "string",
            "enum": [
              "balanced",
              "max",
              "text",
              "recraft",
              "seedream",
              "grok",
              "art",
              "hunyuan"
            ],
            "description": "Model shorthand. balanced=flux-2-pro (default), max=flux-2-max, text=qwen-image-2-pro, recraft=recraft-v4, seedream=seedream-v4, grok=grok-imagine-image, art=imagineart-1.5-pro, hunyuan=hunyuan-image-v3."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Allowed: flux-2-pro, flux-2-max, qwen-image-2-pro, qwen-image-2, recraft-v4, seedream-v4, seedream-v5-lite, grok-imagine-image, imagineart-1.5-pro, hunyuan-image-v3, wan-2-7-text-to-image."
          },
          "steps": {
            "type": "number",
            "description": "Diffusion steps. Optional; depends on model."
          },
          "cfg_scale": {
            "type": "number",
            "description": "Classifier-free guidance scale. Optional."
          },
          "seed": {
            "type": "number",
            "description": "Random seed. Optional."
          },
          "negative_prompt": {
            "type": "string",
            "description": "Negative prompt. Optional."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Permanent fal-hosted PNG URL for the generated image."
        },
        "model": {
          "type": "string",
          "description": "Underlying model slug that produced the image (e.g. flux-2-pro, qwen-image-2-pro, recraft-v4)."
        },
        "width": {
          "type": "number",
          "description": "Pixel width of the generated image."
        },
        "height": {
          "type": "number",
          "description": "Pixel height of the generated image."
        },
        "tier": {
          "type": "string",
          "description": "Tier selector echoed back: balanced, max, text, recraft, seedream, grok, art, or hunyuan."
        },
        "prompt": {
          "type": "string",
          "description": "Text prompt used to generate the image."
        },
        "seed": {
          "type": "number",
          "description": "Random seed used by the model; reuse for reproducible outputs."
        },
        "elapsed_ms": {
          "type": "number",
          "description": "Server-side generation time in milliseconds."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Upstream request ID from the fal/Venice generation call for support and debugging."
        },
        "source": {
          "type": "string",
          "description": "Upstream provider that served the generation (e.g. fal, venice)."
        }
      },
      "url": "https://x402.org/v1/image-generate-pro"
    },
    "image-generate-ultra": {
      "slug": "image-generate-ultra",
      "price": "0.30",
      "cluster": "synthforge",
      "description": "Image generate (ultra) / flagship text-to-image / Google nano-banana-pro (Gemini Image 3) / OpenAI gpt-image-2 / Recraft V4 Pro / xAI Grok SOTA. Top proprietary models for the highest quality output. Tiers: 'nano-banana' (nano-banana-pro, default — Google Gemini Image 3), 'nano-banana-2' (cheaper Google variant), 'gpt' (gpt-image-2 — OpenAI flagship), 'gpt-1-5' (gpt-image-1-5), 'recraft-pro' (recraft-v4-pro), 'grok-sota' (grok-imagine-image-quality). Output is capped to 1024x1024 to keep wholesale within retail; for higher resolution, chain image-upscale. Returns a permanent fal-hosted PNG URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "synthforge",
        "image-generation",
        "text-to-image",
        "nano-banana-pro",
        "gpt-image-2",
        "recraft-v4-pro",
        "grok-imagine",
        "flagship-models"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Image description. Up to 5000 chars."
          },
          "width": {
            "type": "number",
            "description": "Output width in pixels. Range [256, 1024]. Default 1024."
          },
          "height": {
            "type": "number",
            "description": "Output height in pixels. Range [256, 1024]. Default 1024."
          },
          "tier": {
            "type": "string",
            "enum": [
              "nano-banana",
              "nano-banana-2",
              "gpt",
              "gpt-1-5",
              "recraft-pro",
              "grok-sota"
            ],
            "description": "Model shorthand. nano-banana=nano-banana-pro (default), nano-banana-2=nano-banana-2, gpt=gpt-image-2, gpt-1-5=gpt-image-1-5, recraft-pro=recraft-v4-pro, grok-sota=grok-imagine-image-quality."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Allowed: nano-banana-pro, nano-banana-2, gpt-image-2, gpt-image-1-5, recraft-v4-pro, grok-imagine-image-quality."
          },
          "steps": {
            "type": "number",
            "description": "Diffusion steps. Optional; depends on model."
          },
          "cfg_scale": {
            "type": "number",
            "description": "Classifier-free guidance scale. Optional."
          },
          "seed": {
            "type": "number",
            "description": "Random seed. Optional."
          },
          "negative_prompt": {
            "type": "string",
            "description": "Negative prompt. Optional."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Permanent fal-hosted PNG URL for the generated 1024x1024 image."
        },
        "model": {
          "type": "string",
          "description": "Underlying provider model ID that produced the image (e.g. nano-banana-pro, gpt-image-2, recraft-v4-pro)."
        },
        "width": {
          "type": "number",
          "description": "Pixel width of the returned image, capped at 1024."
        },
        "height": {
          "type": "number",
          "description": "Pixel height of the returned image, capped at 1024."
        },
        "tier": {
          "type": "string",
          "description": "Tier slug selected for this call: nano-banana, nano-banana-2, gpt, gpt-1-5, recraft-pro, or grok-sota."
        },
        "prompt": {
          "type": "string",
          "description": "Text prompt that was sent to the underlying model."
        },
        "seed": {
          "type": "number",
          "description": "Random seed used for generation, when the provider exposes one."
        },
        "elapsed_ms": {
          "type": "number",
          "description": "Wall-clock time in milliseconds spent generating the image upstream."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Upstream request ID for tracing this generation across logs."
        },
        "source": {
          "type": "string",
          "description": "Upstream provider tag (google, openai, recraft, xai) that served the request."
        }
      },
      "url": "https://x402.org/v1/image-generate-ultra"
    },
    "image-inpaint": {
      "slug": "image-inpaint",
      "price": "0.02",
      "cluster": "synthforge",
      "description": "Image inpainting / mask-based image edit / fill in masked region / object replacement / face swap (mask-driven) / generative fill. Replaces the masked region of an image with content matching a text prompt. White pixels in the mask = region to inpaint. Default model: gpt-image-2. Returns a permanent fal-hosted PNG URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "synthforge",
        "image-editing",
        "inpainting",
        "mask-edit",
        "generative-fill",
        "object-replacement",
        "gpt-image-2"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public http(s) URL of the source image."
          },
          "mask_url": {
            "type": "string",
            "description": "Public http(s) URL of the mask image (white = inpaint region; black = keep)."
          },
          "prompt": {
            "type": "string",
            "description": "What to fill the masked region with."
          },
          "model": {
            "type": "string",
            "description": "Override the inpaint model. Default 'gpt-image-2'."
          }
        },
        "required": [
          "image_url",
          "mask_url",
          "prompt"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Permanent fal-hosted PNG URL of the inpainted result image with the masked region replaced."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the inpainting model used to generate the edit, e.g. gpt-image-2."
        },
        "prompt": {
          "type": "string",
          "description": "Echoes the text prompt that guided what content to fill into the masked region."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Upstream request ID from the Venice/fal generation call, useful for tracing or support lookups."
        },
        "source": {
          "type": "string",
          "description": "Tag identifying the upstream provider that produced the inpaint, e.g. fal or venice."
        }
      },
      "url": "https://x402.org/v1/image-inpaint"
    },
    "image-to-video": {
      "slug": "image-to-video",
      "price": "0.20",
      "cluster": "synthforge",
      "description": "Image-to-video / animate still image / Seedance image-to-video / motion-from-photo / camera-movement on photo. Animates a still image into video via Venice's seedance-2-0-fast-image-to-video. Optional prompt steers the motion (camera moves, subject motion). Same async-vs-sync handling as text-to-video.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "synthforge",
        "video-generation",
        "image-to-video",
        "animation",
        "seedance",
        "motion-from-photo"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public http(s) URL of the source image."
          },
          "prompt": {
            "type": "string",
            "description": "Optional motion description (e.g. 'camera slowly zooms in')."
          },
          "duration": {
            "type": "string",
            "description": "Clip length. Default '5s'."
          },
          "aspect_ratio": {
            "type": "string",
            "description": "Aspect ratio. Default '16:9'."
          },
          "resolution": {
            "type": "string",
            "description": "Resolution. Default '720p'."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Default 'seedance-2-0-fast-image-to-video'."
          }
        },
        "required": [
          "image_url"
        ]
      },
      "outputProperties": {
        "video_url": {
          "type": "string",
          "description": "Signed URL to the generated MP4 animated from the source image."
        },
        "duration": {
          "type": "string",
          "description": "Video length in seconds (e.g., \"5s\")."
        },
        "aspect_ratio": {
          "type": "string",
          "description": "Output aspect ratio inherited from the source image (e.g., \"16:9\", \"9:16\")."
        },
        "resolution": {
          "type": "string",
          "description": "Output video resolution (e.g., \"720p\")."
        },
        "model": {
          "type": "string",
          "description": "Venice model used, typically \"seedance-2-0-fast-image-to-video\"."
        },
        "prompt": {
          "type": "string",
          "description": "Echo of the optional motion prompt that steered camera/subject movement."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Venice's upstream job ID for the image-to-video render, useful for debugging."
        },
        "source": {
          "type": "string",
          "description": "Origin tag for the render, e.g., \"venice\" or \"cache\"."
        }
      },
      "url": "https://x402.org/v1/image-to-video"
    },
    "image-translate": {
      "slug": "image-translate",
      "price": "0.02",
      "cluster": "mediakit",
      "description": "Image translator: vision-OCR + Venice translate. Demand-intel: 40 unmet signals for 'how to translate a picture'.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "image-translation",
        "ocr",
        "vision-ocr",
        "translation",
        "multilingual",
        "image-to-text",
        "translate-image"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public URL of the image containing text to extract and translate."
          },
          "target_language": {
            "type": "string",
            "description": "ISO language code or name to translate the extracted text into (e.g. 'es', 'Japanese')."
          },
          "preserve_layout": {
            "type": "boolean",
            "description": "If true, preserves the original spatial layout of text blocks in the returned translation."
          }
        },
        "required": [
          "image_url",
          "target_language"
        ]
      },
      "outputProperties": {
        "detected_text": {
          "type": "string",
          "description": "Raw text extracted from the image by vision-OCR before translation."
        },
        "translation": {
          "type": "string",
          "description": "Translated text in the requested target language, produced by Venice translate."
        }
      },
      "url": "https://x402.org/v1/image-translate"
    },
    "image-upscale": {
      "slug": "image-upscale",
      "price": "0.02",
      "cluster": "mediakit",
      "description": "Image upscale / 2x upscaler / 4x upscaler / super-resolution / sharpen image / enlarge image without loss. Upscales an image 2x or 4x via Venice's image/upscale endpoint (default model: venice-sd35). Returns a permanent fal-hosted URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "image-upscale",
        "super-resolution",
        "2x-upscaler",
        "4x-upscaler",
        "image-enhancement",
        "venice-sd35"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public http(s) URL of the source image."
          },
          "scale": {
            "type": "number",
            "enum": [
              2,
              4
            ],
            "description": "Upscale factor. Default 2."
          },
          "model": {
            "type": "string",
            "description": "Override the upscaler model. Default 'venice-sd35'."
          }
        },
        "required": [
          "image_url"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Permanent fal-hosted URL of the upscaled image, ready to download or embed."
        },
        "scale": {
          "type": "string",
          "description": "Upscale factor applied, either \"2\" or \"4\"."
        },
        "model": {
          "type": "string",
          "description": "Venice model used for upscaling, defaults to venice-sd35."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Venice API request ID for the upscale job, useful for support or debugging."
        },
        "source": {
          "type": "string",
          "description": "Upstream provider that produced the result, typically \"venice\"."
        }
      },
      "url": "https://x402.org/v1/image-upscale"
    },
    "insider-form-4": {
      "slug": "insider-form-4",
      "price": "0.01",
      "cluster": "edge-finance",
      "description": "SEC Form 4 (insider transactions) normalizer. Recent officer/director/10%+ trades for any US ticker. Per-transaction shape: who, when, code (purchase/sale/grant/exercise/etc), shares, price, post-tx holdings, role. 100% public-domain SEC EDGAR data.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "sec",
        "form-4",
        "insider-trading",
        "edgar",
        "stocks",
        "officers",
        "directors",
        "finance",
        "signals",
        "compliance"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string",
            "description": "US stock ticker (e.g. 'AAPL'). Either ticker or cik required."
          },
          "cik": {
            "type": "string",
            "description": "SEC Central Index Key."
          },
          "limit": {
            "type": "number",
            "description": "Max Form 4 filings to return (1-50). Default 10."
          },
          "include_derivatives": {
            "type": "boolean",
            "description": "Include derivative (option/RSU) transactions. Default true."
          }
        }
      },
      "outputProperties": {
        "ticker": {
          "type": "string",
          "description": "Stock ticker symbol queried (e.g., AAPL, TSLA)."
        },
        "cik": {
          "type": "string",
          "description": "SEC Central Index Key for the company, zero-padded 10-digit identifier used across EDGAR."
        },
        "company_name": {
          "type": "string",
          "description": "Registered company name as listed on the SEC EDGAR filing."
        },
        "form_4_filings": {
          "type": "array",
          "description": "Array of normalized Form 4 filings, each containing per-transaction insider trade details."
        },
        "filing_count": {
          "type": "number",
          "description": "Number of distinct Form 4 filings returned for this ticker."
        },
        "total_transactions": {
          "type": "number",
          "description": "Total count of individual insider transactions across all returned Form 4 filings."
        }
      },
      "url": "https://x402.org/v1/insider-form-4"
    },
    "insider-trading": {
      "slug": "insider-trading",
      "price": "0.01",
      "cluster": "edge-finance",
      "description": "Insider trading feed. Recent SEC Form 4 transactions for any US-listed ticker — officer, director, and 10% beneficial owner buys and sells. Returns transaction code (P=purchase, S=sale, A=grant, M=exercise), shares, price, post-transaction holdings, filed date, and EDGAR document URL. Wraps the same EDGAR-backed source as insider-form-4 under a more search-friendly name. Federal public data, no auth.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "sec-filings",
        "insider-trading",
        "form-4",
        "equities",
        "edgar",
        "officer-transactions"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string",
            "description": "US-listed ticker (e.g. 'AAPL'). Either ticker or cik is required."
          },
          "cik": {
            "type": "string",
            "description": "SEC CIK."
          },
          "limit": {
            "type": "number",
            "description": "Max filings, 1-50. Default 10."
          },
          "include_derivatives": {
            "type": "boolean",
            "description": "Include derivative transactions (options, warrants, RSUs) alongside non-derivative common stock buys and sales."
          }
        }
      },
      "outputProperties": {
        "ticker": {
          "type": "string",
          "description": "US-listed ticker symbol the Form 4 filings were queried for, echoed back from the request."
        },
        "filing_count": {
          "type": "string",
          "description": "Number of distinct Form 4 filings returned for the ticker in the requested window."
        },
        "total_transactions": {
          "type": "string",
          "description": "Total count of individual insider transactions across all returned Form 4 filings."
        }
      },
      "url": "https://x402.org/v1/insider-trading"
    },
    "ip-asn": {
      "slug": "ip-asn",
      "price": "0.001",
      "cluster": "web-probe",
      "description": "IP to ASN / IP geolocation / IP-to-ISP lookup / WHOIS for IP / cloud-provider attribution. For any IPv4 or IPv6 address, returns ASN number, ASN org, ISP, country, region, city, postal, latitude/longitude, and timezone. Primary backend: ipapi.co (1k req/day free). Fallback: ip-api.com (45 req/min free). Both are free public APIs with no auth.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "ip-lookup",
        "geolocation",
        "asn",
        "whois",
        "isp",
        "ip-intelligence"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "ip": {
            "type": "string",
            "description": "IPv4 or IPv6 address."
          }
        },
        "required": [
          "ip"
        ]
      },
      "outputProperties": {
        "ip": {
          "type": "string",
          "description": "Echoes back the IPv4 or IPv6 address that was looked up."
        },
        "asn": {
          "type": "string",
          "description": "Autonomous System Number announcing the prefix (e.g. AS15169)."
        },
        "asn_org": {
          "type": "string",
          "description": "Organization name registered to that ASN (e.g. Google LLC, Cloudflare Inc)."
        },
        "country_code": {
          "type": "string",
          "description": "ISO 3166-1 alpha-2 country code for the IP (e.g. US, DE, JP)."
        },
        "country": {
          "type": "string",
          "description": "Full country name geolocated for the IP."
        },
        "region": {
          "type": "string",
          "description": "State, province, or top-level administrative region for the IP."
        },
        "city": {
          "type": "string",
          "description": "City name geolocated for the IP."
        },
        "postal": {
          "type": "string",
          "description": "Postal or ZIP code geolocated for the IP."
        },
        "latitude": {
          "type": "string",
          "description": "Approximate latitude of the IP in decimal degrees as a string."
        },
        "longitude": {
          "type": "string",
          "description": "Approximate longitude of the IP in decimal degrees as a string."
        },
        "timezone": {
          "type": "string",
          "description": "IANA timezone name for the IP's location (e.g. America/Los_Angeles)."
        },
        "source": {
          "type": "string",
          "description": "Upstream backend that served the lookup: ipapi.co (primary) or ip-api.com (fallback)."
        }
      },
      "url": "https://x402.org/v1/ip-asn"
    },
    "ipfs-fetch": {
      "slug": "ipfs-fetch",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "IPFS fetch / IPFS gateway / Web3 storage retrieval / NFT metadata fetcher / Filecoin gateway / decentralized content / pinned-content reader. Resolves a CID (CIDv0 Qm... or CIDv1 bafy...) and optional sub-path through a fallback chain of public gateways (cloudflare-ipfs.com → ipfs.io → dweb.link) and returns the content as base64 / text / parsed JSON. Hard cap 5 MB. HEAD pre-flight + streaming size cap so oversized files are rejected before they're fully downloaded. No API key required.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "ipfs",
        "cid-resolver",
        "ipfs-gateway",
        "nft-metadata",
        "filecoin",
        "web3-storage",
        "decentralized-content",
        "ipfs-fetch"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "cid": {
            "type": "string",
            "description": "IPFS CID, CIDv0 (Qm... base58, 46 chars) or CIDv1 (bafy... base32). Required."
          },
          "path": {
            "type": "string",
            "description": "Optional sub-path inside the IPFS directory, e.g. '/index.html' or 'metadata.json'. Leading slash optional."
          },
          "max_bytes": {
            "type": "number",
            "description": "Maximum response size in bytes. Default 1000000 (1 MB). Hard-capped at 5000000 (5 MB)."
          },
          "output": {
            "type": "string",
            "enum": [
              "base64",
              "text",
              "json"
            ],
            "description": "How to return the content. 'base64' (default — safe for binary), 'text' (UTF-8 decode), or 'json' (UTF-8 decode + JSON.parse). Returns 502 if 'json' is requested and the body doesn't parse."
          }
        },
        "required": [
          "cid"
        ]
      },
      "outputProperties": {
        "cid": {
          "type": "string",
          "description": "Echoes back the requested IPFS CID (CIDv0 Qm... or CIDv1 bafy...) that was resolved."
        },
        "gateway_used": {
          "type": "string",
          "description": "Which public gateway served the content (cloudflare-ipfs.com, ipfs.io, or dweb.link)."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type reported by the gateway, e.g. application/json, image/png, text/plain."
        },
        "size_bytes": {
          "type": "string",
          "description": "Byte length of the fetched content; capped at 5 MB after HEAD pre-flight check."
        },
        "content": {
          "type": "string",
          "description": "Fetched payload as base64 for binary, raw text for text, or parsed JSON when content-type is JSON."
        },
        "source": {
          "type": "string",
          "description": "Origin label for the data, typically 'ipfs' indicating the decentralized storage network."
        }
      },
      "url": "https://x402.org/v1/ipfs-fetch"
    },
    "json-yaml": {
      "slug": "json-yaml",
      "price": "0.002",
      "cluster": "mediakit",
      "description": "JSON ↔ YAML bidirectional converter. Auto-detects input format. Pure parse, no upstream API.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "json",
        "yaml",
        "mediakit",
        "format-conversion",
        "data-transform",
        "yaml-to-json",
        "json-to-yaml"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "input": {
            "type": "string",
            "description": "JSON or YAML text."
          },
          "to": {
            "type": "string",
            "enum": [
              "json",
              "yaml",
              "auto"
            ],
            "description": "Target format. 'auto' converts to the opposite of the detected input. Default 'auto'."
          },
          "pretty": {
            "type": "boolean",
            "description": "Pretty-print JSON output (2-space indent by default). Ignored when target is YAML. Default true."
          },
          "indent": {
            "type": "number",
            "description": "Indent width in spaces (1-8). Default 2."
          }
        },
        "required": [
          "input"
        ]
      },
      "outputProperties": {
        "detected_format": {
          "type": "string",
          "description": "Input format auto-detected from the payload, either \"json\" or \"yaml\"."
        },
        "target": {
          "type": "string",
          "description": "Output format the input was converted to, the opposite of detected_format (\"yaml\" or \"json\")."
        },
        "output": {
          "type": "string",
          "description": "Converted payload as a string in the target format, ready to write to a file or pipe downstream."
        }
      },
      "url": "https://x402.org/v1/json-yaml"
    },
    "jwt-decode": {
      "slug": "jwt-decode",
      "price": "0.003",
      "cluster": "web-probe",
      "description": "JWT decoder / token inspector / debug tool. Splits a JWT into header / payload / signature, base64url-decodes each, parses claims (iss, aud, sub, jti, iat, exp, nbf, kid, alg), and reports clock-validity. Does NOT verify signatures.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "jwt",
        "token",
        "auth",
        "debug",
        "developer"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "jwt": {
            "type": "string",
            "description": "JWT (with or without 'Bearer ' prefix)."
          }
        },
        "required": [
          "jwt"
        ]
      },
      "outputProperties": {
        "header": {
          "type": "object",
          "description": "Decoded JWT header object with parsed JOSE fields like alg, typ, kid, and any custom header parameters."
        },
        "payload": {
          "type": "object",
          "description": "Decoded JWT payload object with all claims parsed from the base64url-decoded middle segment."
        },
        "signature": {
          "type": "string",
          "description": "Raw signature segment from the JWT as a base64url string; not verified by this endpoint."
        },
        "algorithm": {
          "type": "string",
          "description": "Signing algorithm declared in the header's alg field, such as HS256, RS256, ES256, or none."
        },
        "key_id": {
          "type": "string",
          "description": "Key identifier from the header's kid field, used by verifiers to select the right signing key."
        },
        "type": {
          "type": "string",
          "description": "Token type from the header's typ field, typically JWT but sometimes at+jwt or similar variants."
        },
        "claims": {
          "type": "object",
          "description": "Standard JWT claims extracted from payload: iss, aud, sub, jti, iat, exp, nbf with parsed timestamps."
        },
        "is_expired": {
          "type": "boolean",
          "description": "True if exp claim is present and the expiration timestamp is in the past relative to server clock."
        },
        "is_not_yet_valid": {
          "type": "boolean",
          "description": "True if nbf claim is present and the not-before timestamp is in the future relative to server clock."
        },
        "is_currently_valid_by_clock": {
          "type": "boolean",
          "description": "True if the token is neither expired nor not-yet-valid by clock; signature validity is not checked."
        },
        "payload_size_bytes": {
          "type": "number",
          "description": "Byte length of the decoded payload JSON, useful for spotting oversized tokens."
        },
        "note": {
          "type": "string",
          "description": "Reminder that this endpoint only decodes and clock-checks; it does not cryptographically verify signatures."
        }
      },
      "url": "https://x402.org/v1/jwt-decode"
    },
    "kalshi-markets": {
      "slug": "kalshi-markets",
      "price": "0.005",
      "cluster": "edge-finance",
      "description": "Kalshi markets / event contracts / Kalshi API / CFTC-regulated prediction markets / Kalshi browse / KalshiEX markets list. Pulls live markets from api.elections.kalshi.com with filter by status, series ticker, event ticker, free-text query, minimum volume. Prices converted from cents to 0-1 probabilities for easy cross-venue compare. DATA only — no order entry.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "prediction-markets",
        "kalshi",
        "event-contracts",
        "edge-finance",
        "market-data",
        "probabilities",
        "kalshiex"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Free-text filter on title / ticker / subtitle / event_ticker (substring)."
          },
          "series_ticker": {
            "type": "string",
            "description": "Filter by series (e.g. 'KXELONMARS')."
          },
          "event_ticker": {
            "type": "string",
            "description": "Filter by event ticker."
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "closed",
              "settled",
              "active"
            ],
            "description": "Default 'open'."
          },
          "limit": {
            "type": "number",
            "description": "1-200. Default 50."
          },
          "cursor": {
            "type": "string",
            "description": "Pagination cursor from previous response."
          },
          "min_volume": {
            "type": "number",
            "description": "Minimum 24-hr volume filter (server-side, on returned page)."
          }
        }
      },
      "outputProperties": {
        "markets": {
          "type": "string",
          "description": "Array of Kalshi markets with ticker, title, status, volume, and yes/no prices converted to 0-1 probabilities."
        },
        "count": {
          "type": "string",
          "description": "Number of markets returned in this response after applying status, ticker, query, and minimum-volume filters."
        },
        "cursor": {
          "type": "string",
          "description": "Pagination cursor from Kalshi's API; pass back on the next call to fetch the following page of markets."
        },
        "attribution": {
          "type": "string",
          "description": "Source credit string pointing to Kalshi (api.elections.kalshi.com) as the upstream data provider."
        }
      },
      "url": "https://x402.org/v1/kalshi-markets"
    },
    "keyword-suggest": {
      "slug": "keyword-suggest",
      "price": "0.002",
      "cluster": "web-probe",
      "description": "Keyword autocomplete / search suggest / SEO keyword research / query expansion / autocomplete suggestions. Aggregates suggestions from Wikipedia OpenSearch + DuckDuckGo's autocomplete (both public, no auth) into a de-duplicated ranked list. Useful for SEO content-gap analysis, LLM query expansion, agent-driven research.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "seo",
        "keyword-research",
        "autocomplete",
        "query-expansion",
        "search-suggest",
        "content-gap-analysis",
        "keyword-suggest"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Seed query."
          },
          "limit": {
            "type": "number",
            "description": "1-50. Default 10."
          },
          "source": {
            "type": "string",
            "enum": [
              "wikipedia",
              "duckduckgo",
              "all"
            ],
            "description": "Default 'all'."
          },
          "lang": {
            "type": "string",
            "description": "Wikipedia language code, e.g. 'en', 'es'. Default 'en'."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "query": {
          "type": "string",
          "description": "Echoes back the input search query that suggestions were generated for."
        },
        "suggestions": {
          "type": "string",
          "description": "Ranked, de-duplicated list of autocomplete keyword suggestions merged from Wikipedia and DuckDuckGo."
        },
        "count": {
          "type": "string",
          "description": "Total number of unique suggestions returned in the merged list."
        },
        "per_source": {
          "type": "string",
          "description": "Per-source breakdown showing which suggestions came from Wikipedia OpenSearch vs DuckDuckGo autocomplete."
        },
        "attribution": {
          "type": "string",
          "description": "Source attribution string crediting Wikipedia OpenSearch and DuckDuckGo as the upstream suggestion providers."
        }
      },
      "url": "https://x402.org/v1/keyword-suggest"
    },
    "link-extract": {
      "slug": "link-extract",
      "price": "0.005",
      "cluster": "web-probe",
      "description": "Link extractor / extract links from URL / list all anchor links / page outlink crawler / scrape outbound links / get hrefs from page. Fetches an HTML URL and returns every <a> link with its anchor text, rel attribute, and an is_external flag. Resolves relative URLs against the page's <base> or final URL. Lighter than full scrape / metadata endpoints — exact tool for the agent task 'walk this page, pick which links to follow.' Default 500-link cap. SSRF-guarded (no loopback / RFC1918 targets).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "link",
        "links",
        "extract",
        "anchor",
        "href",
        "crawler",
        "scrape"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Page URL to fetch and extract from. http or https only. Private/loopback rejected. Redirects followed."
          },
          "include_external_only": {
            "type": "boolean",
            "description": "If true, drop same-host links. Default false."
          },
          "max_links": {
            "type": "number",
            "description": "Max links to return (1-2000). Default 500."
          },
          "include_text": {
            "type": "boolean",
            "description": "Include anchor visible text. Default true."
          },
          "timeout_ms": {
            "type": "number",
            "description": "Fetch timeout. Default 12000, max 25000."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "url": {
          "type": "string",
          "description": "Original URL submitted by the caller before any redirect resolution."
        },
        "final_url": {
          "type": "string",
          "description": "URL after following redirects; used as the fallback base for resolving relative hrefs."
        },
        "base_url": {
          "type": "string",
          "description": "Effective base URL used to resolve relative links, from the page's <base> tag or final_url."
        },
        "page_title": {
          "type": [
            "string",
            "null"
          ],
          "description": "Text inside the page's <title> tag, or null if the page has none."
        },
        "links": {
          "type": "array",
          "description": "Array of extracted anchors, each with href, anchor text, rel attribute, and is_external flag."
        },
        "count": {
          "type": "integer",
          "description": "Number of links returned in the links array after the 500-link cap is applied."
        },
        "total_found": {
          "type": "integer",
          "description": "Total anchor count discovered on the page before the max-link cap truncated the list."
        },
        "truncated_at_max": {
          "type": "boolean",
          "description": "True when total_found exceeded the 500-link cap and links was trimmed."
        },
        "source": {
          "type": "string",
          "description": "Identifier of the extractor pipeline that produced the result, e.g. link-extract worker name."
        },
        "attribution": {
          "type": "string",
          "description": "Required credit string for the link-extract endpoint when republishing the extracted data."
        }
      },
      "url": "https://x402.org/v1/link-extract"
    },
    "logo-detect": {
      "slug": "logo-detect",
      "price": "0.03",
      "cluster": "mediakit",
      "description": "Brand logo detection / brand recognition in images. Vision LLM. Returns brands with confidence, location, evidence (wordmark/logomark/lockup/color_scheme), element_type. Supports hint_brands.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "brand",
        "logo",
        "vision",
        "detect",
        "image"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "URL of the image to scan for brand logos, wordmarks, lockups, or other brand elements."
          },
          "hint_brands": {
            "type": "array",
            "description": "Optional list of brands the caller suspects may be present (max 30)."
          }
        },
        "required": [
          "image_url"
        ]
      },
      "outputProperties": {
        "detected_brands": {
          "type": "array",
          "description": "Array of detected brands with confidence score, bounding location, evidence type, and element_type per match."
        },
        "overall_summary": {
          "type": "string",
          "description": "Short natural-language summary of which brands were found in the image and where they appear."
        },
        "no_brands_detected": {
          "type": "boolean",
          "description": "True when the vision model found no recognizable brand logos or marks in the image."
        },
        "image_url": {
          "type": "string",
          "description": "Echoes back the input image URL that was analyzed for brand detection."
        },
        "hint_brands": {
          "type": "array",
          "description": "Echoes the optional list of brand names the caller passed as hints to bias detection toward."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the vision LLM that produced the detection result."
        }
      },
      "url": "https://x402.org/v1/logo-detect"
    },
    "lp-lock-check": {
      "slug": "lp-lock-check",
      "price": "0.01",
      "cluster": "edge-market",
      "description": "LP lock check / liquidity-lock auditor / Unicrypt + Team Finance + burn-address detection. For any LP token (Uniswap V2-shaped) on Ethereum or Base, reports the % of supply held by the canonical LP-locker contracts (Unicrypt v2, Team Finance) plus burn addresses (0x0, 0xdead). Returns a verdict of locked (≥95%), partial (1-95%), or none. Useful for detecting rug-pull risk before swapping into a new pair.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "defi",
        "liquidity-lock",
        "rug-pull-detection",
        "unicrypt",
        "team-finance",
        "uniswap-v2",
        "lp-lock-check"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "lp_token_address": {
            "type": "string",
            "description": "0x-prefixed 20-byte LP token (Uniswap V2 pair) address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'base'."
          }
        },
        "required": [
          "lp_token_address"
        ]
      },
      "outputProperties": {
        "lp_token": {
          "type": "string",
          "description": "LP token contract address that was audited."
        },
        "chain": {
          "type": "string",
          "description": "Chain the LP token lives on (ethereum or base)."
        },
        "total_supply": {
          "type": "string",
          "description": "Total supply of the LP token, as a decimal string."
        },
        "lockers": {
          "type": "string",
          "description": "Per-locker breakdown showing balances held by Unicrypt v2, Team Finance, and burn addresses."
        },
        "total_locked_pct": {
          "type": "string",
          "description": "Combined percentage of LP supply held across all lockers and burn addresses."
        },
        "status": {
          "type": "string",
          "description": "Verdict bucket: locked (>=95%), partial (1-95%), or none (<1%)."
        },
        "source": {
          "type": "string",
          "description": "On-chain contract calls used to compute the balances (no third-party API)."
        }
      },
      "url": "https://x402.org/v1/lp-lock-check"
    },
    "mcp-tools-list": {
      "slug": "mcp-tools-list",
      "price": "0.005",
      "cluster": "web-probe",
      "description": "MCP tools-list / Model Context Protocol discovery / list MCP server tools / tools/list JSON-RPC / agent capability discovery / MCP catalog lookup. Pass any MCP server URL (HTTP transport) — completes the initialize handshake and returns the tool catalog (names, descriptions, JSON-schema input shapes). Optionally also lists resources and prompts. Pure agent infrastructure: an agent that discovers an unknown MCP server URL gets back its capabilities without running its own MCP client. No API key. SSRF-guarded (no loopback / RFC1918 targets).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mcp",
        "agent",
        "tools",
        "discovery",
        "json-rpc",
        "model-context-protocol"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Full URL to an MCP server's JSON-RPC HTTP endpoint."
          },
          "timeout_ms": {
            "type": "number",
            "description": "Per-call timeout. Default 12000, max 25000."
          },
          "list_resources": {
            "type": "boolean",
            "description": "Also call resources/list. Default false."
          },
          "list_prompts": {
            "type": "boolean",
            "description": "Also call prompts/list. Default false."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "url": {
          "type": "string",
          "description": "MCP server URL that was probed (HTTP transport endpoint passed in the request)."
        },
        "server_info": {
          "type": [
            "object",
            "null"
          ],
          "description": "Server identity from the initialize handshake (name, version), or null if the server didn't return one."
        },
        "capabilities": {
          "type": [
            "object",
            "null"
          ],
          "description": "Capabilities object from initialize — which MCP features (tools, resources, prompts) the server advertises."
        },
        "tools": {
          "type": "array",
          "description": "Tool catalog from tools/list — each entry has name, description, and JSON-schema inputSchema."
        },
        "resources": {
          "type": [
            "array",
            "null"
          ],
          "description": "Resource catalog from resources/list if the server supports resources, otherwise null."
        },
        "prompts": {
          "type": [
            "array",
            "null"
          ],
          "description": "Prompt catalog from prompts/list if the server supports prompts, otherwise null."
        },
        "source": {
          "type": "string",
          "description": "Identifier for which probe ran (e.g. mcp-tools-list) for debugging and provenance."
        },
        "attribution": {
          "type": "string",
          "description": "Credit string pointing back to this x402 endpoint as the data source."
        }
      },
      "url": "https://x402.org/v1/mcp-tools-list"
    },
    "merge-pdf": {
      "slug": "merge-pdf",
      "price": "0.01",
      "cluster": "mediakit",
      "description": "PDF merger / combine PDFs / concatenate PDF files / join multiple PDFs into one. 2-50 input PDFs from URLs to single PDF. Preserves bookmarks. CloudConvert engine.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "pdf",
        "pdf-tools",
        "merge-pdf",
        "combine-pdfs",
        "document-processing",
        "cloudconvert"
      ],
      "aliasOf": "pdf-merge",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_urls": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of 2-50 HTTPS URLs pointing to source PDF files to merge in the given order."
          },
          "filename": {
            "type": "string",
            "description": "Output filename for the merged PDF (without .pdf extension or with it; defaults if omitted)."
          }
        },
        "required": [
          "pdf_urls"
        ]
      },
      "outputProperties": {
        "pdf_url": {
          "type": "string",
          "description": "HTTPS URL to download the single merged PDF combining all input files with bookmarks preserved."
        },
        "merged_count": {
          "type": "string",
          "description": "Number of input PDFs successfully concatenated into the output file."
        }
      },
      "url": "https://x402.org/v1/merge-pdf"
    },
    "moderate-content": {
      "slug": "moderate-content",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "Content moderation / safety classifier / OpenAI-style toxicity API. Default: harassment, hate_speech, violence, sexual_content, self_harm, spam, phishing, doxing, illegal_activity. Custom categories + verdict (allow/review/block).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "moderation",
        "safety",
        "classify",
        "trust"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text content to classify against the safety categories."
          },
          "custom_categories": {
            "type": "array",
            "description": "1-20 custom labels."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "categories": {
          "type": "object",
          "description": "Per-category scores or booleans (harassment, hate_speech, violence, sexual_content, self_harm, spam, phishing, doxing, illegal_activity)."
        },
        "verdict": {
          "type": "string",
          "enum": [
            "allow",
            "review",
            "block"
          ],
          "description": "Overall decision: allow, review, or block."
        },
        "summary": {
          "type": "string",
          "description": "Short human-readable explanation of why the verdict was reached."
        },
        "flagged_count": {
          "type": "number",
          "description": "Number of categories that crossed the flag threshold for this text."
        },
        "categories_evaluated": {
          "type": "array",
          "description": "List of category names the classifier scored on this request (defaults plus any custom ones)."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the submitted text."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the moderation model that produced the verdict."
        }
      },
      "url": "https://x402.org/v1/moderate-content"
    },
    "mp4-to-mp3": {
      "slug": "mp4-to-mp3",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "MP4 → MP3 audio extractor. Any video format (mov, webm, mkv, avi, m4v, flv) → MP3 via CloudConvert. Selectable bitrate (96/128/192 kbps). 60-min / 500MB max.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "mp4",
        "mp3",
        "audio",
        "extract",
        "convert",
        "video"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "video_url": {
            "type": "string",
            "description": "Public URL of a video file (mp4, webm, mov, mkv, etc.). Max 60 minutes / 500MB."
          },
          "bitrate": {
            "type": "number",
            "enum": [
              96,
              128,
              192
            ],
            "description": "MP3 bitrate in kbps. One of: 96, 128 (default), 192."
          }
        },
        "required": [
          "video_url"
        ]
      },
      "outputProperties": {
        "audio_url": {
          "type": "string",
          "description": "Signed CloudConvert URL of the extracted MP3 (24h expiry)."
        },
        "bitrate": {
          "type": "number",
          "description": "Bitrate applied (kbps)."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Output MP3 size in bytes."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the output (typically audio/mpeg)."
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job id (useful for support)."
        }
      },
      "url": "https://x402.org/v1/mp4-to-mp3"
    },
    "music-generate": {
      "slug": "music-generate",
      "price": "0.05",
      "cluster": "synthforge",
      "description": "Music generation / text-to-music / AI music / generative song / instrumental and vocal music. Text-to-music via Venice with the minimax-music-v26 model. Optional lyrics input. Duration 5-120 seconds. Returns a permanent fal-hosted audio URL (or a Venice-hosted URL when Venice already provides one).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "synthforge",
        "music-generation",
        "text-to-music",
        "ai-music",
        "generative-audio",
        "instrumental",
        "vocals",
        "minimax-music"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Genre / mood / instrumentation description."
          },
          "duration_seconds": {
            "type": "number",
            "description": "Length in seconds. Range [5, 120]. Default 30."
          },
          "lyrics": {
            "type": "string",
            "description": "Optional lyrics. The model will sing them."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Default 'minimax-music-v26'."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "audio_url": {
          "type": "string",
          "description": "Permanent URL to the generated audio file, fal-hosted by default or Venice-hosted when Venice supplies one."
        },
        "duration_seconds": {
          "type": "string",
          "description": "Length of the generated track in seconds, between 5 and 120 as requested in the input."
        },
        "model": {
          "type": "string",
          "description": "Model identifier used to generate the track, typically minimax-music-v26 on Venice."
        },
        "prompt": {
          "type": "string",
          "description": "Text prompt describing the music to generate, echoed back from the input for reference."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Venice-side request identifier for the generation job, useful for tracing or support follow-up."
        },
        "source": {
          "type": "string",
          "description": "Origin of the audio URL, either fal (re-hosted) or venice (direct Venice-hosted asset)."
        }
      },
      "url": "https://x402.org/v1/music-generate"
    },
    "nft-floor": {
      "slug": "nft-floor",
      "price": "0.01",
      "cluster": "edge-market",
      "description": "NFT collection floor + recent sales via Reservoir. Ethereum / Base / Arbitrum / Optimism / Polygon. Floor, top bid, 24h/7d/30d volume + change, ranks, recent sales.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "nft",
        "floor-price",
        "reservoir",
        "collection-stats",
        "nft-sales",
        "edge-market",
        "nft-floor"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "collection": {
            "type": "string",
            "description": "Slug or contract address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "ethereum",
              "base",
              "arbitrum",
              "optimism",
              "polygon"
            ],
            "description": "EVM chain to query: ethereum, base, arbitrum, optimism, or polygon."
          },
          "include_recent_sales": {
            "type": "boolean",
            "description": "When true, includes a recent_sales array of the latest transactions for the collection."
          },
          "recent_sales_limit": {
            "type": "number",
            "description": "Max number of recent sales to return when include_recent_sales is true."
          }
        },
        "required": [
          "collection"
        ]
      },
      "outputProperties": {
        "floor_native": {
          "type": "string",
          "description": "Collection floor price in the chain's native token (e.g. ETH, MATIC) as a decimal string."
        },
        "token_count": {
          "type": "string",
          "description": "Total number of tokens (NFTs) in the collection as a string."
        }
      },
      "url": "https://x402.org/v1/nft-floor"
    },
    "ocr": {
      "slug": "ocr",
      "price": "0.20",
      "cluster": "mediakit",
      "description": "OCR / optical character recognition / scanned document extractor / image-PDF to text. Run OCR on scanned PDFs and image-based documents. Datalab Marker engine — preserves layout, tables, math. Returns clean Markdown or plain text. 30 pages max.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "ocr",
        "mediakit",
        "pdf-extraction",
        "scanned-documents",
        "image-to-text",
        "markdown-extraction",
        "table-extraction",
        "datalab-marker"
      ],
      "aliasOf": "pdf-to-markdown",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of a PDF file (http or https). Must be directly fetchable, not behind auth or a viewer redirect. Max 30 pages."
          },
          "output_format": {
            "type": "string",
            "enum": [
              "markdown",
              "html",
              "json"
            ],
            "description": "'markdown' (default — best for LLM downstream), 'html' (preserves more layout structure), or 'json' (per-page blocks with type + bbox)."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "markdown": {
          "type": "string",
          "description": "Extracted text from the document in Markdown format, preserving headings, tables, and math layout."
        },
        "page_count": {
          "type": "string",
          "description": "Number of pages processed from the input PDF or image document."
        },
        "source_url": {
          "type": "string",
          "description": "URL of the source PDF or image file that was passed in for OCR processing."
        }
      },
      "url": "https://x402.org/v1/ocr"
    },
    "office-to-pdf": {
      "slug": "office-to-pdf",
      "price": "0.05",
      "cluster": "mediakit",
      "description": "Office to PDF converter — DOCX/DOC, XLSX/XLS, PPTX/PPT, ODT/ODS/ODP, RTF, TXT, CSV, EPUB, MD, HTML, Apple Pages/Numbers/Keynote → PDF. CloudConvert engine.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "docx",
        "xlsx",
        "pptx",
        "pdf",
        "office",
        "convert"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "file_url": {
            "type": "string",
            "description": "URL of the source Office file. Format inferred from extension."
          }
        },
        "required": [
          "file_url"
        ]
      },
      "outputProperties": {
        "pdf_url": {
          "type": "string",
          "description": "Temporary download URL for the converted PDF file hosted on CloudConvert's storage."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the generated PDF in bytes."
        },
        "source_format": {
          "type": "string",
          "description": "Detected input format of the source file (e.g. docx, xlsx, pptx, odt, rtf, epub)."
        },
        "source_url": {
          "type": "string",
          "description": "Echoed URL of the original Office document that was submitted for conversion."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job identifier for tracking or debugging the conversion run."
        }
      },
      "url": "https://x402.org/v1/office-to-pdf"
    },
    "package-risk-npm": {
      "slug": "package-risk-npm",
      "price": "0.03",
      "cluster": "prooflayer",
      "description": "npm package risk score / supply-chain scanner / typosquat detector. Maintainer count, weekly downloads, install scripts, dependency depth, deprecation, age, typosquat distance to popular packages. Plus LLM risk summary.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "npm",
        "supply-chain",
        "security",
        "package",
        "risk"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "package_name": {
            "type": "string",
            "description": "e.g. 'lodash' or '@scope/name'."
          },
          "version": {
            "type": "string",
            "description": "Optional specific version (e.g. '4.17.21'). Default: latest tagged version."
          }
        },
        "required": [
          "package_name"
        ]
      },
      "outputProperties": {
        "package_name": {
          "type": "string",
          "description": "npm package name that was scanned."
        },
        "version": {
          "type": "string",
          "description": "Specific package version evaluated, or latest if no version was requested."
        },
        "score": {
          "type": "number",
          "description": "Numeric risk score (higher = riskier) aggregated from maintainer, download, install-script, and typosquat signals."
        },
        "risk_level": {
          "type": "string",
          "description": "Categorical bucket like low, medium, high, or critical derived from the score."
        },
        "summary": {
          "type": "string",
          "description": "LLM-written plain-English risk summary covering the main red flags for this package."
        },
        "signals": {
          "type": "object",
          "description": "Raw signal breakdown: maintainer count, weekly downloads, install scripts, dep depth, deprecation, age, typosquat distance."
        },
        "metadata": {
          "type": "object",
          "description": "Package metadata from the npm registry: publish date, license, repo URL, homepage, latest version, deprecation status."
        }
      },
      "url": "https://x402.org/v1/package-risk-npm"
    },
    "password-strength": {
      "slug": "password-strength",
      "price": "0.02",
      "cluster": "web-probe",
      "description": "Password strength meter + breach checker. Entropy bits, character-class diversity, common-pattern penalties, estimated crack times (online/offline/GPU). Plus Have I Been Pwned k-anonymity breach lookup — full password never leaves the server.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "password",
        "security",
        "entropy",
        "hibp",
        "breach"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "password": {
            "type": "string",
            "description": "Password to score. Sent over TLS to the worker but never logged. Max 200 chars."
          },
          "check_breaches": {
            "type": "boolean",
            "description": "Check HIBP. Default true. Sends only first 5 chars of SHA-1 (k-anonymity)."
          }
        },
        "required": [
          "password"
        ]
      },
      "outputProperties": {
        "score": {
          "type": "number",
          "description": "Overall password strength score, typically 0-100 combining entropy, length, and pattern penalties."
        },
        "bucket": {
          "type": "string",
          "enum": [
            "very_weak",
            "weak",
            "fair",
            "strong",
            "very_strong"
          ],
          "description": "Strength label like very-weak, weak, fair, strong, or very-strong derived from the score."
        },
        "length": {
          "type": "number",
          "description": "Character count of the submitted password."
        },
        "entropy_bits": {
          "type": "number",
          "description": "Shannon entropy estimate in bits based on charset size and length."
        },
        "charset_size": {
          "type": "number",
          "description": "Size of the effective character pool used for entropy math (e.g., 26, 62, 95)."
        },
        "character_classes": {
          "type": "object",
          "description": "Per-class flags showing which sets appear: lowercase, uppercase, digits, symbols."
        },
        "character_class_count": {
          "type": "number",
          "description": "Number of distinct character classes present (0-4)."
        },
        "common_patterns_found": {
          "type": "array",
          "description": "List of detected weak patterns like dictionary words, sequences, keyboard walks, or dates."
        },
        "estimated_crack_time": {
          "type": "object",
          "description": "Crack-time estimates for online, offline, and GPU attack scenarios as human-readable durations."
        },
        "breach_count": {
          "type": "number",
          "description": "Number of times the password appears in the Have I Been Pwned corpus."
        },
        "is_breached": {
          "type": "boolean",
          "description": "True when breach_count is greater than zero in the HIBP dataset."
        },
        "breach_check_performed": {
          "type": "boolean",
          "description": "True when the HIBP k-anonymity lookup ran successfully for this request."
        },
        "feedback": {
          "type": "array",
          "description": "Actionable suggestions to strengthen the password, such as add length or mix character classes."
        },
        "note": {
          "type": "string",
          "description": "Server-side note about scoring caveats, HIBP fallback, or privacy guarantee that the password never leaves."
        }
      },
      "url": "https://x402.org/v1/password-strength"
    },
    "patent-search": {
      "slug": "patent-search",
      "price": "0.05",
      "cluster": "edge-finance",
      "description": "USPTO patent search. Issued US patents and published applications via the USPTO Open Data Portal. Search by topic, inventor, assignee, CPC class, filing-date range. Returns title, abstract, inventors, assignees, dates, classifications. Optional Venice plain-English summary.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "USPTO_ODP_API_KEY",
        "VENICE_API_KEY"
      ],
      "tags": [
        "patent",
        "uspto",
        "ip",
        "intellectual-property",
        "prior-art",
        "research",
        "rd",
        "due-diligence",
        "patents"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Free-text search keywords."
          },
          "inventor": {
            "type": "string",
            "description": "Inventor last name filter. Optional."
          },
          "assignee": {
            "type": "string",
            "description": "Assignee/owner name filter. Optional."
          },
          "cpc": {
            "type": "string",
            "description": "CPC classification code (e.g. 'G06N'). Optional."
          },
          "date_from": {
            "type": "string",
            "description": "Filing-date floor (YYYY-MM-DD). Optional."
          },
          "date_to": {
            "type": "string",
            "description": "Filing-date ceiling (YYYY-MM-DD). Optional."
          },
          "limit": {
            "type": "number",
            "description": "Max patents to return (1-50). Default 10."
          },
          "summarize": {
            "type": "boolean",
            "description": "If true, attach a Venice plain-English summary to the top result."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "query": {
          "type": "string",
          "description": "Echoes back the search query string used against the USPTO Open Data Portal."
        },
        "total": {
          "type": "number",
          "description": "Total count of matching issued patents and published applications found for the query."
        },
        "returned": {
          "type": "number",
          "description": "Number of patent records actually included in the patents array for this response."
        },
        "patents": {
          "type": "array",
          "description": "Array of matching patents with title, abstract, inventors, assignees, dates, and CPC classifications."
        }
      },
      "url": "https://x402.org/v1/patent-search"
    },
    "pdf-compress": {
      "slug": "pdf-compress",
      "price": "0.005",
      "cluster": "mediakit",
      "description": "PDF compressor / shrink PDF / PDF size reducer / smaller PDF for email. Three quality levels: ebook (lowest, web-quality), printer (medium), prepress (highest, archival). CloudConvert engine.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "pdf",
        "pdf-compression",
        "file-size-reduction",
        "mediakit",
        "document-optimization",
        "cloudconvert",
        "shrink-pdf"
      ],
      "aliasOf": "compress-pdf",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Publicly reachable URL of the source PDF to compress."
          },
          "profile": {
            "type": "string",
            "enum": [
              "web",
              "print",
              "archive",
              "mrc",
              "max"
            ],
            "description": "Compression preset: ebook (smallest, web-quality), printer (medium), or prepress (largest, archival)."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "pdf_url": {
          "type": "string",
          "description": "URL where the compressed PDF can be downloaded."
        },
        "original_size_bytes": {
          "type": "string",
          "description": "Size of the source PDF in bytes before compression."
        },
        "compressed_size_bytes": {
          "type": "string",
          "description": "Size of the output PDF in bytes after compression."
        },
        "saved_percent": {
          "type": "string",
          "description": "Percentage of bytes shaved off relative to the original PDF size."
        }
      },
      "url": "https://x402.org/v1/pdf-compress"
    },
    "pdf-extract-tables": {
      "slug": "pdf-extract-tables",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "PDF table extractor / table from PDF / scanned-table parsing / financial-table OCR / multi-page table consolidator / Datalab Marker tables. AI + OCR pipeline that finds every table in a PDF (digital or scanned) and returns row × column text matrices, page-by-page. Optional cell bounding boxes for downstream layout reconstruction. Optional page_range filter ('1-5', '3', '1,3,5'). Handles merged headers, multi-page financial statements, balance sheets, lab results, scanned reports. 30 pages max. Sibling of pdf-to-markdown using the same Datalab backend, but pre-parsed to tables only.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "pdf",
        "table-extraction",
        "ocr",
        "mediakit",
        "document-parsing",
        "financial-tables",
        "datalab",
        "pdf-tables"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of a PDF file (http or https). Must be directly fetchable, not behind auth or a viewer redirect. Max 30 pages."
          },
          "page_range": {
            "type": "string",
            "description": "Optional 1-indexed page filter applied after extraction. Accepts ranges, single pages, or comma-lists: '1-5', '3', '1,3,5'. Default: all pages."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "source_url": {
          "type": "string",
          "description": "Echoes back the PDF URL that was extracted, for traceability."
        },
        "page_count": {
          "type": "string",
          "description": "Total number of pages in the input PDF (capped at 30)."
        },
        "tables": {
          "type": "string",
          "description": "Array of detected tables with page number, row × column text matrix, and optional cell bounding boxes."
        },
        "source": {
          "type": "string",
          "description": "Backend identifier, typically 'datalab-marker', indicating the OCR/parsing engine used."
        }
      },
      "url": "https://x402.org/v1/pdf-extract-tables"
    },
    "pdf-merge": {
      "slug": "pdf-merge",
      "price": "0.01",
      "cluster": "mediakit",
      "description": "PDF merger / PDF combiner / PDF concatenator. 2-50 PDFs from URLs → single PDF. Preserves bookmarks. CloudConvert engine.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "pdf",
        "merge",
        "combine",
        "concat"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_urls": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of 2-50 PDF URLs in merge order."
          },
          "filename": {
            "type": "string",
            "description": "Output filename (must end in .pdf). Default 'merged.pdf'."
          }
        },
        "required": [
          "pdf_urls"
        ]
      },
      "outputProperties": {
        "pdf_url": {
          "type": "string",
          "description": "Public URL of the merged PDF output, hosted temporarily for download."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the merged PDF in bytes."
        },
        "merged_count": {
          "type": "number",
          "description": "Number of source PDFs combined into the output file."
        },
        "filename": {
          "type": "string",
          "description": "Filename of the merged PDF (e.g. merged.pdf)."
        },
        "source_urls": {
          "type": "array",
          "description": "Array of input PDF URLs that were merged, in the order they were concatenated."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job identifier for the merge task."
        }
      },
      "url": "https://x402.org/v1/pdf-merge"
    },
    "pdf-split": {
      "slug": "pdf-split",
      "price": "0.04",
      "cluster": "mediakit",
      "description": "PDF splitter / PDF page extractor. Two modes: page ranges (['1-3','5','7-end']) or one PDF per source page. CloudConvert engine.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "pdf",
        "split",
        "pages",
        "extract"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of the source PDF to split into separate files by page range or one-per-page."
          },
          "ranges": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of page-range strings. Examples: '1', '1-3', '5-end'. Up to 50 ranges."
          },
          "split_each_page": {
            "type": "boolean",
            "description": "If true (and ranges omitted), produces one PDF per source page."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "pdfs": {
          "type": "array",
          "description": "Array of { url, filename, file_size_bytes, range }."
        },
        "output_count": {
          "type": "number",
          "description": "Number of output PDF files produced by the split operation."
        },
        "mode": {
          "type": "string",
          "description": "'ranges' or 'split_each_page'."
        },
        "ranges": {
          "type": "array",
          "description": "Array of page-range strings actually applied (e.g. ['1-3','5','7-end']) or per-page entries."
        },
        "source_url": {
          "type": "string",
          "description": "URL of the original input PDF that was split."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job ID for the split task, usable for status lookup or debugging."
        }
      },
      "url": "https://x402.org/v1/pdf-split"
    },
    "pdf-to-jpg": {
      "slug": "pdf-to-jpg",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "PDF to JPG / PNG / WEBP image converter. Renders every page at configurable DPI (36-600). Returns one image URL per page. CloudConvert backend.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "pdf",
        "jpg",
        "png",
        "webp",
        "rasterize",
        "images"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of the PDF."
          },
          "format": {
            "type": "string",
            "enum": [
              "jpg",
              "png",
              "webp"
            ],
            "description": "'jpg' (default), 'png', or 'webp'."
          },
          "quality": {
            "type": "number",
            "description": "JPG quality 1-100 (default 85). Ignored for png/webp."
          },
          "pixel_density": {
            "type": "number",
            "description": "DPI for rasterization. Default 144. Range 36-600."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "images": {
          "type": "array",
          "description": "Array of { page, url, filename, file_size_bytes } objects."
        },
        "page_count": {
          "type": "number",
          "description": "Number of pages rendered from the source PDF, one image URL returned per page."
        },
        "format": {
          "type": "string",
          "description": "Output image format used for the rendered pages (jpg, png, or webp)."
        },
        "quality": {
          "type": "number",
          "description": "Compression quality applied to lossy formats like JPG/WEBP, typically 1-100."
        },
        "pixel_density": {
          "type": "number",
          "description": "DPI used to rasterize each PDF page, between 36 and 600 as configured in the request."
        },
        "source_url": {
          "type": "string",
          "description": "URL of the input PDF that was rasterized into images."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job identifier for the rasterization run, useful for tracing or support."
        }
      },
      "url": "https://x402.org/v1/pdf-to-jpg"
    },
    "pdf-to-markdown": {
      "slug": "pdf-to-markdown",
      "price": "0.20",
      "cluster": "mediakit",
      "description": "AI PDF extractor: PDF to Markdown / HTML / structured JSON via Datalab Marker. OCR + layout-aware. Best-in-class for tables, equations, multi-column docs. 30 pages max.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "DATALAB_API_KEY"
      ],
      "tags": [
        "pdf",
        "markdown",
        "html",
        "json",
        "conversion"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of a PDF file. Max 30 pages."
          },
          "output_format": {
            "type": "string",
            "enum": [
              "markdown",
              "html",
              "json"
            ],
            "description": "Output format: 'markdown' (default), 'html', or 'json'."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "markdown": {
          "type": "string",
          "description": "Markdown content (present when output_format is 'markdown')"
        },
        "html": {
          "type": "string",
          "description": "HTML content (present when output_format is 'html')"
        },
        "json": {
          "type": "object",
          "description": "Structured JSON content (present when output_format is 'json')"
        },
        "output_format": {
          "type": "string",
          "description": "Echo of the format used"
        },
        "page_count": {
          "type": "number",
          "description": "Number of pages in the source PDF"
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL"
        }
      },
      "url": "https://x402.org/v1/pdf-to-markdown"
    },
    "pdf-to-text": {
      "slug": "pdf-to-text",
      "price": "0.20",
      "cluster": "mediakit",
      "description": "PDF to text / extract text from PDF. AI-powered text extraction via Datalab Marker. OCR + layout-aware. Best-in-class for tables, equations, multi-column layouts. Outputs plain text or structured markdown. 30 pages max.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "pdf",
        "pdf-to-text",
        "text-extraction",
        "ocr",
        "document-parsing",
        "markdown",
        "mediakit",
        "datalab-marker"
      ],
      "aliasOf": "pdf-to-markdown",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of a PDF file."
          },
          "output_format": {
            "type": "string",
            "enum": [
              "markdown",
              "html",
              "json"
            ],
            "description": "'markdown' (default), 'html', or 'json'."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "markdown": {
          "type": "string",
          "description": "Extracted text from the PDF as plain text or layout-aware markdown preserving tables, equations, and columns."
        },
        "page_count": {
          "type": "string",
          "description": "Number of pages processed from the source PDF (capped at the 30-page per-call limit)."
        },
        "source_url": {
          "type": "string",
          "description": "URL of the PDF that was fetched and processed for text extraction."
        }
      },
      "url": "https://x402.org/v1/pdf-to-text"
    },
    "pdf-watermark": {
      "slug": "pdf-watermark",
      "price": "0.02",
      "cluster": "mediakit",
      "description": "PDF watermark / image watermark / video watermark — text or image overlay on PDFs, PNG/JPG/GIF, or MP4/MOV/WEBM. Configurable position, opacity, font, rotation, margin. CloudConvert engine.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "watermark",
        "pdf-watermark",
        "image-watermark",
        "video-watermark",
        "overlay",
        "cloudconvert",
        "branding"
      ],
      "aliasOf": "watermark",
      "inputSchema": {
        "type": "object",
        "properties": {
          "file_url": {
            "type": "string",
            "description": "URL of the source PDF, image (PNG/JPG/GIF), or video (MP4/MOV/WEBM) to watermark."
          },
          "text": {
            "type": "string",
            "description": "Text string to overlay as the watermark; omit if using image_url instead."
          },
          "image_url": {
            "type": "string",
            "description": "URL of an image to overlay as the watermark; omit if using text instead."
          },
          "font_size": {
            "type": "number",
            "description": "Point size for text watermarks; ignored when overlaying an image."
          },
          "font_color": {
            "type": "string",
            "description": "Hex or named color for text watermarks (e.g. #FF0000 or red)."
          },
          "opacity": {
            "type": "number",
            "description": "Watermark transparency from 0 (invisible) to 1 (fully opaque)."
          },
          "rotation": {
            "type": "number",
            "description": "Rotation angle in degrees applied to the watermark overlay."
          },
          "position_vertical": {
            "type": "string",
            "enum": [
              "top",
              "center",
              "bottom"
            ],
            "description": "Vertical placement: top, center, or bottom."
          },
          "position_horizontal": {
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ],
            "description": "Horizontal placement: left, center, or right."
          }
        },
        "required": [
          "file_url"
        ]
      },
      "outputProperties": {
        "output_url": {
          "type": "string",
          "description": "URL of the watermarked PDF, image, or video file ready for download."
        },
        "watermark_type": {
          "type": "string",
          "description": "Indicates whether a text or image watermark was applied."
        },
        "input_format": {
          "type": "string",
          "description": "Detected format of the source file (e.g. pdf, png, mp4)."
        }
      },
      "url": "https://x402.org/v1/pdf-watermark"
    },
    "pdf2md": {
      "slug": "pdf2md",
      "price": "0.20",
      "cluster": "mediakit",
      "description": "PDF to Markdown converter. AI PDF extractor. Datalab Marker — OCR + layout-aware. Best-in-class for tables, equations, multi-column.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "DATALAB_API_KEY"
      ],
      "tags": [
        "pdf",
        "markdown",
        "html",
        "json",
        "conversion"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "Public URL of a PDF file. Max 30 pages."
          },
          "output_format": {
            "type": "string",
            "description": "Output format: 'markdown' (default), 'html', or 'json'."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "markdown": {
          "type": "string",
          "description": "Markdown content (present when output_format is 'markdown')"
        },
        "html": {
          "type": "string",
          "description": "HTML content (present when output_format is 'html')"
        },
        "json": {
          "type": "object",
          "description": "Structured JSON content (present when output_format is 'json')"
        },
        "output_format": {
          "type": "string",
          "description": "Echo of the format used"
        },
        "page_count": {
          "type": "number",
          "description": "Number of pages in the source PDF"
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL"
        }
      },
      "url": "https://x402.org/v1/pdf2md"
    },
    "pii-redact": {
      "slug": "pii-redact",
      "price": "0.005",
      "cluster": "wordmint",
      "description": "PII redactor / mask emails phones SSNs IBANs credit cards IPs / GDPR safe text / privacy scrubber. Two-stage redaction: a deterministic regex pre-pass for structural PII (email, phone, credit card, SSN, IBAN, IPv4/v6, URL), then Venice mistral-small-3-2-24b for residual PII (full names, street addresses, dates of birth). Returns the redacted text and a list of every (type, value, masked_with) triple.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "pii-redaction",
        "data-masking",
        "gdpr",
        "privacy-scrubber",
        "email-redaction",
        "credit-card-masking",
        "pii-detection"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to redact. Up to 30,000 chars."
          },
          "mask": {
            "type": "string",
            "description": "Replacement string. Use 'type' (default) for [EMAIL], [PHONE], etc.; or any literal string for a uniform mask."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "original": {
          "type": "string",
          "description": "Original input text exactly as submitted, before any redaction is applied."
        },
        "redacted": {
          "type": "string",
          "description": "Text with all detected PII replaced by masked placeholders like [EMAIL], [PHONE], [SSN], [NAME]."
        },
        "found": {
          "type": "string",
          "description": "Array of {type, value, masked_with} triples listing every piece of PII detected and how it was masked."
        },
        "found_count": {
          "type": "string",
          "description": "Total number of PII items detected and redacted across both regex and LLM stages."
        },
        "model": {
          "type": "string",
          "description": "Venice model used for the second-stage LLM redaction pass (mistral-small-3-2-24b)."
        },
        "source": {
          "type": "string",
          "description": "Indicator of which stage detected each item: regex pre-pass or Venice LLM residual pass."
        }
      },
      "url": "https://x402.org/v1/pii-redact"
    },
    "polymarket-kalshi-arbitrage": {
      "slug": "polymarket-kalshi-arbitrage",
      "price": "0.02",
      "cluster": "edge-finance",
      "description": "Polymarket × Kalshi arbitrage scanner / cross-venue prediction market spread / event price arbitrage detector / Polymarket vs Kalshi comparison. Pulls active markets from both venues, fuzzy-matches by title (Jaccard token overlap), and reports pairs whose implied YES probabilities diverge beyond a configurable threshold. Output is data-only: spread metrics, no trade execution. Useful for cross-market sentiment timing and signal triangulation.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "prediction-markets",
        "arbitrage",
        "polymarket",
        "kalshi",
        "spread-scanner",
        "cross-venue",
        "market-arbitrage"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "min_spread": {
            "type": "number",
            "description": "Minimum |p_poly - p_kalshi| spread to report. 0-1. Default 0.05."
          },
          "min_match_score": {
            "type": "number",
            "description": "Minimum Jaccard token overlap to treat two titles as the same event. 0-1. Default 0.4."
          },
          "scan_limit": {
            "type": "number",
            "description": "Max markets to pull from each venue. 10-500. Default 100."
          },
          "category": {
            "type": "string",
            "description": "Optional Polymarket category filter (substring)."
          }
        }
      },
      "outputProperties": {
        "pairs": {
          "type": "string",
          "description": "Array of matched Polymarket/Kalshi market pairs with titles, YES probabilities, spread, and venue links."
        },
        "pair_count": {
          "type": "string",
          "description": "Number of cross-venue market pairs whose implied YES probability spread exceeded the threshold."
        },
        "attribution": {
          "type": "string",
          "description": "Source credit string naming Polymarket and Kalshi as the upstream prediction market data providers."
        }
      },
      "url": "https://x402.org/v1/polymarket-kalshi-arbitrage"
    },
    "polymarket-leaderboard": {
      "slug": "polymarket-leaderboard",
      "price": "0.005",
      "cluster": "edge-finance",
      "description": "Polymarket leaderboard / top traders / profit leaderboard / Polymarket whales / volume leaderboard / prediction market rankings. Returns the top accounts by realized profit OR notional volume over 1d/1w/1m/all-time windows. Includes proxy wallet, pseudonym, bio, amount in USD. DATA only.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "polymarket",
        "prediction-markets",
        "leaderboard",
        "top-traders",
        "whale-tracking",
        "profit-rankings"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "metric": {
            "type": "string",
            "enum": [
              "profit",
              "volume"
            ],
            "description": "Default 'profit'."
          },
          "window": {
            "type": "string",
            "enum": [
              "1d",
              "1w",
              "1m",
              "all"
            ],
            "description": "Default '1d'."
          },
          "limit": {
            "type": "number",
            "description": "1-200. Default 25."
          }
        }
      },
      "outputProperties": {
        "leaderboard": {
          "type": "string",
          "description": "Array of top Polymarket trader entries with proxy wallet, pseudonym, bio, and USD amount for the requested ranking."
        },
        "metric": {
          "type": "string",
          "description": "Ranking metric used, either realized profit or notional trading volume."
        },
        "window": {
          "type": "string",
          "description": "Time window for the ranking: 1d, 1w, 1m, or all-time."
        },
        "count": {
          "type": "string",
          "description": "Number of trader entries returned in the leaderboard array."
        },
        "attribution": {
          "type": "string",
          "description": "Upstream data source credit for the Polymarket leaderboard figures."
        }
      },
      "url": "https://x402.org/v1/polymarket-leaderboard"
    },
    "polymarket-markets": {
      "slug": "polymarket-markets",
      "price": "0.005",
      "cluster": "edge-finance",
      "description": "Polymarket markets / prediction market data / Polymarket API / list active prediction markets / crypto-settled betting odds / event odds / Polymarket browse. Pulls live Polymarket markets from gamma-api with filter by category, tag, free-text query, minimum liquidity. Returns market question, current YES/NO outcome prices (implied probabilities), 24-hr volume, liquidity, end date. DATA-ONLY — no trading. Useful for agent forecasting research and arbitrage detection.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "prediction-markets",
        "polymarket",
        "betting-odds",
        "event-probabilities",
        "market-liquidity",
        "forecasting",
        "polymarket-gamma"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Free-text filter applied to question + description + slug. Case-insensitive substring match against the current page."
          },
          "category": {
            "type": "string",
            "description": "Filter by Polymarket category (substring match, e.g. 'Sports', 'Crypto', 'Politics')."
          },
          "tag": {
            "type": "string",
            "description": "Polymarket tag slug filter, passed through to upstream."
          },
          "active": {
            "type": "boolean",
            "description": "Default true. Pass false to include inactive markets."
          },
          "closed": {
            "type": "boolean",
            "description": "Default false. Pass true to include closed markets."
          },
          "limit": {
            "type": "number",
            "description": "1-100. Default 20."
          },
          "offset": {
            "type": "number",
            "description": "Pagination offset."
          },
          "order": {
            "type": "string",
            "enum": [
              "volume24hr",
              "liquidity",
              "endDate",
              "startDate"
            ],
            "description": "Sort field."
          },
          "ascending": {
            "type": "boolean",
            "description": "Sort direction."
          },
          "min_liquidity": {
            "type": "number",
            "description": "Minimum liquidity in USD."
          }
        }
      },
      "outputProperties": {
        "markets": {
          "type": "string",
          "description": "Array of Polymarket markets with question, YES/NO prices, 24-hr volume, liquidity, and end date."
        },
        "count": {
          "type": "string",
          "description": "Number of markets returned in the markets array after filters are applied."
        },
        "attribution": {
          "type": "string",
          "description": "Source credit for the data, pointing to Polymarket's gamma-api as the upstream provider."
        }
      },
      "url": "https://x402.org/v1/polymarket-markets"
    },
    "polymarket-trades": {
      "slug": "polymarket-trades",
      "price": "0.005",
      "cluster": "edge-finance",
      "description": "Polymarket trades / recent prediction market trades / on-chain bet history / Polymarket trade feed / Polymarket data API. Pulls recent trades from a Polymarket market (by slug or conditionId) or for a specific wallet. Returns side, size, price, timestamp, trader pseudonym, on-chain tx hash, and computed notional USD. DATA only.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "polymarket",
        "prediction-markets",
        "trade-feed",
        "on-chain-trades",
        "wallet-history",
        "market-data",
        "polymarket-trades"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "market": {
            "type": "string",
            "description": "Market slug (e.g. 'will-x-happen') OR conditionId (0x...). Optional."
          },
          "user": {
            "type": "string",
            "description": "Polymarket proxy wallet address to filter by. Optional."
          },
          "limit": {
            "type": "number",
            "description": "1-500. Default 50."
          },
          "offset": {
            "type": "number",
            "description": "Pagination offset."
          },
          "side": {
            "type": "string",
            "enum": [
              "BUY",
              "SELL"
            ],
            "description": "Filter by side."
          },
          "after_ts": {
            "type": "number",
            "description": "Unix seconds. Only trades after."
          },
          "before_ts": {
            "type": "number",
            "description": "Unix seconds. Only trades before."
          }
        }
      },
      "outputProperties": {
        "trades": {
          "type": "string",
          "description": "Array of recent Polymarket trades with side, size, price, timestamp, trader pseudonym, and on-chain tx hash."
        },
        "count": {
          "type": "string",
          "description": "Number of trades returned in the trades array for the requested market or wallet."
        },
        "total_notional_usd": {
          "type": "string",
          "description": "Sum of notional USD value across all returned trades, computed as size times price."
        },
        "attribution": {
          "type": "string",
          "description": "Source credit string pointing to Polymarket as the upstream data provider for these trades."
        }
      },
      "url": "https://x402.org/v1/polymarket-trades"
    },
    "price-impact": {
      "slug": "price-impact",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Price-impact / slippage estimator / DEX swap size impact / size-keyed quote / depth simulation. For a (from_token, to_token, chain), pulls aggregator quotes (LlamaSwap meta-aggregator, free public) at multiple USD sizes and reports per-size effective price + slippage versus the smallest size. Use to size a fill before submitting it on-chain.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "dex",
        "slippage",
        "price-impact",
        "swap-quote",
        "depth-simulation",
        "aggregator",
        "trade-sizing"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "from_token": {
            "type": "string",
            "description": "0x-prefixed 20-byte ERC-20 input token."
          },
          "to_token": {
            "type": "string",
            "description": "0x-prefixed 20-byte ERC-20 output token."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'base'."
          },
          "sizes_usd": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "USD sizes to quote at, sorted ascending. Up to 5. Default [100, 1000, 10000]."
          }
        },
        "required": [
          "from_token",
          "to_token"
        ]
      },
      "outputProperties": {
        "from_token": {
          "type": "string",
          "description": "Source token address (or symbol) being sold in the simulated swap."
        },
        "to_token": {
          "type": "string",
          "description": "Destination token address (or symbol) being bought in the simulated swap."
        },
        "chain": {
          "type": "string",
          "description": "Chain the quote is sourced on (e.g. ethereum, base, arbitrum)."
        },
        "from_usd_price": {
          "type": "string",
          "description": "Spot USD price of from_token used to convert requested USD sizes into token amounts."
        },
        "from_decimals": {
          "type": "string",
          "description": "ERC-20 decimals of from_token, used to scale amounts passed to the aggregator."
        },
        "quotes": {
          "type": "string",
          "description": "Array of per-size entries with USD size, effective price, and slippage versus the smallest probe size."
        },
        "source": {
          "type": "string",
          "description": "Aggregator that produced the quotes (LlamaSwap meta-aggregator across DEX routers)."
        }
      },
      "url": "https://x402.org/v1/price-impact"
    },
    "production-readiness-score": {
      "slug": "production-readiness-score",
      "price": "0.10",
      "cluster": "prooflayer",
      "description": "production readiness score / AI app deploy gate / Prooflayer cluster aggregator / repo prod-risk composite / one-call audit / unified production readiness API / vibe-coded app safety scan. Calls all 5 Prooflayer component scanners (secrets-exposure-check, deploy-config-risk, db-migration-risk, dep-risk-summary, prompt-injection-surface) in parallel in-process and rolls findings into a weighted composite score (default weights: secrets 0.30, migrations 0.20, deps 0.20, deploy 0.15, prompt 0.15). Returns composite 0-100, production_grade (production-ready | needs-review | risky | do-not-ship), per-component sub-scores, top-N deduped findings sorted by severity + score_contribution, and a Venice plain-English verdict. Dual input: {repo: 'owner/name'} or {files: [{path, content}, …]}. Optional 'weights' override (each in [0,0.5], proportionally normalized) and 'max_findings' (default 10, cap 50).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "security",
        "production-readiness",
        "audit",
        "ai-safety",
        "prooflayer"
      ],
      "inputSchema": {
        "type": "object"
      },
      "outputProperties": {
        "score": {
          "type": "number",
          "description": "Weighted composite production-readiness score from 0-100 across all 5 Prooflayer component scanners."
        },
        "risk_level": {
          "type": "string",
          "description": "Risk bucket derived from the composite score (e.g. low, medium, high, critical)."
        },
        "production_grade": {
          "type": "string",
          "description": "Deploy verdict: production-ready, needs-review, risky, or do-not-ship."
        },
        "component_scores": {
          "type": "object",
          "description": "Per-scanner sub-scores keyed by component (secrets, migrations, deps, deploy, prompt)."
        },
        "weights_used": {
          "type": "object",
          "description": "Actual weights applied per component after normalization, defaults or caller overrides."
        },
        "findings": {
          "type": "array",
          "description": "Top-N deduped findings sorted by severity and score_contribution, capped by max_findings (default 10)."
        },
        "signals": {
          "type": "object",
          "description": "Raw per-component signal counts and flags (e.g. secrets found, risky migrations, vulnerable deps)."
        },
        "summary": {
          "type": "string",
          "description": "Venice plain-English verdict explaining the grade and the biggest risks to fix before shipping."
        },
        "metadata": {
          "type": "object",
          "description": "Run metadata: repo or file count, components called, latency per scanner, and weights source."
        }
      },
      "url": "https://x402.org/v1/production-readiness-score"
    },
    "prompt-compress": {
      "slug": "prompt-compress",
      "price": "0.005",
      "cluster": "wordmint",
      "description": "Prompt compressor / context shrinker / prompt distiller / cost-cutter for long system prompts. Rewrites a long prompt down to a target ratio of its original length while preserving every instruction, constraint, and example's intent. Drops filler words, redundant repetition, and ceremonial politeness. Powered by Venice mistral-small-3-2-24b.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "prompt-engineering",
        "prompt-optimization",
        "token-reduction",
        "context-compression",
        "cost-optimization",
        "llm-tooling",
        "prompt-compress"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Prompt to compress. Up to 60,000 chars."
          },
          "target_ratio": {
            "type": "number",
            "description": "Target length as a fraction of original. Range [0.1, 1.0]. Default 0.4."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "original": {
          "type": "string",
          "description": "Original long prompt text submitted by the caller, returned verbatim for diff and comparison."
        },
        "compressed": {
          "type": "string",
          "description": "Rewritten shorter prompt preserving every instruction, constraint, and example intent from the original."
        },
        "original_chars": {
          "type": "string",
          "description": "Character count of the original input prompt before compression."
        },
        "compressed_chars": {
          "type": "string",
          "description": "Character count of the compressed output prompt after rewriting."
        },
        "target_ratio": {
          "type": "string",
          "description": "Requested compression ratio (compressed length divided by original length) the caller asked for."
        },
        "actual_ratio": {
          "type": "string",
          "description": "Achieved compression ratio (compressed_chars divided by original_chars) after the rewrite."
        },
        "model": {
          "type": "string",
          "description": "Underlying LLM used to compress the prompt, currently Venice mistral-small-3-2-24b."
        },
        "source": {
          "type": "string",
          "description": "Provider behind the compression model, here Venice."
        }
      },
      "url": "https://x402.org/v1/prompt-compress"
    },
    "prompt-injection-surface": {
      "slug": "prompt-injection-surface",
      "price": "0.03",
      "cluster": "prooflayer",
      "description": "AI prompt injection surface scanner / LLM call-site audit / unsanitized user input in prompts detector / system-message mixing flag / unbounded completion detector / AI app safety scan / pre-deploy AI risk gate. Walks .ts/.tsx/.js/.jsx/.py/.mjs/.cjs source files, locates LLM SDK call sites (anthropic, openai, @ai-sdk/*, google generative), and flags user input flowing into prompts without sanitization, calls without max_tokens caps, system/user prompt mixing, and LLM output used unvalidated in fetch/exec/eval. Returns 0-100 score, per-finding kind/severity/path/line/evidence/recommendation, and a Venice plain-English verdict. Dual input: {repo: 'owner/name'} (tree-walk, capped 500 files) or {files: [{path, content}, …]}.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "security",
        "ai-safety",
        "prompt-injection",
        "llm",
        "prooflayer"
      ],
      "inputSchema": {
        "type": "object"
      },
      "outputProperties": {
        "score": {
          "type": "number",
          "description": "Overall prompt-injection risk score from 0 to 100, with higher meaning more unsafe LLM call sites detected."
        },
        "risk_level": {
          "type": "string",
          "description": "Bucketed verdict like low, medium, high, or critical derived from the score and severity mix."
        },
        "findings": {
          "type": "array",
          "description": "Array of issues with kind, severity, file path, line number, code evidence, and a fix recommendation."
        },
        "signals": {
          "type": "object",
          "description": "Counts of detected patterns: unsanitized user input, missing max_tokens, system/user mixing, unvalidated LLM output sinks."
        },
        "summary": {
          "type": "string",
          "description": "Venice plain-English verdict explaining the top risks and what to fix before deploying the AI app."
        },
        "metadata": {
          "type": "object",
          "description": "Scan metadata including files walked, LLM SDKs detected, repo or files-mode source, and scan duration."
        }
      },
      "url": "https://x402.org/v1/prompt-injection-surface"
    },
    "property-tax": {
      "slug": "property-tax",
      "price": "0.01",
      "cluster": "locale",
      "description": "Property tax lookup. Search a county's open-data assessor dataset by street address or parcel ID and return parcel id, owner, assessed and market value, sqft, year built, zoning, and a permalink to the source portal. Covers NYC PLUTO, SF Assessor Roll, and Cook County (Chicago) — open-data CC0 sources. Same backend as property-tax-assessment under a more search-friendly slug.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "property-tax",
        "parcel-lookup",
        "assessor",
        "real-estate",
        "pluto",
        "cook-county",
        "property-records"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "county": {
            "type": "string",
            "enum": [
              "nyc",
              "sf",
              "chicago"
            ],
            "description": "County slug to search: nyc, sf, or cook (Chicago); selects which open-data assessor dataset to query."
          },
          "address": {
            "type": "string",
            "description": "Street address to match against the county's assessor roll; partial matches allowed."
          },
          "parcel": {
            "type": "string",
            "description": "Parcel ID (BBL for NYC, APN for SF, PIN for Cook) to look up a specific property directly."
          },
          "limit": {
            "type": "number",
            "description": "Maximum number of matching parcels to return; defaults to a small page size."
          }
        },
        "required": [
          "county"
        ]
      },
      "outputProperties": {
        "county": {
          "type": "string",
          "description": "Echoes the county slug that was queried (nyc, sf, or cook)."
        },
        "total": {
          "type": "string",
          "description": "Total count of matching parcels found in the county dataset for the given query."
        },
        "properties": {
          "type": "string",
          "description": "Array of parcel records with id, owner, assessed value, market value, sqft, year built, zoning, and source permalink."
        }
      },
      "url": "https://x402.org/v1/property-tax"
    },
    "property-tax-assessment": {
      "slug": "property-tax-assessment",
      "price": "0.01",
      "cluster": "locale",
      "description": "Property tax assessor lookup (multi-county). NYC PLUTO, SF Assessor Roll, Cook County (Chicago). Returns assessed value, owner, parcel ID, sqft, year built, zoning. Open-data, CC0-licensed.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "property-tax",
        "assessor-lookup",
        "parcel-data",
        "real-estate",
        "pluto",
        "property-records",
        "tax-assessment"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "county": {
            "type": "string",
            "enum": [
              "nyc",
              "sf",
              "chicago"
            ],
            "description": "County dataset to query. 'nyc' = NYC Department of Finance PLUTO, 'sf' = SF Assessor Recorded Sales Roll, 'chicago' = Cook County Assessor."
          },
          "address": {
            "type": "string",
            "description": "Street address to search (e.g. '350 5 AVENUE'). Tokenised against the dataset's address column. Mutually optional with 'parcel'."
          },
          "parcel": {
            "type": "string",
            "description": "Parcel identifier — NYC BBL (10-digit), SF Block-Lot, or Cook County PIN (14-digit). Matches an exact record."
          },
          "limit": {
            "type": "number",
            "description": "Max records to return (1-50). Default 10."
          }
        },
        "required": [
          "county"
        ]
      },
      "outputProperties": {
        "total": {
          "type": "string",
          "description": "Count of matching parcels returned from the assessor roll for the requested address or parcel ID."
        },
        "properties": {
          "type": "string",
          "description": "Array of parcel records with assessed value, owner name, parcel ID, square footage, year built, and zoning."
        }
      },
      "url": "https://x402.org/v1/property-tax-assessment"
    },
    "pubmed-search": {
      "slug": "pubmed-search",
      "price": "0.01",
      "cluster": "web-probe",
      "description": "PubMed biomedical literature search. NIH E-utilities. Returns PMID, title, abstract, authors, journal, MeSH terms, DOI. Federal public.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "biomedical-search",
        "pubmed",
        "literature-search",
        "research-papers",
        "medical-research",
        "ncbi",
        "pmid-lookup"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "PubMed query string. Supports field tags ('cancer[Title]', 'Smith J[Author]'), boolean operators, and MeSH terms."
          },
          "limit": {
            "type": "number",
            "description": "Max papers to return. 1-50. Default 10."
          },
          "date_from": {
            "type": "string",
            "description": "Lower bound on publication date (YYYY/MM/DD or YYYY-MM-DD)."
          },
          "date_to": {
            "type": "string",
            "description": "Upper bound on publication date (YYYY/MM/DD or YYYY-MM-DD)."
          },
          "sort": {
            "type": "string",
            "enum": [
              "relevance",
              "pub_date",
              "first_author"
            ],
            "description": "Result ordering. Default 'relevance'."
          },
          "include_abstract": {
            "type": "boolean",
            "description": "If true (default), include the abstract text per paper. Set false for a smaller, faster response."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "total": {
          "type": "string",
          "description": "Total number of PubMed records matching the query, as reported by NIH E-utilities (string-encoded integer)."
        },
        "returned": {
          "type": "string",
          "description": "Count of PMID results actually included in this response payload (string-encoded integer)."
        }
      },
      "url": "https://x402.org/v1/pubmed-search"
    },
    "pypi-package-risk": {
      "slug": "pypi-package-risk",
      "price": "0.01",
      "cluster": "prooflayer",
      "description": "PyPI package risk score / Python supply-chain scanner. Age, monthly downloads, install-script hooks (cmdclass/setup.py), dependency depth, deprecation, typosquat distance to 50 popular Python packages. Plus LLM risk summary.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "pypi",
        "python",
        "supply-chain",
        "security",
        "risk"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "package_name": {
            "type": "string",
            "description": "PyPI package distribution name (e.g. 'requests', 'django'). Case-insensitive; resolved via pypi.org/pypi/{name}/json."
          },
          "version": {
            "type": "string",
            "description": "Optional specific version (e.g. '2.31.0'). Default: latest stable release."
          }
        },
        "required": [
          "package_name"
        ]
      },
      "outputProperties": {
        "package_name": {
          "type": "string",
          "description": "PyPI package name that was scanned."
        },
        "version": {
          "type": "string",
          "description": "Package version evaluated for the risk score, usually the latest release on PyPI."
        },
        "score": {
          "type": "number",
          "description": "Overall risk score from 0 (safe) to 100 (high risk) combining all supply-chain signals."
        },
        "risk_level": {
          "type": "string",
          "description": "Categorical risk bucket like low, medium, high, or critical derived from the score."
        },
        "summary": {
          "type": "string",
          "description": "LLM-written plain-English risk summary covering the main red flags found in the package."
        },
        "signals": {
          "type": "object",
          "description": "Per-check signals: age, monthly downloads, install-script hooks, dep depth, deprecation, typosquat distance."
        },
        "metadata": {
          "type": "object",
          "description": "PyPI metadata snapshot: author, upload date, homepage, license, project URLs, and release count."
        }
      },
      "url": "https://x402.org/v1/pypi-package-risk"
    },
    "qr-code-decode": {
      "slug": "qr-code-decode",
      "price": "0.002",
      "cluster": "web-probe",
      "description": "QR decoder / QR reader / scan QR from URL / QR code OCR / barcode reader / link extraction from QR. Reads QR codes out of any public image URL (PNG / JPG / GIF / BMP) and returns the decoded text strings. Multiple QR codes in a single image are returned as separate entries. Wraps qrserver.com's free public read-qr-code API (true DIY decode requires canvas, which Workers don't have natively). Returns an empty `codes` array plus a descriptive `note` if the image can't be fetched or no QR is found.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "qr-code",
        "qr-decoder",
        "barcode-reader",
        "image-ocr",
        "link-extraction",
        "qr-scanner"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public http(s) URL of an image containing one or more QR codes. Must be directly fetchable."
          }
        },
        "required": [
          "image_url"
        ]
      },
      "outputProperties": {
        "codes": {
          "type": "string",
          "description": "Array of decoded text strings extracted from QR codes found in the image, one entry per detected code."
        },
        "source": {
          "type": "string",
          "description": "Upstream decoder used (qrserver.com's read-qr-code API) that produced the decoded results."
        }
      },
      "url": "https://x402.org/v1/qr-code-decode"
    },
    "qr-code-generate": {
      "slug": "qr-code-generate",
      "price": "0.001",
      "cluster": "web-probe",
      "description": "QR code generator / QR maker / vCard QR / WiFi QR / URL to QR / SVG QR / PNG QR / customizable error correction. Generates a QR code from arbitrary text — URL, vCard, WiFi join string, plain text — and returns it as a base64-encoded PNG (default) or SVG. Configurable size (64-1024 px), error correction level (L/M/Q/H), quiet-zone margin, and foreground/background hex colors. Pure JS encoder via the qrcode npm package — no upstream API call, deterministic output.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "qr-code",
        "qr-generator",
        "barcode",
        "vcard",
        "wifi-qr",
        "svg",
        "png",
        "qr-encoder"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to encode. Any string up to ~4296 chars (alphanumeric)."
          },
          "format": {
            "type": "string",
            "enum": [
              "png",
              "svg"
            ],
            "description": "Output image format. Default 'png'."
          },
          "size": {
            "type": "number",
            "description": "Image side length in pixels. Range [64, 1024]. Default 256."
          },
          "error_correction": {
            "type": "string",
            "enum": [
              "L",
              "M",
              "Q",
              "H"
            ],
            "description": "Reed-Solomon error-correction level. L=7%, M=15% (default), Q=25%, H=30% redundancy."
          },
          "margin": {
            "type": "number",
            "description": "Quiet-zone margin in modules. Range [0, 20]. Default 4."
          },
          "foreground": {
            "type": "string",
            "description": "QR module color as 6 or 8-digit hex (e.g. '#000000'). Default '#000000'."
          },
          "background": {
            "type": "string",
            "description": "Background color as 6 or 8-digit hex (e.g. '#FFFFFF'). Default '#FFFFFF'."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "format": {
          "type": "string",
          "description": "Output image format returned, either \"png\" (default, base64-encoded) or \"svg\" (XML markup)."
        },
        "size": {
          "type": "string",
          "description": "Pixel dimensions of the square QR image (e.g. \"256x256\"), reflecting the requested size parameter."
        },
        "data_base64": {
          "type": "string",
          "description": "Base64-encoded QR image bytes (PNG) or the raw SVG markup string, depending on the requested format."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the encoded payload, either image/png or image/svg+xml, for direct embedding or decoding."
        },
        "source": {
          "type": "string",
          "description": "Generator identifier, always \"qrcode-npm\" since encoding happens locally with no upstream API call."
        }
      },
      "url": "https://x402.org/v1/qr-code-generate"
    },
    "receipt-ocr": {
      "slug": "receipt-ocr",
      "price": "0.01",
      "cluster": "mediakit",
      "description": "Receipt OCR. Reads any receipt photo and returns a structured JSON object with vendor, address, date, line items (qty / unit_price / total), subtotal, tax, tip, total, and payment method. Vision-LLM powered. Same backend as receipt-parser under a clearer slug for expense + accounting + reimbursement workflows.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "receipt-ocr",
        "ocr",
        "expense-tracking",
        "line-items",
        "mediakit",
        "vision-llm",
        "receipt-parser"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public URL of the receipt photo to parse (JPEG, PNG, or HEIC)."
          },
          "currency_hint": {
            "type": "string",
            "description": "Optional ISO currency code (e.g. USD, EUR) to disambiguate amounts when the receipt is unclear."
          }
        },
        "required": [
          "image_url"
        ]
      },
      "outputProperties": {
        "receipt": {
          "type": "string",
          "description": "Structured JSON with vendor, address, date, line items, subtotal, tax, tip, total, and payment method."
        }
      },
      "url": "https://x402.org/v1/receipt-ocr"
    },
    "receipt-parser": {
      "slug": "receipt-parser",
      "price": "0.01",
      "cluster": "mediakit",
      "description": "Receipt → structured JSON (vendor, address, date, line items with qty/unit_price/total, subtotal, tax, tip, total, payment method). Vision LLM only.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "receipt-parser",
        "ocr",
        "expense-extraction",
        "line-items",
        "vision-llm",
        "structured-json",
        "receipt-ocr"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Public URL of the receipt image (JPEG/PNG) to parse via vision LLM."
          },
          "currency_hint": {
            "type": "string",
            "description": "Optional ISO currency code (e.g., USD, EUR) to disambiguate amounts when the receipt is unclear."
          }
        },
        "required": [
          "image_url"
        ]
      },
      "outputProperties": {
        "receipt": {
          "type": "string",
          "description": "Structured JSON string with vendor, address, date, line items (qty/unit_price/total), subtotal, tax, tip, total, payment method."
        }
      },
      "url": "https://x402.org/v1/receipt-parser"
    },
    "regex-from-prompt": {
      "slug": "regex-from-prompt",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "Regex generator / NL to regex / pattern builder. PCRE / JavaScript / Python / Go / RE2. Returns pattern + flags + explanation + 3-6 test examples. Live-runs JS regex on sample_text.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "regex",
        "developer",
        "ai",
        "pattern"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Natural-language description of the pattern to generate, e.g. 'match US phone numbers with optional country code'."
          },
          "flavor": {
            "type": "string",
            "enum": [
              "pcre",
              "javascript",
              "python",
              "go",
              "re2"
            ],
            "description": "Target regex flavor: pcre, javascript, python, or go (RE2)."
          },
          "sample_text": {
            "type": "string",
            "description": "If provided, regex is run live (JS only)."
          },
          "flags": {
            "type": "string",
            "description": "Optional flags to apply, e.g. 'gi' or 'ims'; defaults inferred from prompt if omitted."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "pattern": {
          "type": "string",
          "description": "Generated regex pattern body, without delimiters, ready to drop into the chosen flavor."
        },
        "flags": {
          "type": "string",
          "description": "Flag string applied to the pattern, e.g. 'gi', 'm', or empty if none."
        },
        "flavor": {
          "type": "string",
          "description": "Regex flavor the pattern targets: pcre, javascript, python, or go."
        },
        "explanation": {
          "type": "string",
          "description": "Plain-English breakdown of what each part of the pattern matches."
        },
        "test_examples": {
          "type": "array",
          "description": "3-6 sample strings labeled match or no-match showing intended behavior."
        },
        "caveats": {
          "type": "array",
          "description": "Known edge cases, flavor-specific gotchas, or inputs the pattern won't handle."
        },
        "live_matches": {
          "type": "array",
          "description": "Actual matches found when the JS pattern is run against sample_text, with indices and captures."
        },
        "live_error": {
          "type": "string",
          "description": "Error message if the JS regex failed to compile or execute against sample_text."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the LLM used to generate the pattern, e.g. claude-haiku-4-5."
        }
      },
      "url": "https://x402.org/v1/regex-from-prompt"
    },
    "remove-bg": {
      "slug": "remove-bg",
      "price": "0.08",
      "cluster": "synthforge",
      "description": "AI background remover / background eraser / cutout tool. Returns transparent PNG. Optional crop_to_bbox. fal.ai imageutils/rembg.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "FAL_KEY"
      ],
      "tags": [
        "background",
        "rembg",
        "image",
        "remove",
        "transparent"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "Source image URL to remove the background from; returns a transparent PNG cutout of the foreground subject."
          },
          "crop_to_bbox": {
            "type": "boolean",
            "description": "Default false."
          }
        },
        "required": [
          "image_url"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "URL of the resulting transparent PNG with the background removed."
        },
        "width": {
          "type": "number",
          "description": "Width of the output PNG in pixels."
        },
        "height": {
          "type": "number",
          "description": "Height of the output PNG in pixels."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the returned PNG file in bytes."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the returned image, typically image/png."
        },
        "crop_to_bbox": {
          "type": "boolean",
          "description": "Whether the output was cropped to the subject's bounding box rather than keeping original canvas dimensions."
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input image_url that was processed."
        }
      },
      "url": "https://x402.org/v1/remove-bg"
    },
    "resume-scorer": {
      "slug": "resume-scorer",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "AI resume scorer / ATS keyword analyzer. Scores resume vs. job description (0-100 fit), with calibrated subscores: keyword match, experience, skills, formatting, impact. Ranked improvement suggestions.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "resume",
        "ats",
        "job-match",
        "scoring",
        "recruiting"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "resume": {
            "type": "string",
            "description": "Resume text. Max 18,000 characters."
          },
          "job_description": {
            "type": "string",
            "description": "Target job description text. Max 8,000 characters."
          }
        },
        "required": [
          "resume",
          "job_description"
        ]
      },
      "outputProperties": {
        "score": {
          "type": "object",
          "description": "Structured scoring report including overall_score, verdict, summary, subscores, matched_keywords, missing_keywords, strengths, gaps, and improvements."
        },
        "model": {
          "type": "string",
          "description": "Model used for scoring."
        },
        "resume_chars": {
          "type": "number",
          "description": "Resume character count."
        },
        "jd_chars": {
          "type": "number",
          "description": "Job description character count."
        }
      },
      "url": "https://x402.org/v1/resume-scorer"
    },
    "retrieval-rerank": {
      "slug": "retrieval-rerank",
      "price": "0.005",
      "cluster": "wordmint",
      "description": "Retrieval reranker / RAG reranker / document scoring / top-k filter / cross-encoder substitute. Given a query and up to 30 candidate documents, scores each 0-100 for query relevance using Venice qwen3-5-35b-a3b in JSON-mode and returns sorted top-k. Useful as a second-stage reranker on top of cheap vector retrieval.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "rag",
        "reranker",
        "retrieval",
        "document-scoring",
        "top-k",
        "cross-encoder"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search query."
          },
          "documents": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Candidate documents. Up to 30; each up to 2,000 chars (truncated)."
          },
          "top_k": {
            "type": "number",
            "description": "How many top documents to return. Default min(5, len(documents))."
          }
        },
        "required": [
          "query",
          "documents"
        ]
      },
      "outputProperties": {
        "query": {
          "type": "string",
          "description": "Echo of the original query string the documents were scored against."
        },
        "ranked": {
          "type": "string",
          "description": "Array of {index, score, document} objects sorted by relevance score descending, length up to top_k."
        },
        "doc_count": {
          "type": "string",
          "description": "Number of candidate documents submitted in the request before reranking."
        },
        "top_k": {
          "type": "string",
          "description": "Number of top-scored documents returned in the ranked array."
        },
        "model": {
          "type": "string",
          "description": "Venice model ID used for scoring, typically qwen3-5-35b-a3b in JSON mode."
        },
        "source": {
          "type": "string",
          "description": "Upstream provider tag identifying where the reranking inference ran, e.g. 'venice'."
        }
      },
      "url": "https://x402.org/v1/retrieval-rerank"
    },
    "reverse-geocode": {
      "slug": "reverse-geocode",
      "price": "0.02",
      "cluster": "locale",
      "description": "Reverse geocoder / lat-lng-to-address. Coords → structured address (road, city, state, postcode, country). Powered by OpenStreetMap Nominatim.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "geocode",
        "reverse",
        "location",
        "maps",
        "osm"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "Latitude in decimal degrees. Range -90 to 90."
          },
          "longitude": {
            "type": "number",
            "description": "Longitude in decimal degrees. Range -180 to 180."
          },
          "zoom": {
            "type": "number",
            "description": "3 (country) → 18 (building). Default 17."
          }
        },
        "required": [
          "latitude",
          "longitude"
        ]
      },
      "outputProperties": {
        "latitude": {
          "type": "number",
          "description": "Echoed latitude of the queried point in decimal degrees."
        },
        "longitude": {
          "type": "number",
          "description": "Echoed longitude of the queried point in decimal degrees."
        },
        "zoom": {
          "type": "number",
          "description": "Nominatim zoom level controlling address granularity (3=country, 18=building)."
        },
        "display_name": {
          "type": "string",
          "description": "Full human-readable address string joined from the address components."
        },
        "address": {
          "type": "object",
          "description": "Structured address parts: road, house_number, city, state, postcode, country, country_code."
        },
        "name": {
          "type": "string",
          "description": "Local name of the matched place, when Nominatim has one distinct from the full address."
        },
        "type": {
          "type": "string",
          "description": "OSM feature type of the match (e.g. residential, city, house, restaurant)."
        },
        "class": {
          "type": "string",
          "description": "OSM feature class of the match (e.g. highway, place, building, amenity)."
        },
        "importance": {
          "type": "number",
          "description": "Nominatim importance score from 0 to 1 ranking the match's prominence."
        },
        "bounding_box": {
          "type": "array",
          "description": "[south, north, west, east] lat/lng bounds of the matched feature."
        },
        "osm_id": {
          "type": "number",
          "description": "OpenStreetMap object ID of the matched feature."
        },
        "place_id": {
          "type": "number",
          "description": "Nominatim internal place identifier for the matched feature."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source for the lookup, here \"nominatim\" (OpenStreetMap)."
        }
      },
      "url": "https://x402.org/v1/reverse-geocode"
    },
    "rewrite-tone": {
      "slug": "rewrite-tone",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "Tone rewriter / paraphraser / writing style changer. 12 tones: formal, casual, friendly, confident, empathetic, concise, playful, persuasive, apologetic, technical, simple, enthusiastic. Audience + length controls.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "rewrite",
        "tone",
        "writing",
        "ai"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text to rewrite in the requested tone."
          },
          "tone": {
            "type": "string",
            "description": "Target tone: formal, casual, friendly, confident, empathetic, concise, playful, persuasive, apologetic, technical, simple, or enthusiastic."
          },
          "target_audience": {
            "type": "string",
            "description": "Intended reader (e.g. executives, customers, engineers) used to guide vocabulary and framing."
          },
          "target_length": {
            "type": "string",
            "enum": [
              "shorter",
              "same",
              "longer"
            ],
            "description": "Desired output length: shorter, same, or longer than the input."
          }
        },
        "required": [
          "text",
          "tone"
        ]
      },
      "outputProperties": {
        "text": {
          "type": "string",
          "description": "Rewritten text in the requested tone, audience, and length."
        },
        "tone": {
          "type": "string",
          "description": "Tone applied to the rewrite, echoed from the request."
        },
        "target_audience": {
          "type": "string",
          "description": "Audience used to shape the rewrite, echoed from the request."
        },
        "target_length": {
          "type": "string",
          "description": "Length target applied to the rewrite, echoed from the request."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the submitted source text."
        },
        "output_chars": {
          "type": "number",
          "description": "Character count of the rewritten text."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the LLM that produced the rewrite."
        }
      },
      "url": "https://x402.org/v1/rewrite-tone"
    },
    "rss-from-anything": {
      "slug": "rss-from-anything",
      "price": "0.04",
      "cluster": "web-probe",
      "description": "RSS feed generator / HTML to RSS converter. Auto-detects article items on any HTML page, OR pass CSS selectors. RSS 2.0 output. For sites that don't publish a feed.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "rss",
        "feed",
        "scrape",
        "monitor",
        "html"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Page URL to fetch and convert into an RSS 2.0 feed."
          },
          "feed_title": {
            "type": "string",
            "description": "Override channel title. Default page title."
          },
          "item_selector": {
            "type": "string",
            "description": "Selector for each item. If omitted, auto-detection runs."
          },
          "title_selector": {
            "type": "string",
            "description": "Optional CSS selector for item titles; overrides auto-detection."
          },
          "link_selector": {
            "type": "string",
            "description": "Optional CSS selector for item links; overrides auto-detection."
          },
          "date_selector": {
            "type": "string",
            "description": "Optional CSS selector for item publish dates; overrides auto-detection."
          },
          "description_selector": {
            "type": "string",
            "description": "Optional CSS selector for item descriptions or summaries; overrides auto-detection."
          },
          "max_items": {
            "type": "number",
            "description": "Default 50, max 200."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "rss": {
          "type": "string",
          "description": "RSS 2.0 XML document as a string, ready to serve or save as .xml."
        },
        "mime_type": {
          "type": "string",
          "description": "MIME type for the rss payload, typically application/rss+xml."
        },
        "feed_title": {
          "type": "string",
          "description": "Channel title derived from the source page's <title> or heading."
        },
        "feed_link": {
          "type": "string",
          "description": "Canonical link back to the source page used as the feed's channel link."
        },
        "feed_description": {
          "type": "string",
          "description": "Channel description derived from the page meta description or first paragraph."
        },
        "item_count": {
          "type": "number",
          "description": "Number of items extracted and included in the feed."
        },
        "items": {
          "type": "array",
          "description": "Array of parsed feed items with title, link, pubDate, and description fields."
        },
        "mode": {
          "type": "string",
          "description": "Extraction mode used: 'auto' for heuristic detection or 'selectors' when CSS selectors were supplied."
        }
      },
      "url": "https://x402.org/v1/rss-from-anything"
    },
    "safe-multisig-status": {
      "slug": "safe-multisig-status",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Safe multisig status / Gnosis Safe info / Safe owners / Safe threshold / Safe pending queue / DAO treasury wallet / Safe wallet lookup. Reads a Safe (Gnosis Safe) multisig's on-chain state — owners[], threshold, nonce, version, master copy, fallback handler, guard — via batched eth_call on Base / Ethereum / Arbitrum / Optimism / Polygon (no key, no gas). Also fetches pending (unexecuted) transactions from the Safe Transaction Service. DAO/treasury agents need this constantly to verify multisig config + watch the execution queue.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "safe",
        "gnosis-safe",
        "multisig",
        "dao",
        "treasury",
        "onchain"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Safe contract address (0x + 40 hex)."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "arbitrum",
              "optimism",
              "polygon"
            ],
            "description": "Chain to query. Default 'base'."
          },
          "pending_limit": {
            "type": "number",
            "description": "Max pending tx to return (0-50). Default 10. 0 skips the Safe TX Service call."
          }
        },
        "required": [
          "address"
        ]
      },
      "outputProperties": {
        "address": {
          "type": "string",
          "description": "Checksummed Safe contract address that was queried."
        },
        "chain": {
          "type": "string",
          "description": "Chain name the Safe lives on (base, ethereum, arbitrum, optimism, polygon)."
        },
        "network": {
          "type": "string",
          "description": "Network identifier or chain ID used for the eth_call batch."
        },
        "threshold": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Number of owner signatures required to execute a Safe transaction."
        },
        "owners": {
          "type": "array",
          "description": "Array of owner addresses authorized to sign Safe transactions."
        },
        "nonce": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Current Safe nonce — the index of the next transaction to execute."
        },
        "version": {
          "type": [
            "string",
            "null"
          ],
          "description": "Safe contract version string (e.g. 1.3.0, 1.4.1) reported on-chain."
        },
        "master_copy": {
          "type": [
            "string",
            "null"
          ],
          "description": "Address of the Safe singleton/implementation contract the proxy delegates to."
        },
        "fallback_handler": {
          "type": [
            "string",
            "null"
          ],
          "description": "Address of the configured fallback handler contract, or null if none set."
        },
        "guard": {
          "type": [
            "string",
            "null"
          ],
          "description": "Address of the configured transaction guard contract, or null if no guard is set."
        },
        "pending_transactions": {
          "type": "array",
          "description": "Array of unexecuted transactions from the Safe Transaction Service queue."
        },
        "pending_count": {
          "type": "integer",
          "description": "Count of pending (unexecuted) transactions waiting in the Safe queue."
        },
        "rpc_used": {
          "type": "string",
          "description": "RPC endpoint URL that served the batched eth_call for Safe on-chain state."
        },
        "safe_api_used": {
          "type": [
            "string",
            "null"
          ],
          "description": "Safe Transaction Service base URL queried for pending transactions, or null if skipped."
        },
        "source": {
          "type": "string",
          "description": "Identifier for where the data came from (on-chain eth_call + Safe Transaction Service)."
        },
        "attribution": {
          "type": "string",
          "description": "Credit string naming the upstream data sources (Safe contracts + Safe Transaction Service)."
        }
      },
      "url": "https://x402.org/v1/safe-multisig-status"
    },
    "safe-tx-decode": {
      "slug": "safe-tx-decode",
      "price": "0.003",
      "cluster": "edge-market",
      "description": "Gnosis Safe execTransaction decoder. Decodes a Safe multisig tx hash or raw calldata into target/value/data/operation/gas/signers. Auto-decodes inner MultiSend batches.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "gnosis-safe",
        "multisig",
        "transaction-decoder",
        "calldata",
        "multisend",
        "exectransaction"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "tx_hash": {
            "type": "string",
            "description": "Safe transaction hash to look up and decode via on-chain execTransaction call data."
          },
          "calldata": {
            "type": "string",
            "description": "Raw execTransaction calldata hex string to decode directly without an on-chain lookup."
          },
          "chain": {
            "type": "string",
            "description": "Chain name or ID where the Safe lives (e.g. ethereum, base, 1, 8453) for RPC routing."
          },
          "to": {
            "type": "string",
            "description": "Safe contract address; pairs with tx_hash or calldata to scope the decode to that multisig."
          }
        }
      },
      "outputProperties": {
        "is_multisend": {
          "type": "string",
          "description": "True if the decoded call targets the MultiSend contract and was unpacked into inner sub-transactions."
        },
        "multisend_op_count": {
          "type": "string",
          "description": "Number of inner operations unpacked from the MultiSend batch, or 0 when not a MultiSend."
        }
      },
      "url": "https://x402.org/v1/safe-tx-decode"
    },
    "satellite-address": {
      "slug": "satellite-address",
      "price": "0.01",
      "cluster": "locale",
      "description": "Address to satellite image / one-call address → cloud-free Sentinel-2 thumbnail / postal-code satellite snapshot / place-name to space view. Composes OpenStreetMap Nominatim geocoding with the Sentinel Hub Processing API: caller sends a free-form address and gets back both the geocoded address metadata and a recent cloud-free Sentinel-2 PNG centered on the best match. Optional NASA GIBS MODIS fallback for regional views. JSON output contains: { query, geocode_result, lat, lon, zoom, bbox, data_base64, license, attribution, ... }.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "satellite-imagery",
        "geocoding",
        "sentinel-2",
        "address-lookup",
        "aerial-view",
        "cloud-free-imagery"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Free-form address, postal code, place name, or POI. Examples: '1600 Amphitheatre Parkway, Mountain View, CA', 'Brandenburg Gate', '94110'."
          },
          "zoom": {
            "type": "number",
            "description": "Slippy-map zoom level. 1-16. Default 15 (street/block scale)."
          },
          "size": {
            "type": "number",
            "description": "Output image side length in pixels. 64-2500. Default 512."
          },
          "source": {
            "type": "string",
            "enum": [
              "cdse",
              "gibs"
            ],
            "description": "'cdse' (default, Sentinel-2 10m) or 'gibs' (NASA MODIS ~250m, zoom ≤9 only)."
          },
          "days_back": {
            "type": "number",
            "description": "CDSE lookback window for least-cloudy mosaic in days. 7-180. Default 30."
          }
        },
        "required": [
          "address"
        ]
      },
      "outputProperties": {
        "source": {
          "type": "string",
          "description": "Imagery provider used for this response, typically sentinel-hub or nasa-gibs fallback."
        },
        "query": {
          "type": "string",
          "description": "Original free-form address or place-name string the caller submitted for geocoding."
        },
        "geocode_result": {
          "type": "string",
          "description": "Nominatim match metadata including display name, address components, and OSM type/id."
        },
        "lat": {
          "type": "string",
          "description": "Latitude in decimal degrees of the geocoded match center used to frame the satellite tile."
        },
        "lon": {
          "type": "string",
          "description": "Longitude in decimal degrees of the geocoded match center used to frame the satellite tile."
        },
        "zoom": {
          "type": "string",
          "description": "Effective zoom level used when computing the bounding box around the geocoded point."
        },
        "size": {
          "type": "string",
          "description": "Pixel dimensions of the returned PNG, typically given as width x height."
        },
        "bbox": {
          "type": "string",
          "description": "Bounding box [minLon, minLat, maxLon, maxLat] of the area rendered in the image."
        },
        "time_range": {
          "type": "string",
          "description": "Acquisition window queried against Sentinel-2 to pick the most recent cloud-free scene."
        },
        "format": {
          "type": "string",
          "description": "Image format of the rendered tile, typically png."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the embedded image payload, typically image/png."
        },
        "data_base64": {
          "type": "string",
          "description": "Base64-encoded bytes of the cloud-free Sentinel-2 PNG centered on the matched address."
        },
        "bytes": {
          "type": "string",
          "description": "Decoded byte length of the returned image payload."
        },
        "license": {
          "type": "string",
          "description": "License terms covering the imagery and geocoding data, e.g. Copernicus Sentinel and ODbL."
        },
        "attribution": {
          "type": "string",
          "description": "Required attribution string crediting Sentinel Hub, Copernicus, and OpenStreetMap contributors."
        }
      },
      "url": "https://x402.org/v1/satellite-address"
    },
    "satellite-bbox": {
      "slug": "satellite-bbox",
      "price": "0.02",
      "cluster": "locale",
      "description": "Bounding-box satellite composite / Sentinel-2 cloud-free mosaic / region satellite snapshot / arbitrary bbox to imagery. Returns a single PNG composite over an arbitrary lat/lon bounding box, sourced from the least-cloudy Sentinel-2 observation per pixel across the requested date range (mosaickingOrder=leastCC). Output dimensions auto-scale to bbox aspect ratio. Native 10m resolution. Bbox area capped at 4 sq-deg per call — larger regions should be stitched from multiple calls. JSON output includes { bbox, time_range, size, data_base64, license, attribution, ... }.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "satellite-imagery",
        "sentinel-2",
        "bbox",
        "cloud-free-mosaic",
        "remote-sensing",
        "geospatial",
        "satellite-bbox"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "bbox": {
            "type": "array",
            "description": "[west, south, east, north] in WGS84 lon/lat. Required. west<east, south<north, area ≤ 4 sq-deg."
          },
          "date": {
            "type": "string",
            "description": "End date of the lookback window in YYYY-MM-DD. Default = yesterday."
          },
          "days": {
            "type": "number",
            "description": "Lookback window in days. 7-180. Default 30. Mosaic uses least-cloudy pixel across the window."
          },
          "size": {
            "type": "number",
            "description": "Output image LONG-side length in pixels. 64-2500. Default 512. Short side scales by bbox aspect."
          },
          "max_cloud_coverage": {
            "type": "number",
            "description": "Per-scene max cloud cover percentage to include. 0-100. Default 30."
          }
        },
        "required": [
          "bbox"
        ]
      },
      "outputProperties": {
        "source": {
          "type": "string",
          "description": "Upstream imagery provider identifier, e.g. \"sentinel-2-l2a\" via Sentinel Hub Process API."
        },
        "bbox": {
          "type": "string",
          "description": "Echoed bounding box as \"minLon,minLat,maxLon,maxLat\" in WGS84 (EPSG:4326) decimal degrees."
        },
        "time_range": {
          "type": "string",
          "description": "Date window queried for observations, as \"YYYY-MM-DD/YYYY-MM-DD\" (start/end inclusive)."
        },
        "max_cloud_coverage": {
          "type": "string",
          "description": "Per-scene cloud-cover ceiling applied when selecting Sentinel-2 tiles, as a percent string (e.g. \"20\")."
        },
        "size": {
          "type": "string",
          "description": "Output PNG pixel dimensions as \"WIDTHxHEIGHT\", auto-scaled to the bbox aspect ratio at ~10m native resolution."
        },
        "format": {
          "type": "string",
          "description": "Image container format of the returned composite, always \"png\" for this endpoint."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the decoded data_base64 payload, \"image/png\"."
        },
        "data_base64": {
          "type": "string",
          "description": "Base64-encoded PNG bytes of the least-cloudy Sentinel-2 mosaic over the requested bbox and date range."
        },
        "bytes": {
          "type": "string",
          "description": "Decoded size of the PNG payload in bytes (length of data_base64 after base64 decoding)."
        },
        "license": {
          "type": "string",
          "description": "License governing reuse of the imagery, e.g. Copernicus Sentinel data terms (CC BY-SA-like attribution)."
        },
        "attribution": {
          "type": "string",
          "description": "Required attribution string to display with the image, crediting Copernicus / ESA Sentinel-2."
        }
      },
      "url": "https://x402.org/v1/satellite-bbox"
    },
    "satellite-change": {
      "slug": "satellite-change",
      "price": "0.05",
      "cluster": "locale",
      "description": "Satellite before/after / change detection / Sentinel-2 time-series diff / construction monitoring / deforestation tracker / fire-burn-scar imagery. Renders two cloud-free Sentinel-2 composites of the same bounding box anchored at two dates, each averaged over the window_days prior. Returns both base64 PNGs side-by-side so clients can display, animate, or pixel-diff them. Use cases: construction-site progress, vegetation change, wildfire burn scars, port/parking-lot activity, glacier retreat. Native 10m. Bbox area ≤ 4 sq-deg.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "satellite-imagery",
        "sentinel-2",
        "change-detection",
        "time-series",
        "construction-monitoring",
        "deforestation",
        "burn-scar",
        "before-after"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "bbox": {
            "type": "array",
            "description": "[west, south, east, north] in WGS84 lon/lat. west<east, south<north, area ≤ 4 sq-deg."
          },
          "date_a": {
            "type": "string",
            "description": "Anchor date for the BEFORE composite, YYYY-MM-DD. Must be earlier than date_b."
          },
          "date_b": {
            "type": "string",
            "description": "Anchor date for the AFTER composite, YYYY-MM-DD."
          },
          "window_days": {
            "type": "number",
            "description": "Days prior to each anchor used to build the cloud-free composite. 7-90. Default 30."
          },
          "size": {
            "type": "number",
            "description": "Output image LONG-side length in pixels. 64-2500. Default 512. Short side scales by aspect."
          },
          "max_cloud_coverage": {
            "type": "number",
            "description": "Per-scene max cloud cover percentage. 0-100. Default 30."
          }
        },
        "required": [
          "bbox",
          "date_a",
          "date_b"
        ]
      },
      "outputProperties": {
        "source": {
          "type": "string",
          "description": "Imagery provider used for both composites, typically Sentinel-2 L2A via the configured STAC backend."
        },
        "bbox": {
          "type": "string",
          "description": "Echoed bounding box as minLon,minLat,maxLon,maxLat in WGS84 degrees covering the scene area."
        },
        "window_days": {
          "type": "string",
          "description": "Number of days prior to each anchor date averaged into a cloud-free composite."
        },
        "max_cloud_coverage": {
          "type": "string",
          "description": "Maximum per-scene cloud percentage allowed when selecting tiles for each composite."
        },
        "size": {
          "type": "string",
          "description": "Rendered pixel dimensions of each PNG as widthxheight at native 10m sampling."
        },
        "format": {
          "type": "string",
          "description": "Image encoding of the two composites, always png for this endpoint."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the embedded image payloads, image/png."
        },
        "before": {
          "type": "string",
          "description": "Base64-encoded PNG of the earlier composite anchored at the before date."
        },
        "after": {
          "type": "string",
          "description": "Base64-encoded PNG of the later composite anchored at the after date."
        },
        "license": {
          "type": "string",
          "description": "Sentinel-2 data license string, typically CC BY-SA 3.0 IGO for Copernicus imagery."
        },
        "attribution": {
          "type": "string",
          "description": "Required attribution string crediting Copernicus Sentinel data and the processing source."
        }
      },
      "url": "https://x402.org/v1/satellite-change"
    },
    "satellite-tile": {
      "slug": "satellite-tile",
      "price": "0.005",
      "cluster": "locale",
      "description": "Satellite imagery tile / lat-lon to satellite PNG / Sentinel-2 tile API / cloud-free satellite snapshot / agent-callable satellite imagery. Returns a recent cloud-free Sentinel-2 (10m) PNG centered on a lat/lon at a slippy-map zoom level. Default source: CDSE Sentinel Hub Processing API with mosaickingOrder=leastCC over the prior 30 days (configurable via days_back). Optional NASA GIBS MODIS Terra (~250m) source for regional zoom ≤9 with zero quota. Output is JSON: { source, lat, lon, zoom, bbox, data_base64, license, attribution, ... }. License: Copernicus open data (CC BY-SA 3.0 IGO) or NASA public domain; attribution string included in every response.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "satellite-imagery",
        "sentinel-2",
        "map-tile",
        "geospatial",
        "lat-lon",
        "cloud-free",
        "slippy-map"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "lat": {
            "type": "number",
            "description": "Latitude in decimal degrees. Range [-90, 90]."
          },
          "lon": {
            "type": "number",
            "description": "Longitude in decimal degrees. Range [-180, 180]."
          },
          "zoom": {
            "type": "number",
            "description": "Slippy-map zoom level. 1-16. Default 14 (city block scale). MODIS/GIBS supports ≤9 only."
          },
          "size": {
            "type": "number",
            "description": "Output image side length in pixels. 64-2500. Default 512."
          },
          "source": {
            "type": "string",
            "enum": [
              "cdse",
              "gibs"
            ],
            "description": "Imagery source. 'cdse' (default, Sentinel-2 10m) or 'gibs' (NASA MODIS Terra ~250m, no quota, zoom ≤9 only)."
          },
          "days_back": {
            "type": "number",
            "description": "CDSE only: lookback window for least-cloudy mosaic in days. 7-180. Default 30."
          }
        },
        "required": [
          "lat",
          "lon"
        ]
      },
      "outputProperties": {
        "source": {
          "type": "string",
          "description": "Imagery provider used for this tile, either CDSE Sentinel-2 or NASA GIBS MODIS Terra."
        },
        "lat": {
          "type": "string",
          "description": "Latitude of the tile center in decimal degrees, echoed back from the request."
        },
        "lon": {
          "type": "string",
          "description": "Longitude of the tile center in decimal degrees, echoed back from the request."
        },
        "zoom": {
          "type": "string",
          "description": "Slippy-map zoom level used to compute the tile bounding box."
        },
        "size": {
          "type": "string",
          "description": "Pixel dimensions of the returned PNG, typically expressed as widthxheight."
        },
        "bbox": {
          "type": "string",
          "description": "Geographic bounding box of the tile as [minLon, minLat, maxLon, maxLat] in WGS84 degrees."
        },
        "time_range": {
          "type": "string",
          "description": "Date window searched for cloud-free imagery, e.g. last 30 days ending at request time."
        },
        "format": {
          "type": "string",
          "description": "Image file format of the returned tile, typically png."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the encoded image payload, typically image/png."
        },
        "data_base64": {
          "type": "string",
          "description": "Base64-encoded PNG bytes of the cloud-free satellite tile."
        },
        "bytes": {
          "type": "string",
          "description": "Decoded size of the PNG payload in bytes."
        },
        "license": {
          "type": "string",
          "description": "License covering the imagery, Copernicus CC BY-SA 3.0 IGO or NASA public domain."
        },
        "attribution": {
          "type": "string",
          "description": "Required attribution string to display alongside the imagery."
        }
      },
      "url": "https://x402.org/v1/satellite-tile"
    },
    "scrape": {
      "slug": "scrape",
      "price": "0.04",
      "cluster": "web-probe",
      "description": "Web scraper / HTML extractor. Title, OG/Twitter meta, body in text/HTML/markdown, optional links. Cheerio-based.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "scrape",
        "fetch",
        "html",
        "extract",
        "metadata",
        "url"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Public http/https URL to scrape."
          },
          "format": {
            "type": "string",
            "enum": [
              "text",
              "html",
              "markdown"
            ],
            "description": "'text' (default), 'html', or 'markdown'."
          },
          "include_links": {
            "type": "boolean",
            "description": "Include array of unique links found on the page (max 500). Default false."
          },
          "user_agent": {
            "type": "string",
            "description": "Override the User-Agent header."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "url": {
          "type": "string",
          "description": "Final URL fetched after following redirects."
        },
        "final_url": {
          "type": "string",
          "description": "Final URL after redirects."
        },
        "status_code": {
          "type": "number",
          "description": "HTTP status code returned by the upstream server."
        },
        "title": {
          "type": "string",
          "description": "Page title from the <title> tag."
        },
        "description": {
          "type": "string",
          "description": "Meta description from the page's <meta name=\"description\"> or OG description tag."
        },
        "canonical": {
          "type": "string",
          "description": "Canonical URL from <link rel=\"canonical\"> when present."
        },
        "lang": {
          "type": "string",
          "description": "Language code from the <html lang> attribute, like en or fr."
        },
        "h1": {
          "type": "string",
          "description": "Text of the first <h1> heading on the page."
        },
        "og": {
          "type": "object",
          "description": "All og:* meta tags."
        },
        "twitter": {
          "type": "object",
          "description": "All twitter:* meta tags."
        },
        "text": {
          "type": "string",
          "description": "Body when format=text."
        },
        "html": {
          "type": "string",
          "description": "Body when format=html."
        },
        "markdown": {
          "type": "string",
          "description": "Body when format=markdown."
        },
        "format": {
          "type": "string",
          "description": "Output format of the body content: text, html, or markdown."
        },
        "links": {
          "type": "array",
          "description": "Array of {href, text} when include_links=true."
        },
        "body_chars": {
          "type": "number",
          "description": "Character count of the extracted body content."
        }
      },
      "url": "https://x402.org/v1/scrape"
    },
    "scrape-website": {
      "slug": "scrape-website",
      "price": "0.04",
      "cluster": "web-probe",
      "description": "Web scraper / HTML to text / website content extractor. Returns title, OG/Twitter meta, body in text/HTML/markdown. Optional links. Cheerio-based — fast, no headless browser.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "scrape",
        "fetch",
        "html",
        "extract",
        "metadata",
        "url"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Public http/https URL to scrape."
          },
          "format": {
            "type": "string",
            "enum": [
              "text",
              "html",
              "markdown"
            ],
            "description": "'text' (default), 'html', or 'markdown'."
          },
          "include_links": {
            "type": "boolean",
            "description": "Include array of unique links found on the page (max 500). Default false."
          },
          "user_agent": {
            "type": "string",
            "description": "Override the User-Agent header."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "url": {
          "type": "string",
          "description": "Final URL fetched after following redirects from the requested page."
        },
        "final_url": {
          "type": "string",
          "description": "Final URL after redirects."
        },
        "status_code": {
          "type": "number",
          "description": "HTTP status code returned by the target server for the scrape request."
        },
        "title": {
          "type": "string",
          "description": "Page title pulled from the <title> tag or og:title fallback."
        },
        "description": {
          "type": "string",
          "description": "Meta description from the page's description, og:description, or twitter:description tag."
        },
        "canonical": {
          "type": "string",
          "description": "Canonical URL declared by the page's <link rel=\"canonical\"> tag."
        },
        "lang": {
          "type": "string",
          "description": "Language code from the <html lang=\"...\"> attribute (e.g. en, es)."
        },
        "h1": {
          "type": "string",
          "description": "Text content of the page's first <h1> heading."
        },
        "og": {
          "type": "object",
          "description": "All og:* meta tags."
        },
        "twitter": {
          "type": "object",
          "description": "All twitter:* meta tags."
        },
        "text": {
          "type": "string",
          "description": "Body when format=text."
        },
        "html": {
          "type": "string",
          "description": "Body when format=html."
        },
        "markdown": {
          "type": "string",
          "description": "Body when format=markdown."
        },
        "format": {
          "type": "string",
          "description": "Body format returned: text, html, or markdown depending on the requested format param."
        },
        "links": {
          "type": "array",
          "description": "Array of {href, text} when include_links=true."
        },
        "body_chars": {
          "type": "number",
          "description": "Character count of the extracted body content in the chosen format."
        }
      },
      "url": "https://x402.org/v1/scrape-website"
    },
    "screenshot": {
      "slug": "screenshot",
      "price": "0.04",
      "cluster": "web-probe",
      "description": "Website screenshot / URL to PNG/JPG. Configurable viewport, retina, crop/fit, transparent BG, JPG quality, JS wait conditions.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "screenshot",
        "url",
        "png",
        "jpg",
        "render",
        "capture"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Public http/https URL."
          },
          "format": {
            "type": "string",
            "description": "'png' (default) or 'jpg'."
          },
          "screen_width": {
            "type": "number",
            "description": "Viewport width 320-3840. Default 1440."
          },
          "screen_height": {
            "type": "number",
            "description": "Viewport height 240-4320."
          },
          "device_scale_factor": {
            "type": "number",
            "description": "1-4 (retina). Default 1."
          },
          "width": {
            "type": "number",
            "description": "Final image width 1-8000."
          },
          "height": {
            "type": "number",
            "description": "Final image height 1-8000."
          },
          "fit": {
            "type": "string",
            "description": "'max' (default), 'crop', or 'scale'."
          },
          "quality": {
            "type": "number",
            "description": "JPG quality 1-100."
          },
          "transparent_background": {
            "type": "boolean",
            "description": "PNG only. Default false."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Public URL where the rendered PNG or JPG screenshot can be downloaded."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the generated screenshot file in bytes."
        },
        "format": {
          "type": "string",
          "description": "Output image format actually produced, either png or jpg."
        },
        "source_url": {
          "type": "string",
          "description": "Original page URL that was captured, echoed back from the request."
        },
        "job_id": {
          "type": "string",
          "description": "Unique render job identifier for tracing or re-fetching this screenshot."
        }
      },
      "url": "https://x402.org/v1/screenshot"
    },
    "sec-filing": {
      "slug": "sec-filing",
      "price": "0.01",
      "cluster": "edge-finance",
      "description": "SEC EDGAR filing fetcher + parser + summarizer. 10-K, 10-Q, 8-K, S-1, S-4, DEF 14A, 4, 13F-HR. Returns structured filing metadata, clean text, and optional Venice executive summary tuned to the form type. 100% public-domain SEC data.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "sec",
        "edgar",
        "10-k",
        "10-q",
        "8-k",
        "s-1",
        "filings",
        "annual-report",
        "earnings",
        "finance",
        "stocks",
        "ipo",
        "due-diligence"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string",
            "description": "US stock ticker (e.g. 'AAPL'). Either ticker or cik required."
          },
          "cik": {
            "type": "string",
            "description": "SEC Central Index Key (10-digit, with or without leading zeros)."
          },
          "form_type": {
            "type": "string",
            "description": "Filing type to fetch. Default '10-K'. Supports '10-K', '10-Q', '8-K', 'S-1', 'DEF 14A', '4', '13F-HR'."
          },
          "limit": {
            "type": "number",
            "description": "Max filings to return (1-20). Default 5."
          },
          "summarize": {
            "type": "boolean",
            "description": "If true, run latest filing through Venice for an executive summary tuned to the form type."
          },
          "include_text": {
            "type": "boolean",
            "description": "If true, return full clean-text body of the latest filing (capped at 200k chars)."
          }
        }
      },
      "outputProperties": {
        "ticker": {
          "type": "string",
          "description": "Stock ticker symbol resolved for the company (e.g., AAPL, MSFT), uppercase."
        },
        "cik": {
          "type": "string",
          "description": "SEC Central Index Key, the 10-digit zero-padded identifier EDGAR uses for the filer."
        },
        "company_name": {
          "type": "string",
          "description": "Registrant's legal name as recorded on the filing."
        },
        "form_type": {
          "type": "string",
          "description": "EDGAR form code returned (10-K, 10-Q, 8-K, S-1, S-4, DEF 14A, 4, or 13F-HR)."
        },
        "filings": {
          "type": "array",
          "description": "List of matching filings with accession number, filing date, period, and document URLs."
        },
        "summary": {
          "type": "object",
          "description": "Optional Venice-generated executive summary object with key sections tuned to the form type."
        },
        "text": {
          "type": "string",
          "description": "Cleaned plain-text body of the filing with HTML, XBRL tags, and boilerplate stripped."
        },
        "text_chars": {
          "type": "number",
          "description": "Character count of the cleaned text field, useful for token budgeting downstream."
        }
      },
      "url": "https://x402.org/v1/sec-filing"
    },
    "secrets-exposure-check": {
      "slug": "secrets-exposure-check",
      "price": "0.02",
      "cluster": "prooflayer",
      "description": "secrets exposure scan / hardcoded API key detector / .env-committed-key audit / Next.js client env leak detector / pre-deploy secret gate. Fetches top-level config files (.env*, wrangler.toml, vercel.json, next.config.*, package.json, etc.) and scans for hardcoded AWS/OpenAI/Anthropic/Stripe/GitHub keys, private keys, DB URLs with passwords, JWT secrets, weak values in .env.example, and server-only env vars accidentally exposed via NEXT_PUBLIC_. Returns 0-100 score, per-finding kind/severity/path/line/redacted-evidence/recommendation, and a Venice plain-English verdict. Dual input: {repo: 'owner/name'} for public GitHub or {files: [{path, content}, …]} for private / agent-workspace use.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "security",
        "secrets",
        "env",
        "hardcoded-keys",
        "prooflayer"
      ],
      "inputSchema": {
        "type": "object"
      },
      "outputProperties": {
        "score": {
          "type": "number",
          "description": "0-100 secrets-exposure score; higher means more or more severe hardcoded keys and leaks found."
        },
        "risk_level": {
          "type": "string",
          "description": "Bucketed verdict (e.g. low/medium/high/critical) derived from the score and worst-finding severity."
        },
        "findings": {
          "type": "array",
          "description": "Array of detected leaks, each with kind, severity, path, line, redacted evidence, and a recommendation."
        },
        "signals": {
          "type": "object",
          "description": "Per-category counts and flags (AWS, OpenAI, Stripe, private keys, NEXT_PUBLIC leaks, weak .env.example, etc.)."
        },
        "summary": {
          "type": "string",
          "description": "Venice-generated plain-English verdict explaining the worst leaks and what to rotate or fix before deploy."
        },
        "metadata": {
          "type": "object",
          "description": "Scan metadata: repo or file count, files scanned, bytes, timings, and model/version used for the verdict."
        }
      },
      "url": "https://x402.org/v1/secrets-exposure-check"
    },
    "seedance-video": {
      "slug": "seedance-video",
      "price": "0.20",
      "cluster": "synthforge",
      "description": "Seedance 2.0 / Seedance 2.0 video generation / Seedance video AI / generative AI video / text-to-video AI / cinematic AI clips on AI Gateway. Powered by Venice's seedance-2-0-fast-text-to-video model. Duration / aspect-ratio / resolution configurable. Same backend as text-to-video under a model-named slug for direct discovery by agents searching for 'Seedance'.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "seedance",
        "video",
        "text-to-video",
        "ai",
        "generative",
        "venice"
      ],
      "aliasOf": "text-to-video",
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Video scene description."
          },
          "duration": {
            "type": "string",
            "description": "Clip length, e.g. '5s' or '10s'. Default '5s'."
          },
          "aspect_ratio": {
            "type": "string",
            "description": "Aspect ratio: '16:9', '9:16', '1:1', '4:3'. Default '16:9'."
          },
          "resolution": {
            "type": "string",
            "description": "Video resolution: '720p', '480p'. Default '720p'."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Default 'seedance-2-0-fast-text-to-video'."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "video_url": {
          "type": "string",
          "description": "URL to the generated MP4 clip from Venice's seedance-2-0-fast-text-to-video model."
        },
        "duration": {
          "type": "string",
          "description": "Clip length in seconds as configured for the generation request."
        },
        "aspect_ratio": {
          "type": "string",
          "description": "Frame aspect ratio of the output clip (e.g. 16:9, 9:16, 1:1)."
        },
        "resolution": {
          "type": "string",
          "description": "Output video resolution label (e.g. 720p, 1080p) for the rendered clip."
        },
        "model": {
          "type": "string",
          "description": "Venice model slug used, typically seedance-2-0-fast-text-to-video."
        },
        "prompt": {
          "type": "string",
          "description": "Text prompt echoed back that drove the Seedance video generation."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Upstream Venice AI Gateway request ID for tracing this generation."
        },
        "source": {
          "type": "string",
          "description": "Upstream backend identifier, typically venice, indicating which provider rendered the clip."
        }
      },
      "url": "https://x402.org/v1/seedance-video"
    },
    "semantic-chunk": {
      "slug": "semantic-chunk",
      "price": "0.002",
      "cluster": "wordmint",
      "description": "Semantic chunker / text splitter / RAG chunker / chunking with overlap / sentence + paragraph aware. Splits long text into chunks with three modes: 'fixed' (hard char-count windows with overlap), 'sentence' (greedy pack of sentences up to chunk_size), 'paragraph' (split on blank lines, never pack across paragraphs). Returns each chunk's text, start/end character offsets, and char count. Pure local — no upstream call.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "text-splitter",
        "rag-chunking",
        "sentence-aware",
        "paragraph-aware",
        "chunk-overlap",
        "semantic-chunker"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to split. Up to 1,000,000 chars."
          },
          "chunk_size": {
            "type": "number",
            "description": "Target chunk size in characters. Range [50, 20000]. Default 500."
          },
          "overlap": {
            "type": "number",
            "description": "Overlap between chunks in characters. Default 50. Capped at chunk_size - 1."
          },
          "mode": {
            "type": "string",
            "enum": [
              "fixed",
              "sentence",
              "paragraph"
            ],
            "description": "Splitting strategy. Default 'fixed'."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "chunks": {
          "type": "string",
          "description": "Array of chunk objects, each with text, start offset, end offset, and char count."
        },
        "chunk_count": {
          "type": "string",
          "description": "Number of chunks produced from the input text."
        },
        "mode": {
          "type": "string",
          "description": "Chunking mode used: 'fixed', 'sentence', or 'paragraph'."
        },
        "chunk_size": {
          "type": "string",
          "description": "Target maximum character size per chunk as applied."
        },
        "overlap": {
          "type": "string",
          "description": "Character overlap between adjacent chunks (fixed mode) or 0 otherwise."
        },
        "text_chars": {
          "type": "string",
          "description": "Total character length of the input text before chunking."
        },
        "source": {
          "type": "string",
          "description": "Identifier for the chunker, e.g. 'semantic-chunk' / local splitter tag."
        }
      },
      "url": "https://x402.org/v1/semantic-chunk"
    },
    "sentiment": {
      "slug": "sentiment",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "Sentiment + emotion analyzer. Overall sentiment + score (-1..+1) + per-emotion (joy/anger/sadness/fear/surprise/disgust). Aspect-based optional.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "sentiment",
        "emotion",
        "nlp",
        "ai"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to analyze for sentiment and emotion (typically a sentence, paragraph, or short document)."
          },
          "aspects": {
            "type": "array",
            "description": "Up to 15 noun phrases for aspect-based scoring."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "overall_sentiment": {
          "type": "string",
          "description": "Overall sentiment label for the input text, such as positive, negative, neutral, or mixed."
        },
        "overall_score": {
          "type": "number",
          "description": "Signed sentiment score from -1 (most negative) to +1 (most positive) for the full input."
        },
        "confidence": {
          "type": "number",
          "description": "Model confidence in the overall sentiment classification, from 0 to 1."
        },
        "summary": {
          "type": "string",
          "description": "Short natural-language summary of the sentiment and emotional tone detected in the text."
        },
        "emotions": {
          "type": "object",
          "description": "Per-emotion scores covering joy, anger, sadness, fear, surprise, and disgust (each 0..1)."
        },
        "aspects": {
          "type": "object",
          "description": "Optional aspect-based breakdown mapping extracted aspects or topics to their own sentiment scores."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the submitted text, used for size accounting."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the underlying model that produced the sentiment and emotion analysis."
        }
      },
      "url": "https://x402.org/v1/sentiment"
    },
    "sentiment-analysis": {
      "slug": "sentiment-analysis",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "Sentiment analyzer / emotion classifier / aspect-based sentiment. Overall sentiment + score (-1 to +1) + per-emotion (joy/anger/sadness/fear/surprise/disgust). Optional aspect-based scoring.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "sentiment",
        "emotion",
        "nlp",
        "ai"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to analyze for sentiment, emotion, and optional aspect-based scoring."
          },
          "aspects": {
            "type": "array",
            "description": "Up to 15 noun phrases for aspect-based scoring."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "overall_sentiment": {
          "type": "string",
          "description": "Overall sentiment label such as positive, negative, neutral, or mixed."
        },
        "overall_score": {
          "type": "number",
          "description": "Overall sentiment score from -1 (most negative) to +1 (most positive)."
        },
        "confidence": {
          "type": "number",
          "description": "Confidence in the overall sentiment classification, from 0 to 1."
        },
        "summary": {
          "type": "string",
          "description": "Short natural-language summary of the sentiment and key emotional tone in the text."
        },
        "emotions": {
          "type": "object",
          "description": "Per-emotion scores for joy, anger, sadness, fear, surprise, and disgust."
        },
        "aspects": {
          "type": "object",
          "description": "Aspect-based sentiment scores, mapping each detected aspect or topic to its sentiment."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the input text that was analyzed."
        },
        "model": {
          "type": "string",
          "description": "Model identifier used to produce the sentiment and emotion classification."
        }
      },
      "url": "https://x402.org/v1/sentiment-analysis"
    },
    "sitemap-fetch": {
      "slug": "sitemap-fetch",
      "price": "0.005",
      "cluster": "web-probe",
      "description": "Sitemap fetcher / sitemap.xml parser / sitemap index resolver / SEO sitemap reader / robots.txt sitemap discovery / website URL inventory. Accepts a site root (will discover sitemap via robots.txt or /sitemap.xml convention) OR a direct sitemap.xml URL. Recurses through sitemap-index nesting. Returns the URL list with lastmod / changefreq / priority and aggregate stats (count, oldest/newest lastmod). Useful for SEO audits, content-freshness monitoring, RAG ingestion seeding.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "sitemap",
        "seo",
        "crawler",
        "robots-txt",
        "url-inventory",
        "sitemap-xml"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Site root (e.g. https://example.com) or direct sitemap URL."
          },
          "limit": {
            "type": "number",
            "description": "Max URL rows. 1-5000. Default 1000."
          },
          "recurse": {
            "type": "boolean",
            "description": "Recurse into sitemap-index children. Default true."
          },
          "user_agent": {
            "type": "string",
            "description": "Optional User-Agent header."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "input_url": {
          "type": "string",
          "description": "Site root or sitemap URL the caller passed in, echoed back for reference."
        },
        "sitemaps_fetched": {
          "type": "string",
          "description": "List of sitemap URLs actually retrieved, including nested sitemap-index children that were resolved."
        },
        "url_count": {
          "type": "string",
          "description": "Total number of URL entries found across all fetched sitemaps after recursion."
        },
        "urls": {
          "type": "string",
          "description": "Array of URL entries with loc, lastmod, changefreq, and priority fields parsed from the sitemap XML."
        },
        "lastmod_oldest": {
          "type": "string",
          "description": "Oldest lastmod timestamp seen across all URL entries, useful for content-freshness checks."
        },
        "lastmod_newest": {
          "type": "string",
          "description": "Newest lastmod timestamp seen across all URL entries, indicating most recent site update."
        },
        "truncated": {
          "type": "string",
          "description": "Boolean flag set when the URL list hit an internal cap and not every entry was returned."
        },
        "bytes_total": {
          "type": "string",
          "description": "Total bytes downloaded across every sitemap and sitemap-index file fetched during the call."
        },
        "errors": {
          "type": "string",
          "description": "Array of per-sitemap fetch or parse errors encountered, empty when all sitemaps loaded cleanly."
        }
      },
      "url": "https://x402.org/v1/sitemap-fetch"
    },
    "sound-effect-generate": {
      "slug": "sound-effect-generate",
      "price": "0.01",
      "cluster": "synthforge",
      "description": "Sound effect generation / text-to-SFX / Foley generator / ElevenLabs sound effects / ambient audio synth. Text-to-SFX via Venice with elevenlabs-sound-effects-v2. Duration 0.5-22 seconds. Returns a permanent fal-hosted audio URL (or Venice-hosted when applicable).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "sound-effects",
        "text-to-sfx",
        "foley",
        "audio-generation",
        "ambient-audio",
        "synthforge",
        "elevenlabs-sfx"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Sound description."
          },
          "duration_seconds": {
            "type": "number",
            "description": "Length in seconds. Range [0.5, 22]. Default 5."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Default 'elevenlabs-sound-effects-v2'."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "audio_url": {
          "type": "string",
          "description": "Permanent URL to the generated sound effect file, hosted on fal.media or Venice depending on backend."
        },
        "duration_seconds": {
          "type": "string",
          "description": "Length of the generated audio clip in seconds, between 0.5 and 22."
        },
        "model": {
          "type": "string",
          "description": "Model identifier used for synthesis, typically elevenlabs-sound-effects-v2 via Venice."
        },
        "prompt": {
          "type": "string",
          "description": "Text prompt describing the sound effect or Foley that was generated."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Venice API request identifier for the generation call, useful for support and debugging."
        },
        "source": {
          "type": "string",
          "description": "Backend provider that produced the audio, such as venice or fal."
        }
      },
      "url": "https://x402.org/v1/sound-effect-generate"
    },
    "speaker-diarize": {
      "slug": "speaker-diarize",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "Speaker diarization / who-said-what transcription. Whisper v3 + speaker labels. Returns utterances grouped by speaker, plus per-speaker stats (count, seconds, words). 60 min max.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "FAL_KEY_TRANSCRIBE"
      ],
      "tags": [
        "transcription",
        "diarization",
        "speakers",
        "whisper",
        "podcast",
        "meeting"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "media_url": {
            "type": "string",
            "description": "Public URL to the audio or video file to transcribe and diarize (mp3, mp4, wav, m4a, etc., up to 60 min)."
          },
          "language": {
            "type": "string",
            "description": "Optional ISO-639-1 language hint (e.g. 'en', 'es'); omit to auto-detect from the audio."
          },
          "num_speakers": {
            "type": "number",
            "description": "1-20 hint. Auto-detected if omitted."
          }
        },
        "required": [
          "media_url"
        ]
      },
      "outputProperties": {
        "text": {
          "type": "string",
          "description": "Full transcript as a single string with all speaker turns concatenated in chronological order."
        },
        "utterances": {
          "type": "array",
          "description": "Array of speaker turns, each with speaker label, start/end timestamps, and the spoken text."
        },
        "speaker_count": {
          "type": "number",
          "description": "Number of distinct speakers detected in the audio."
        },
        "speaker_stats": {
          "type": "array",
          "description": "Per-speaker rollup with speaker label, utterance count, total seconds spoken, and word count."
        },
        "duration_seconds": {
          "type": "number",
          "description": "Total length of the input media in seconds."
        },
        "detected_languages": {
          "type": "array",
          "description": "Array of ISO-639-1 language codes Whisper detected across the audio."
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the media_url that was transcribed, for request/response correlation."
        }
      },
      "url": "https://x402.org/v1/speaker-diarize"
    },
    "split-pdf": {
      "slug": "split-pdf",
      "price": "0.04",
      "cluster": "mediakit",
      "description": "PDF splitter / PDF page extractor / split PDF by range / PDF to multiple files. Split a PDF by page ranges into multiple PDFs. CloudConvert engine.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "pdf",
        "mediakit",
        "pdf-splitter",
        "split-pdf",
        "page-extraction",
        "pdf-pages",
        "cloudconvert"
      ],
      "aliasOf": "pdf-split",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pdf_url": {
            "type": "string",
            "description": "HTTPS URL of the source PDF to split into multiple files."
          },
          "ranges": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of page range strings like '1-3' or '5,7-9' defining each output PDF's pages."
          },
          "split_each_page": {
            "type": "boolean",
            "description": "If true, splits the PDF so every page becomes its own separate PDF file."
          }
        },
        "required": [
          "pdf_url"
        ]
      },
      "outputProperties": {
        "pdfs": {
          "type": "string",
          "description": "Array of URLs pointing to the resulting split PDF files hosted by CloudConvert."
        },
        "output_count": {
          "type": "string",
          "description": "Total number of PDF files produced by the split operation."
        }
      },
      "url": "https://x402.org/v1/split-pdf"
    },
    "sports-schedule": {
      "slug": "sports-schedule",
      "price": "0.01",
      "cluster": "locale",
      "description": "Sports schedule / MLB / NBA / NHL / NFL / WNBA / MLS / EPL / La Liga / Bundesliga / Serie A — next games + recent results / sports schedule API / TheSportsDB v1 wrapper. Pass a league code; scope='upcoming' (default) returns the next 15 events with start time, venue, teams. scope='recent' returns last 15 completed games including scores. Single hit to TheSportsDB free tier (no API key, commercial-OK with attribution).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "sports",
        "schedule",
        "games",
        "scores",
        "mlb",
        "nba",
        "nhl",
        "nfl",
        "epl"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "league": {
            "type": "string",
            "enum": [
              "MLB",
              "NBA",
              "NHL",
              "NFL",
              "WNBA",
              "MLS",
              "EPL",
              "LALIGA",
              "BUNDESLIGA",
              "SERIEA"
            ],
            "description": "League code. Case-insensitive."
          },
          "scope": {
            "type": "string",
            "enum": [
              "upcoming",
              "recent"
            ],
            "description": "What to return — next games (default) or last results."
          }
        },
        "required": [
          "league"
        ]
      },
      "outputProperties": {
        "league": {
          "type": "string",
          "description": "League code echoed back (e.g., MLB, NBA, NHL, NFL, WNBA, MLS, EPL, LaLiga, Bundesliga, SerieA)."
        },
        "scope": {
          "type": "string",
          "description": "Either 'upcoming' for next 15 scheduled games or 'recent' for last 15 completed games with scores."
        },
        "events": {
          "type": "array",
          "description": "Array of up to 15 games with teams, start time, venue, and scores when scope is 'recent'."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider, TheSportsDB free tier v1 API."
        },
        "attribution": {
          "type": "string",
          "description": "Required attribution string crediting TheSportsDB per their commercial-use terms."
        }
      },
      "url": "https://x402.org/v1/sports-schedule"
    },
    "sql-from-prompt": {
      "slug": "sql-from-prompt",
      "price": "0.02",
      "cluster": "wordmint",
      "description": "Text to SQL / NL to SQL / AI SQL generator. Postgres, MySQL, SQLite, BigQuery, Snowflake, MSSQL, DuckDB, ANSI. Optional schema. Returns SQL + explanation + tables_referenced + is_destructive + warnings.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "sql",
        "developer",
        "ai",
        "query",
        "database"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Natural-language description of the query you want, e.g. 'top 10 customers by revenue last quarter'."
          },
          "schema": {
            "type": "string",
            "description": "Optional CREATE TABLE / DDL or schema description."
          },
          "dialect": {
            "type": "string",
            "enum": [
              "postgres",
              "mysql",
              "sqlite",
              "bigquery",
              "snowflake",
              "mssql",
              "duckdb",
              "ansi"
            ],
            "description": "Target SQL dialect: postgres, mysql, sqlite, bigquery, snowflake, mssql, duckdb, or ansi."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "sql": {
          "type": "string",
          "description": "Generated SQL query string in the requested dialect, ready to run against your database."
        },
        "dialect": {
          "type": "string",
          "description": "SQL dialect the query was generated for (echoes the input or defaults if none was supplied)."
        },
        "explanation": {
          "type": "string",
          "description": "Plain-English summary of what the SQL does and how it answers the prompt."
        },
        "tables_referenced": {
          "type": "array",
          "description": "Array of table names the generated SQL reads from or writes to."
        },
        "is_destructive": {
          "type": "boolean",
          "description": "True if the SQL contains DELETE, DROP, TRUNCATE, UPDATE, or other mutating statements."
        },
        "warnings": {
          "type": "array",
          "description": "Array of caveats like missing schema info, ambiguous columns, or potentially expensive scans."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the LLM that generated the SQL (e.g. claude-sonnet-4-6)."
        }
      },
      "url": "https://x402.org/v1/sql-from-prompt"
    },
    "ssl-cert": {
      "slug": "ssl-cert",
      "price": "0.03",
      "cluster": "web-probe",
      "description": "SSL certificate inspector / TLS cert checker / certificate transparency lookup / ssl expiry. Issuer, subject, SAN list, validity dates, days-until-expiry. Sourced from Certificate Transparency logs (crt.sh).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "ssl",
        "tls",
        "certificate",
        "cert-expiry",
        "crt-sh",
        "certificate-transparency"
      ],
      "aliasOf": "ssl-cert-info",
      "inputSchema": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string",
            "description": "Hostname to inspect (e.g. example.com); the endpoint queries Certificate Transparency logs for this domain."
          },
          "history": {
            "type": "boolean",
            "description": "When true, returns prior certificates from CT logs in addition to the current active cert."
          }
        },
        "required": [
          "host"
        ]
      },
      "outputProperties": {
        "host": {
          "type": "string",
          "description": "Hostname the certificate was issued for, echoed from the input."
        },
        "issuer_common_name": {
          "type": "string",
          "description": "Common name of the issuing CA (e.g. \"Let's Encrypt Authority X3\", \"DigiCert TLS RSA SHA256\")."
        },
        "days_until_expiry": {
          "type": "string",
          "description": "Days remaining until the certificate's notAfter date; negative if already expired."
        }
      },
      "url": "https://x402.org/v1/ssl-cert"
    },
    "ssl-cert-info": {
      "slug": "ssl-cert-info",
      "price": "0.03",
      "cluster": "web-probe",
      "description": "SSL / TLS certificate inspector. Issuer, subject, SAN list, validity dates, days-until-expiry, expires-soon flag. Sourced from Certificate Transparency logs (crt.sh). Optional cert history.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "ssl",
        "tls",
        "certificate",
        "security",
        "ct-log",
        "expiry"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string",
            "description": "Hostname to inspect (e.g. example.com); SNI used to fetch the active leaf certificate from CT logs."
          },
          "history": {
            "type": "boolean",
            "description": "Include up to 50 historical cert entries. Default false."
          }
        },
        "required": [
          "host"
        ]
      },
      "outputProperties": {
        "host": {
          "type": "string",
          "description": "Echo of the hostname inspected, normalized to lowercase without scheme or port."
        },
        "common_name": {
          "type": "string",
          "description": "Subject Common Name (CN) on the leaf certificate, usually the primary hostname it was issued for."
        },
        "issuer": {
          "type": "string",
          "description": "Full issuer Distinguished Name string, including organization and country fields."
        },
        "issuer_common_name": {
          "type": "string",
          "description": "CN of the issuing CA (e.g. \"Let's Encrypt R3\", \"DigiCert TLS RSA SHA256 2020 CA1\")."
        },
        "san_list": {
          "type": "array",
          "description": "Subject Alternative Names covered by the cert, including wildcard and additional hostnames."
        },
        "san_count": {
          "type": "number",
          "description": "Number of entries in san_list."
        },
        "not_before": {
          "type": "string",
          "description": "ISO-8601 UTC timestamp when the certificate became valid."
        },
        "not_after": {
          "type": "string",
          "description": "ISO-8601 UTC timestamp when the certificate expires."
        },
        "days_until_expiry": {
          "type": "number",
          "description": "Whole days from now until not_after; negative if already expired."
        },
        "days_since_issuance": {
          "type": "number",
          "description": "Whole days elapsed since not_before."
        },
        "is_expired": {
          "type": "boolean",
          "description": "True when the current time is past not_after."
        },
        "expires_soon": {
          "type": "boolean",
          "description": "True when days_until_expiry is at or below the warning threshold (30 days)."
        },
        "serial_number": {
          "type": "string",
          "description": "Hex-encoded certificate serial number as recorded by the issuing CA."
        },
        "crtsh_id": {
          "type": "number",
          "description": "Numeric crt.sh record ID for the leaf cert, usable to link to https://crt.sh/?id=<id>."
        },
        "cert_history": {
          "type": "array",
          "description": "Prior certs seen in CT logs for this host (issuer, not_before, not_after, crtsh_id); empty when not requested."
        },
        "total_certs_seen": {
          "type": "number",
          "description": "Total count of certificates ever logged for this host in Certificate Transparency."
        },
        "source": {
          "type": "string",
          "description": "Data source label, here \"crt.sh\" (Certificate Transparency log aggregator)."
        }
      },
      "url": "https://x402.org/v1/ssl-cert-info"
    },
    "stablecoin-monitor": {
      "slug": "stablecoin-monitor",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Stablecoin monitor. Live prices and basis-point deviation from $1 for USDT, USDC, DAI, FRAX, PYUSD, FDUSD, USDE, RLUSD. Configurable depeg-alert threshold. Wraps the same backend as stablecoin-peg under a clearer slug.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "stablecoin",
        "depeg-alert",
        "peg-deviation",
        "price-feed",
        "usdt-usdc",
        "stablecoin-monitor"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "symbols": {
            "type": "array",
            "description": "Array of stablecoin tickers to query (e.g. USDT, USDC, DAI); defaults to all eight tracked coins when omitted."
          },
          "alert_threshold_bps": {
            "type": "number",
            "description": "Basis-point deviation from $1 above which a coin is flagged in depeg_alert_count (default ~50 bps)."
          }
        }
      },
      "outputProperties": {
        "depeg_alert_count": {
          "type": "string",
          "description": "Number of queried stablecoins whose absolute deviation from $1 exceeds alert_threshold_bps."
        },
        "stablecoins": {
          "type": "string",
          "description": "Per-coin object keyed by symbol with live price, deviation in basis points, and depeg flag."
        }
      },
      "url": "https://x402.org/v1/stablecoin-monitor"
    },
    "stablecoin-peg": {
      "slug": "stablecoin-peg",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Stablecoin peg monitor / depeg detector. Real-time prices for USDT, USDC, DAI, FRAX, PYUSD, FDUSD, USDE, RLUSD. Configurable depeg alert threshold (basis points). Catches USDC's 2023-style depegs in real time.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "crypto",
        "stablecoin",
        "depeg",
        "monitoring",
        "defi"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "symbols": {
            "type": "array",
            "description": "Up to 20 stablecoin symbols. Default: 8 major stables."
          },
          "alert_threshold_bps": {
            "type": "number",
            "description": "Basis points from $1.00 to flag. Default 50 (0.5%)."
          }
        }
      },
      "outputProperties": {
        "stablecoins": {
          "type": "array",
          "description": "Array of per-stablecoin objects with symbol, current USD price, deviation in basis points, and depeg flag."
        },
        "symbols_evaluated": {
          "type": "array",
          "description": "List of stablecoin symbols actually priced this call (subset of USDT, USDC, DAI, FRAX, PYUSD, FDUSD, USDE, RLUSD)."
        },
        "unknown_symbols": {
          "type": "array",
          "description": "Requested symbols the endpoint couldn't price or doesn't recognize."
        },
        "alert_threshold_bps": {
          "type": "number",
          "description": "Depeg alert threshold in basis points used for this call (1 bp = 0.01% off $1.00)."
        },
        "depeg_alert_count": {
          "type": "number",
          "description": "Number of stablecoins whose price deviated from $1.00 by at least alert_threshold_bps."
        },
        "has_any_depeg": {
          "type": "boolean",
          "description": "True if at least one evaluated stablecoin breached the depeg threshold on this call."
        },
        "fetched_at": {
          "type": "string",
          "description": "ISO-8601 UTC timestamp when prices were pulled from the upstream price source."
        },
        "source": {
          "type": "string",
          "description": "Name of the upstream price feed used (e.g. CoinGecko) for the stablecoin quotes."
        }
      },
      "url": "https://x402.org/v1/stablecoin-peg"
    },
    "structured-extract": {
      "slug": "structured-extract",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "Structured-data extractor / JSON-from-text / schema-guided extraction / key-value pull / form-filler. Reads free-form text and emits a JSON object conforming to a user-supplied JSON Schema. Powered by Venice zai-org-glm-4.7 (function-calling-default model) with response_format json_object. Returns the extracted object plus a `validates` flag against the user's schema (basic top-level type and required-key check).",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "text-extraction",
        "json-schema",
        "structured-output",
        "key-value-extraction",
        "form-filler",
        "schema-guided-extraction"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Source text. Up to 30,000 chars."
          },
          "schema": {
            "type": "object",
            "description": "JSON Schema describing the desired output object. The handler relays this to the model and validates the result's top-level shape."
          }
        },
        "required": [
          "text",
          "schema"
        ]
      },
      "outputProperties": {
        "extracted": {
          "type": "string",
          "description": "JSON object pulled from the input text, shaped to match the user-supplied JSON Schema."
        },
        "validates": {
          "type": "string",
          "description": "Boolean flag indicating whether the extracted object passes the top-level type and required-key check."
        },
        "schema": {
          "type": "string",
          "description": "Echo of the JSON Schema the caller supplied to guide the extraction."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the Venice model used for extraction (zai-org-glm-4.7, function-calling-default)."
        },
        "source": {
          "type": "string",
          "description": "Original free-form text the extractor read to produce the structured object."
        }
      },
      "url": "https://x402.org/v1/structured-extract"
    },
    "subdomain-enum": {
      "slug": "subdomain-enum",
      "price": "0.03",
      "cluster": "web-probe",
      "description": "Subdomain enumeration / attack-surface mapping / DNS recon. Certificate Transparency log mining (crt.sh). All-public data. Each subdomain with first-seen, last-seen, cert count.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "security",
        "subdomain",
        "ct-log",
        "recon"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Root domain to enumerate subdomains for (e.g. example.com); no protocol or path."
          },
          "include_wildcards": {
            "type": "boolean",
            "description": "Include *.example.com entries. Default false."
          }
        },
        "required": [
          "domain"
        ]
      },
      "outputProperties": {
        "domain": {
          "type": "string",
          "description": "Echoes the root domain that was enumerated."
        },
        "subdomain_count": {
          "type": "number",
          "description": "Total number of unique subdomains discovered across mined CT log entries."
        },
        "subdomains": {
          "type": "array",
          "description": "Array of subdomain records, each with hostname, first-seen date, last-seen date, and cert count."
        },
        "cert_log_entries_examined": {
          "type": "number",
          "description": "Number of Certificate Transparency log entries scanned from crt.sh for this domain."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source identifier, typically crt.sh for Certificate Transparency log mining."
        },
        "notes": {
          "type": "string",
          "description": "Free-text notes on enumeration coverage, truncation, or caveats about the result set."
        }
      },
      "url": "https://x402.org/v1/subdomain-enum"
    },
    "subtitles": {
      "slug": "subtitles",
      "price": "0.08",
      "cluster": "mediakit",
      "description": "SRT / VTT subtitle generator from video or audio. Whisper v3. Word-wrapped, ready for VLC / Premiere / FFmpeg.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "FAL_KEY_TRANSCRIBE"
      ],
      "tags": [
        "subtitles",
        "srt",
        "vtt",
        "captions",
        "whisper",
        "transcription"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "media_url": {
            "type": "string",
            "description": "Public URL of an audio or video file. mp3, mp4, mpeg, mpga, m4a, wav, webm. Max 60 minutes."
          },
          "format": {
            "type": "string",
            "description": "'srt' (default) or 'vtt'."
          },
          "language": {
            "type": "string",
            "description": "Optional ISO language code. Auto-detected if omitted."
          },
          "task": {
            "type": "string",
            "description": "'transcribe' (default) or 'translate' (translates to English)."
          },
          "max_chars_per_line": {
            "type": "number",
            "description": "Max characters per subtitle line. Default 42. Range 16-120."
          }
        },
        "required": [
          "media_url"
        ]
      },
      "outputProperties": {
        "subtitles": {
          "type": "string",
          "description": "Full subtitle file content as a string."
        },
        "format": {
          "type": "string",
          "description": "Echo of the format used."
        },
        "mime_type": {
          "type": "string",
          "description": "MIME type for the subtitle format ('application/x-subrip' or 'text/vtt')."
        },
        "cue_count": {
          "type": "number",
          "description": "Number of subtitle cues generated."
        },
        "duration_seconds": {
          "type": "number",
          "description": "Source media duration."
        },
        "detected_languages": {
          "type": "array",
          "description": "Languages auto-detected in the audio."
        },
        "task": {
          "type": "string",
          "description": "Echo of the task performed."
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL."
        }
      },
      "url": "https://x402.org/v1/subtitles"
    },
    "summarize": {
      "slug": "summarize",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "AI summarizer / TLDR generator. Compress long text into tldr / bullets / paragraph / executive-summary. 30k char input. Mistral-powered.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "summarize",
        "tldr",
        "executive-summary",
        "ai",
        "llm"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to summarize. Max 30,000 chars."
          },
          "style": {
            "type": "string",
            "description": "'tldr' (default), 'bullets', 'paragraph', or 'executive'."
          },
          "max_words": {
            "type": "number",
            "description": "Optional target length in words (1-1000)."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "summary": {
          "type": "string",
          "description": "Compressed version of the input text in the requested style (tldr, bullets, paragraph, or executive-summary)."
        },
        "style": {
          "type": "string",
          "description": "Summary style applied to the output: tldr, bullets, paragraph, or executive-summary."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the source text submitted for summarization."
        },
        "output_chars": {
          "type": "number",
          "description": "Character count of the generated summary."
        },
        "model": {
          "type": "string",
          "description": "Mistral model identifier that produced the summary."
        }
      },
      "url": "https://x402.org/v1/summarize"
    },
    "summarize-text": {
      "slug": "summarize-text",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "AI text summarizer / TLDR generator. 4 styles: tldr (1-2 sentences), bullets (3-7 points), paragraph, executive (headline + bullets + recommendation). 30k char input. Mistral powered.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "summarize",
        "tldr",
        "executive-summary",
        "ai",
        "llm"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to summarize. Max 30,000 chars."
          },
          "style": {
            "type": "string",
            "enum": [
              "tldr",
              "bullets",
              "paragraph",
              "executive"
            ],
            "description": "'tldr' (default), 'bullets', 'paragraph', or 'executive'."
          },
          "max_words": {
            "type": "number",
            "description": "Optional target length in words (1-1000)."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "summary": {
          "type": "string",
          "description": "Generated summary text in the requested style (tldr, bullets, paragraph, or executive format)."
        },
        "style": {
          "type": "string",
          "description": "Summary style used: tldr, bullets, paragraph, or executive."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the source text submitted for summarization."
        },
        "output_chars": {
          "type": "number",
          "description": "Character count of the generated summary."
        },
        "model": {
          "type": "string",
          "description": "Mistral model identifier that produced the summary."
        }
      },
      "url": "https://x402.org/v1/summarize-text"
    },
    "sunrise-sunset": {
      "slug": "sunrise-sunset",
      "price": "0.002",
      "cluster": "locale",
      "description": "Sunrise sunset times. Returns sunrise, sunset, solar noon, day length, and civil / nautical / astronomical twilight begin and end for any latitude/longitude on any date. Also covers golden-hour and dawn / dusk. Same backend as astro-times under a more search-friendly slug. UTC ISO8601 strings.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "sunrise-sunset",
        "solar-times",
        "twilight",
        "golden-hour",
        "day-length",
        "astronomy",
        "geolocation"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "Latitude in decimal degrees (-90 to 90, positive north) for the location to compute sun times."
          },
          "longitude": {
            "type": "number",
            "description": "Longitude in decimal degrees (-180 to 180, positive east) for the location to compute sun times."
          },
          "date": {
            "type": "string",
            "description": "Calendar date as YYYY-MM-DD for which to compute sunrise, sunset, twilight, and golden-hour times."
          }
        },
        "required": [
          "latitude",
          "longitude"
        ]
      },
      "outputProperties": {
        "date": {
          "type": "string",
          "description": "Echo of the requested YYYY-MM-DD date the returned solar times apply to."
        },
        "times": {
          "type": "string",
          "description": "Object of UTC ISO8601 timestamps: sunrise, sunset, solar noon, day length, twilight phases, golden hour, dawn, dusk."
        },
        "source": {
          "type": "string",
          "description": "Identifier of the solar algorithm or library used to compute the returned times."
        }
      },
      "url": "https://x402.org/v1/sunrise-sunset"
    },
    "tech-stack-detect": {
      "slug": "tech-stack-detect",
      "price": "0.01",
      "cluster": "web-probe",
      "description": "Tech stack detector / website fingerprint / Wappalyzer alternative. Detects WordPress / Shopify / Webflow / Ghost / Next.js / Nuxt / Astro / Gatsby / React / Vue / Vercel / Netlify / Cloudflare / Stripe / Intercom / 50+ more. Header + meta + script + cookie patterns.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "tech-stack",
        "wappalyzer",
        "detect",
        "fingerprint"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Target URL (http or https). Single GET request follows redirects; final_url is reported."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "url": {
          "type": "string",
          "description": "Original URL submitted for tech stack fingerprinting."
        },
        "final_url": {
          "type": "string",
          "description": "Final URL after following any redirects from the original request."
        },
        "status_code": {
          "type": "number",
          "description": "HTTP status code returned by the target site on the final response."
        },
        "detection_count": {
          "type": "number",
          "description": "Number of distinct technologies detected on the page."
        },
        "detections": {
          "type": "array",
          "description": "Array of detected technologies with name, category, and matching signal (header/meta/script/cookie)."
        },
        "by_category": {
          "type": "object",
          "description": "Detections grouped by category like cms, framework, hosting, analytics, payments, or cdn."
        },
        "server_header": {
          "type": "string",
          "description": "Raw value of the Server response header, if the site sent one."
        },
        "powered_by": {
          "type": "string",
          "description": "Raw value of the X-Powered-By response header, if present."
        },
        "content_type": {
          "type": "string",
          "description": "Content-Type header from the final response, typically text/html with charset."
        }
      },
      "url": "https://x402.org/v1/tech-stack-detect"
    },
    "text-classify": {
      "slug": "text-classify",
      "price": "0.005",
      "cluster": "wordmint",
      "description": "Text classifier. Zero-shot classification — caller supplies 2-25 labels and the model picks the best one (or all matching labels in multi-label mode) with calibrated confidence scores and a per-label reason. Same backend as classify-text under a more search-friendly slug. Mistral powered.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "text-classification",
        "zero-shot-classification",
        "nlp",
        "multi-label",
        "intent-detection",
        "mistral",
        "classifier"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Input text to classify against the supplied label set."
          },
          "labels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of 2-25 candidate label strings the classifier picks from."
          },
          "multi_label": {
            "type": "boolean",
            "description": "When true, returns all labels that match instead of a single top pick."
          },
          "label_descriptions": {
            "type": "object",
            "description": "Optional map of label name to a short definition that disambiguates each label for the model."
          }
        },
        "required": [
          "text",
          "labels"
        ]
      },
      "outputProperties": {
        "top_label": {
          "type": "string",
          "description": "Label string with the highest confidence score for the input text."
        }
      },
      "url": "https://x402.org/v1/text-classify"
    },
    "text-embedding": {
      "slug": "text-embedding",
      "price": "0.002",
      "cluster": "wordmint",
      "description": "Text embedding / vector embedding / semantic vector / Venice embeddings / Gemini embeddings / BGE-M3. Embeds 1 to 100 strings via Venice. Tier shorthand: 'default' → gemini-embedding-2-preview (newest, recommended), 'fast' → text-embedding-bge-m3, 'openai-compat' → text-embedding-3-small. You can also pass a full Venice embedding model name. Returns a list of vectors aligned with input order.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "embeddings",
        "text-embedding",
        "vector-embedding",
        "semantic-search",
        "wordmint",
        "gemini-embedding",
        "bge-m3"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "texts": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "1 to 100 strings to embed; each up to 30,000 chars."
          },
          "model": {
            "type": "string",
            "description": "Tier shorthand ('default'|'fast'|'openai-compat') or full Venice embedding model name. Default 'default'."
          }
        },
        "required": [
          "texts"
        ]
      },
      "outputProperties": {
        "embeddings": {
          "type": "string",
          "description": "Array of float vectors, one per input string, in the same order as the input array."
        },
        "count": {
          "type": "string",
          "description": "Number of input strings that were embedded in this call."
        },
        "dimensions": {
          "type": "string",
          "description": "Vector length of each returned embedding (varies by model)."
        },
        "model": {
          "type": "string",
          "description": "Full Venice model name actually used to generate the embeddings."
        },
        "tier": {
          "type": "string",
          "description": "Tier shorthand resolved for this call (default, fast, openai-compat, or the passed model name)."
        },
        "usage": {
          "type": "string",
          "description": "Token usage stats from Venice for this embedding call."
        },
        "source": {
          "type": "string",
          "description": "Upstream provider that produced the vectors (Venice)."
        }
      },
      "url": "https://x402.org/v1/text-embedding"
    },
    "text-normalize": {
      "slug": "text-normalize",
      "price": "0.001",
      "cluster": "wordmint",
      "description": "Text normalize. Unicode NFC / NFD / NFKC / NFKD normalization plus per-codepoint script classification (Latin / Cyrillic / Greek / Hebrew / Arabic / CJK / etc.), homoglyph detection (the Cyrillic 'а' that looks like Latin 'a'), and invisible / RTL / BOM detection. Same backend as unicode-normalize. Pure JS — no upstream API.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "unicode",
        "normalization",
        "homoglyph-detection",
        "script-detection",
        "invisible-characters",
        "nfc-nfkc",
        "text-normalize"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Input text. Up to 100000 chars."
          },
          "form": {
            "type": "string",
            "enum": [
              "NFC",
              "NFD",
              "NFKC",
              "NFKD"
            ],
            "description": "Default 'NFC'."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "normalized": {
          "type": "string",
          "description": "Input string after applying the requested Unicode normalization form (NFC, NFD, NFKC, or NFKD)."
        },
        "form": {
          "type": "string",
          "description": "Normalization form that was applied to the input (one of NFC, NFD, NFKC, NFKD)."
        },
        "scripts_detected": {
          "type": "string",
          "description": "List of Unicode scripts found in the input (e.g. Latin, Cyrillic, Greek, Hebrew, Arabic, CJK)."
        },
        "is_mixed_script": {
          "type": "string",
          "description": "True when the input mixes characters from multiple scripts, a common homoglyph-attack signal."
        }
      },
      "url": "https://x402.org/v1/text-normalize"
    },
    "text-to-speech": {
      "slug": "text-to-speech",
      "price": "0.05",
      "cluster": "synthforge",
      "description": "Text to speech / TTS / voice generator. Venice TTS (Kokoro / xAI / ElevenLabs / Orpheus / MiniMax / Gemini). 30+ voices, 6 audio formats. Returns hosted MP3 URL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY",
        "FAL_KEY"
      ],
      "tags": [
        "tts",
        "speech",
        "audio",
        "voice",
        "ai"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Max 4000 chars."
          },
          "voice": {
            "type": "string",
            "description": "Default 'af_sky'."
          },
          "model": {
            "type": "string",
            "description": "Default 'tts-kokoro'. Other options: tts-xai-v1, tts-elevenlabs-turbo-v2-5, tts-orpheus, etc."
          },
          "speed": {
            "type": "number",
            "description": "0.25-4. Default 1."
          },
          "format": {
            "type": "string",
            "enum": [
              "mp3",
              "wav",
              "opus",
              "aac",
              "flac"
            ],
            "description": "mp3 (default), wav, opus, aac, flac."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "audio_url": {
          "type": "string",
          "description": "Hosted MP3 URL pointing to the generated speech audio file."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the generated MP3 file in bytes."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the audio file, typically audio/mpeg for MP3 output."
        },
        "format": {
          "type": "string",
          "description": "Audio container format returned, one of 6 supported formats (mp3, opus, aac, flac, wav, pcm)."
        },
        "voice": {
          "type": "string",
          "description": "Voice identifier used for synthesis, drawn from the 30+ available voices."
        },
        "model": {
          "type": "string",
          "description": "TTS model that produced the audio (Kokoro, xAI, ElevenLabs, Orpheus, MiniMax, or Gemini)."
        },
        "speed": {
          "type": "number",
          "description": "Playback speed multiplier applied during synthesis, where 1.0 is normal pace."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the input text that was synthesized into speech."
        }
      },
      "url": "https://x402.org/v1/text-to-speech"
    },
    "text-to-video": {
      "slug": "text-to-video",
      "price": "0.20",
      "cluster": "synthforge",
      "description": "Text-to-video / AI video / Seedance / generative video / cinematic clip from prompt. Text-to-video via Venice's seedance-2-0-fast-text-to-video. Duration / aspect-ratio / resolution configurable. The synchronous path has a 22s budget; if Venice can't return inline within that window, the response surfaces a job_id + poll_url for the caller to resolve later.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "synthforge",
        "text-to-video",
        "video-generation",
        "generative-video",
        "ai-video",
        "seedance",
        "prompt-to-video"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Video scene description."
          },
          "duration": {
            "type": "string",
            "description": "Clip length, e.g. '5s' or '10s'. Default '5s'."
          },
          "aspect_ratio": {
            "type": "string",
            "description": "Aspect ratio: '16:9', '9:16', '1:1', '4:3'. Default '16:9'."
          },
          "resolution": {
            "type": "string",
            "description": "Video resolution: '720p', '480p'. Default '720p'."
          },
          "model": {
            "type": "string",
            "description": "Override the model. Default 'seedance-2-0-fast-text-to-video'."
          }
        },
        "required": [
          "prompt"
        ]
      },
      "outputProperties": {
        "video_url": {
          "type": "string",
          "description": "Signed URL to the generated MP4 clip; download before it expires."
        },
        "duration": {
          "type": "string",
          "description": "Clip length in seconds, matching the requested duration parameter."
        },
        "aspect_ratio": {
          "type": "string",
          "description": "Aspect ratio of the rendered video, e.g. 16:9 or 9:16."
        },
        "resolution": {
          "type": "string",
          "description": "Output resolution of the clip, e.g. 720p or 1080p."
        },
        "model": {
          "type": "string",
          "description": "Venice model that produced the clip, typically seedance-2-0-fast-text-to-video."
        },
        "prompt": {
          "type": "string",
          "description": "Text prompt that was sent to Venice to generate the video."
        },
        "venice_request_id": {
          "type": "string",
          "description": "Upstream Venice request ID for tracing or support tickets."
        },
        "source": {
          "type": "string",
          "description": "Origin tag for the result, e.g. venice or cached."
        }
      },
      "url": "https://x402.org/v1/text-to-video"
    },
    "thesaurus": {
      "slug": "thesaurus",
      "price": "0.002",
      "cluster": "wordmint",
      "description": "Thesaurus / synonyms / antonyms / similar words / rhymes / Datamuse / paraphrasing / query expansion. Returns related words for a given input word, configurable across five modes: 'synonyms' (rel_syn), 'antonyms' (rel_ant), 'sounds_like' (homophones / rhymes), 'similar_meaning' (semantically near), or 'related' (commonly co-occurring triggers). Wraps the public Datamuse API — no auth, commercial-OK.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "thesaurus",
        "synonyms",
        "antonyms",
        "rhymes",
        "query-expansion",
        "paraphrasing",
        "datamuse"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "word": {
            "type": "string",
            "description": "Single English word to look up."
          },
          "mode": {
            "type": "string",
            "enum": [
              "synonyms",
              "antonyms",
              "sounds_like",
              "similar_meaning",
              "related"
            ],
            "description": "Relation type. Default 'synonyms'."
          },
          "limit": {
            "type": "number",
            "description": "Max results to return. 1-50. Default 20."
          }
        },
        "required": [
          "word"
        ]
      },
      "outputProperties": {
        "word": {
          "type": "string",
          "description": "Input word that was looked up in the thesaurus."
        },
        "mode": {
          "type": "string",
          "description": "Lookup mode used: synonyms, antonyms, sounds_like, similar_meaning, or related."
        },
        "results": {
          "type": "string",
          "description": "Array of related words returned by Datamuse for the given word and mode, ordered by relevance score."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider, set to 'datamuse' for this endpoint."
        }
      },
      "url": "https://x402.org/v1/thesaurus"
    },
    "timezone-convert": {
      "slug": "timezone-convert",
      "price": "0.001",
      "cluster": "locale",
      "description": "Timezone convert / IANA tz conversion / DST-aware time arithmetic / wall-clock to UTC / convert across cities. Convert a datetime from one IANA timezone to another. ISO-8601 input — bare wall-time strings are interpreted in the from_tz, fully-qualified offsets are honored. DST is handled correctly (uses V8's built-in tzdata via Intl.DateTimeFormat). Returns both formatted strings, both UTC offsets, and the difference in hours.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "timezone",
        "tz-convert",
        "iana-tz",
        "dst",
        "datetime",
        "utc-offset",
        "timezone-conversion"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "datetime": {
            "type": "string",
            "description": "ISO-8601 datetime. With offset (e.g. '2026-05-08T12:00:00-07:00') it's used as-is; without offset (e.g. '2026-05-08T12:00:00') it's interpreted in from_tz."
          },
          "from_tz": {
            "type": "string",
            "description": "IANA timezone for the input wall-time (e.g. 'America/Los_Angeles')."
          },
          "to_tz": {
            "type": "string",
            "description": "IANA timezone for the output (e.g. 'Asia/Tokyo')."
          }
        },
        "required": [
          "datetime",
          "from_tz",
          "to_tz"
        ]
      },
      "outputProperties": {
        "from": {
          "type": "string",
          "description": "Converted datetime formatted in the source IANA timezone with its UTC offset."
        },
        "to": {
          "type": "string",
          "description": "Converted datetime formatted in the target IANA timezone with its UTC offset."
        },
        "utc_iso": {
          "type": "string",
          "description": "Equivalent moment in UTC as an ISO-8601 timestamp with Z suffix."
        },
        "utc_offset_diff_hours": {
          "type": "string",
          "description": "Signed hour difference between the target and source UTC offsets at that instant."
        },
        "source": {
          "type": "string",
          "description": "Identifier of the tzdata source used for the conversion (V8 Intl.DateTimeFormat)."
        }
      },
      "url": "https://x402.org/v1/timezone-convert"
    },
    "timezone-lookup": {
      "slug": "timezone-lookup",
      "price": "0.001",
      "cluster": "locale",
      "description": "Timezone lookup / IANA tz / UTC offset / DST status / local time at lat-lng / which timezone. Resolves the current local time, IANA timezone name, UTC offset (seconds), and DST status either by IANA timezone string (e.g. 'America/Los_Angeles') or by latitude/longitude coordinates. Wraps the public TimeAPI.io endpoint — no auth, commercial-OK.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "timezone",
        "iana-tz",
        "utc-offset",
        "dst",
        "local-time",
        "geo-timezone"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "Decimal degrees, range [-90, 90]. Required if no timezone provided."
          },
          "longitude": {
            "type": "number",
            "description": "Decimal degrees, range [-180, 180]. Required if no timezone provided."
          },
          "timezone": {
            "type": "string",
            "description": "IANA timezone identifier (e.g. 'America/Los_Angeles', 'Europe/Berlin'). Either this or lat+lon required."
          },
          "datetime_utc": {
            "type": "string",
            "description": "Optional UTC datetime to evaluate at (ISO8601). Reserved for future use; current API returns now."
          }
        }
      },
      "outputProperties": {
        "timezone": {
          "type": "string",
          "description": "IANA timezone name resolved for the input, like 'America/Los_Angeles' or 'Europe/Berlin'."
        },
        "utc_offset_seconds": {
          "type": "string",
          "description": "Current offset from UTC in seconds, including any active DST adjustment."
        },
        "abbreviation": {
          "type": "string",
          "description": "Short timezone abbreviation currently in effect, such as PST, PDT, CET, or CEST."
        },
        "is_dst": {
          "type": "string",
          "description": "Boolean flag (as string) indicating whether daylight saving time is currently active at the location."
        },
        "current_local_time": {
          "type": "string",
          "description": "Current wall-clock time at the resolved timezone in ISO 8601 format."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider used for the lookup, typically 'timeapi.io'."
        }
      },
      "url": "https://x402.org/v1/timezone-lookup"
    },
    "tld-info": {
      "slug": "tld-info",
      "price": "0.001",
      "cluster": "web-probe",
      "description": "TLD info / top-level domain registry lookup / ccTLD vs gTLD / TLD introduction year / new gTLD registry. For any top-level domain, returns the registry operator, type (gTLD / ccTLD / sTLD), country (for ccTLDs), introduction year, and notes. In-handler dictionary covers ~80 of the most common TLDs; falls back to a structural guess for unrecognized TLDs.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "domain",
        "tld",
        "registry-lookup",
        "cctld",
        "gtld",
        "tld-info"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "tld": {
            "type": "string",
            "description": "TLD without leading dot (e.g. 'ai', 'com', 'co.uk' uses just 'uk')."
          }
        },
        "required": [
          "tld"
        ]
      },
      "outputProperties": {
        "tld": {
          "type": "string",
          "description": "Top-level domain looked up, normalized to lowercase with leading dot (e.g. .com, .uk, .xyz)."
        },
        "is_valid": {
          "type": "string",
          "description": "Whether the TLD string parsed as a syntactically valid top-level domain label."
        },
        "type": {
          "type": "string",
          "description": "TLD category: gTLD, ccTLD, sTLD, or new-gTLD."
        },
        "registry": {
          "type": "string",
          "description": "Operator running the TLD registry (e.g. Verisign for .com, Nominet for .uk)."
        },
        "country": {
          "type": "string",
          "description": "Country or territory the TLD belongs to, for ccTLDs; null or empty for gTLDs."
        },
        "intro_year": {
          "type": "string",
          "description": "Year the TLD was introduced into the root zone."
        },
        "notes": {
          "type": "string",
          "description": "Short free-text notes on the TLD's usage, restrictions, or notable history."
        },
        "in_dictionary": {
          "type": "string",
          "description": "True if the TLD was found in the in-handler dictionary; false if answered via structural fallback."
        },
        "source": {
          "type": "string",
          "description": "Origin of the answer: dictionary lookup or structural guess from the TLD shape."
        }
      },
      "url": "https://x402.org/v1/tld-info"
    },
    "token-burn-stats": {
      "slug": "token-burn-stats",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Token burn stats / total burned / latest burn tx / burn-as-% supply / supply-burn auditor. Walks all transfers TO the canonical burn addresses (0x0…0 and 0x…dEaD) for any ERC-20 on Ethereum, Base, Polygon, Arbitrum, or Optimism via Etherscan v2 and reports total burned (raw + human), most-recent burn tx + timestamp, count of burn transfers, and burn percentage of total supply.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "token-burn",
        "erc20",
        "burn-address",
        "supply-audit",
        "etherscan",
        "onchain-analytics",
        "edge-market",
        "burn-stats"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "token_address": {
            "type": "string",
            "description": "0x-prefixed 20-byte ERC-20 contract address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'base'."
          }
        },
        "required": [
          "token_address"
        ]
      },
      "outputProperties": {
        "token_address": {
          "type": "string",
          "description": "ERC-20 contract address the burn stats were computed for."
        },
        "chain": {
          "type": "string",
          "description": "EVM chain queried (ethereum, base, polygon, arbitrum, or optimism)."
        },
        "symbol": {
          "type": "string",
          "description": "Token ticker symbol pulled from the ERC-20 contract."
        },
        "decimals": {
          "type": "string",
          "description": "ERC-20 decimals used to convert raw burn amounts into human units."
        },
        "total_burned_raw": {
          "type": "string",
          "description": "Sum of all transfers to burn addresses in base units (no decimal scaling)."
        },
        "total_burned": {
          "type": "string",
          "description": "Total burned amount scaled by token decimals for human display."
        },
        "burn_count": {
          "type": "string",
          "description": "Number of transfer events sent to the canonical burn addresses."
        },
        "last_burn_at": {
          "type": "string",
          "description": "Unix or ISO timestamp of the most recent burn transfer observed."
        },
        "last_burn_tx": {
          "type": "string",
          "description": "Transaction hash of the most recent transfer to a burn address."
        },
        "total_supply": {
          "type": "string",
          "description": "Current ERC-20 total supply reported by the token contract."
        },
        "burn_pct_of_supply": {
          "type": "string",
          "description": "Total burned divided by total supply, expressed as a percentage."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider used to walk transfers (Etherscan v2)."
        }
      },
      "url": "https://x402.org/v1/token-burn-stats"
    },
    "token-count": {
      "slug": "token-count",
      "price": "0.001",
      "cluster": "wordmint",
      "description": "Token count / tokenizer estimate / GPT-4 token count / Claude token count / Gemini token count / context-window pre-flight. Pure-local heuristic estimator targeting cl100k_base / o200k_base (GPT-4o) with calibrated multipliers for Claude and Gemini. Input model name is matched against an internal table of supported tokenizers. Accuracy ±5% versus tiktoken on typical English. No upstream call.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "tokenizer",
        "token-count",
        "context-window",
        "gpt-4",
        "claude-tokens",
        "tiktoken",
        "cl100k"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to count. Up to 1,000,000 chars."
          },
          "model": {
            "type": "string",
            "description": "Target model. Examples: 'gpt-4o' (default), 'claude-sonnet-4-5', 'gemini-2-pro'. Free-form; matched against an internal multiplier table."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "text_chars": {
          "type": "string",
          "description": "Character count of the input text that was tokenized."
        },
        "model": {
          "type": "string",
          "description": "Model name supplied in the request (e.g. gpt-4o, claude-3-5-sonnet, gemini-1.5-pro)."
        },
        "matched_tokenizer": {
          "type": "string",
          "description": "Internal tokenizer family matched to the model (e.g. cl100k_base, o200k_base, claude-approx, gemini-approx)."
        },
        "estimated_tokens": {
          "type": "string",
          "description": "Estimated token count for the input text under the matched tokenizer."
        },
        "accuracy_note": {
          "type": "string",
          "description": "Expected accuracy band versus the official tokenizer, typically within plus or minus 5% on English prose."
        },
        "source": {
          "type": "string",
          "description": "Origin of the estimate; always local-heuristic since no upstream tokenizer API is called."
        }
      },
      "url": "https://x402.org/v1/token-count"
    },
    "token-honeypot": {
      "slug": "token-honeypot",
      "price": "0.05",
      "cluster": "edge-market",
      "description": "EVM token honeypot detection / can-i-sell check / rug-pull scanner / sell-tax simulator / buy-tax simulator / scam token detector / Base honeypot / Ethereum honeypot / BSC honeypot. Simulates a buy + sell of an ERC-20 token via honeypot.is, returning whether the token is a honeypot, the realized buy/sell/transfer tax percentages, max buy/sell amounts (atomic units), proxy/owner contract flags, and a normalized risk level (low/medium/high/critical) with human-readable reasons. Free public API — no auth.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "honeypot-check",
        "rug-pull-scanner",
        "token-safety",
        "sell-tax-simulator",
        "erc20-scanner",
        "scam-detector",
        "honeypot-is"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "token_address": {
            "type": "string",
            "description": "0x-prefixed 20-byte EVM token contract address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "bsc"
            ],
            "description": "EVM chain. Default 'base'."
          }
        },
        "required": [
          "token_address"
        ]
      },
      "outputProperties": {
        "token": {
          "type": "string",
          "description": "ERC-20 contract address that was scanned for honeypot behavior."
        },
        "chain": {
          "type": "string",
          "description": "EVM chain the simulation ran on (e.g. ethereum, base, bsc)."
        },
        "simulation": {
          "type": "string",
          "description": "Buy/sell simulation results including realized tax percentages and max buy/sell amounts in atomic units."
        },
        "contract": {
          "type": "string",
          "description": "Contract flags such as proxy status, owner address, and other ownership/permission attributes."
        },
        "risk": {
          "type": "string",
          "description": "Normalized risk level (low/medium/high/critical) plus human-readable reasons for the rating."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider used for the check (honeypot.is)."
        }
      },
      "url": "https://x402.org/v1/token-honeypot"
    },
    "token-price": {
      "slug": "token-price",
      "price": "0.02",
      "cluster": "edge-market",
      "description": "Crypto token price API / CoinGecko wrapper. Lookup by id (bitcoin), symbol (BTC), or contract address (with chain). USD + native currency, 24h/7d change, market cap, volume, supply, ATH, ATL.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "crypto",
        "price",
        "coingecko",
        "token",
        "web3"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "CoinGecko id ('bitcoin'), symbol ('BTC'), or 0x address."
          },
          "vs_currency": {
            "type": "string",
            "description": "Default 'usd'."
          },
          "chain": {
            "type": "string",
            "description": "For address queries: ethereum, base, arbitrum-one, polygon-pos, etc."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "query": {
          "type": "string",
          "description": "Original lookup string sent in (token id, symbol, or contract address)."
        },
        "resolution": {
          "type": "string",
          "description": "How the query was resolved — by id, symbol, or contract address lookup."
        },
        "coin_id": {
          "type": "string",
          "description": "CoinGecko canonical coin id (e.g. \"bitcoin\", \"ethereum\")."
        },
        "name": {
          "type": "string",
          "description": "Full token name (e.g. \"Bitcoin\", \"USD Coin\")."
        },
        "symbol": {
          "type": "string",
          "description": "Ticker symbol (e.g. \"BTC\", \"USDC\")."
        },
        "image": {
          "type": "string",
          "description": "URL to the token's logo image on CoinGecko."
        },
        "market_cap_rank": {
          "type": "number",
          "description": "Token's rank by market cap across all tracked coins (1 = largest)."
        },
        "vs_currency": {
          "type": "string",
          "description": "Quote currency for price fields (typically \"usd\")."
        },
        "price": {
          "type": "number",
          "description": "Current price of the token in the quote currency."
        },
        "price_change_24h_pct": {
          "type": "number",
          "description": "Percentage price change over the last 24 hours."
        },
        "price_change_7d_pct": {
          "type": "number",
          "description": "Percentage price change over the last 7 days."
        },
        "market_cap": {
          "type": "number",
          "description": "Current market capitalization in the quote currency."
        },
        "total_volume": {
          "type": "number",
          "description": "24-hour trading volume across tracked exchanges in the quote currency."
        },
        "circulating_supply": {
          "type": "number",
          "description": "Number of tokens currently circulating in the market."
        },
        "total_supply": {
          "type": "number",
          "description": "Total tokens that exist (minted minus burned), or null if unknown."
        },
        "max_supply": {
          "type": "number",
          "description": "Hard cap on tokens that can ever exist, or null if uncapped."
        },
        "ath": {
          "type": "object",
          "description": "All-time high price with value, date, and percent change from ATH."
        },
        "atl": {
          "type": "object",
          "description": "All-time low price with value, date, and percent change from ATL."
        },
        "last_updated": {
          "type": "string",
          "description": "ISO 8601 timestamp of when CoinGecko last refreshed this data."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider (e.g. \"coingecko\")."
        }
      },
      "url": "https://x402.org/v1/token-price"
    },
    "token-risk": {
      "slug": "token-risk",
      "price": "0.10",
      "cluster": "edge-market",
      "description": "Token risk score / token security audit / rug-pull score / token safety check. Composite 0-100 score from honeypot.is + GoPlus Security + Etherscan contract age. Subscores: honeypot, taxes, holder concentration, liquidity, contract age, ownership. Verdict: safe / caution / high_risk.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "token-risk",
        "rug-pull",
        "honeypot-detector",
        "contract-audit",
        "holder-concentration",
        "token-safety"
      ],
      "aliasOf": "token-risk-score",
      "inputSchema": {
        "type": "object",
        "properties": {
          "token_address": {
            "type": "string",
            "description": "0x-prefixed 20-byte EVM token contract address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "bsc"
            ],
            "description": "EVM chain. Default 'base'."
          }
        },
        "required": [
          "token_address"
        ]
      },
      "outputProperties": {
        "token": {
          "type": "string",
          "description": "Token contract address that was scored."
        },
        "chain": {
          "type": "string",
          "description": "Chain the token lives on (e.g. ethereum, base, bsc)."
        },
        "score": {
          "type": "string",
          "description": "Composite risk score from 0 (safe) to 100 (high risk)."
        },
        "verdict": {
          "type": "string",
          "description": "Bucketed verdict: safe, caution, or high_risk based on the composite score."
        },
        "subscores": {
          "type": "string",
          "description": "Per-dimension scores for honeypot, taxes, holder concentration, liquidity, contract age, and ownership."
        },
        "warnings": {
          "type": "string",
          "description": "List of specific risk flags triggered (e.g. honeypot detected, high sell tax, concentrated holders)."
        },
        "data_sources": {
          "type": "string",
          "description": "Upstream sources consulted: honeypot.is, GoPlus Security, and Etherscan contract age."
        },
        "source": {
          "type": "string",
          "description": "Origin label for the response (e.g. token-risk worker identifier or cache tag)."
        }
      },
      "url": "https://x402.org/v1/token-risk"
    },
    "token-risk-score": {
      "slug": "token-risk-score",
      "price": "0.10",
      "cluster": "edge-market",
      "description": "Composite EVM token risk score / token security audit / rug-pull score / token safety check / honeypot + tax + holder concentration / GoPlus + honeypot.is composite / Base token vetting / Ethereum token vetting / BSC token vetting. Pulls three independent signals in parallel — honeypot.is (sell simulation + buy/sell tax), GoPlus Security (holder concentration, LP holders + lock, ownership flags, mintable/proxy/hidden-owner detection), and Etherscan v2 contract creation block (for age) — and rolls them up into a 0-100 score (higher = safer) with subscores (honeypot, taxes, holder_concentration, liquidity, contract_age, ownership) and a verdict (safe / caution / high_risk). Each backend failure degrades just that subscore and adds a warning; the rest still computes.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "token-risk",
        "rug-pull",
        "honeypot-detection",
        "contract-audit",
        "holder-concentration",
        "token-safety",
        "goplus"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "token_address": {
            "type": "string",
            "description": "0x-prefixed 20-byte EVM token contract address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "bsc"
            ],
            "description": "EVM chain. Default 'base'."
          }
        },
        "required": [
          "token_address"
        ]
      },
      "outputProperties": {
        "token": {
          "type": "string",
          "description": "EVM token contract address that was scored."
        },
        "chain": {
          "type": "string",
          "description": "Chain the token lives on (ethereum, base, bsc, etc.)."
        },
        "score": {
          "type": "string",
          "description": "Composite 0-100 safety score where higher is safer."
        },
        "verdict": {
          "type": "string",
          "description": "Overall classification: safe, caution, or high_risk."
        },
        "subscores": {
          "type": "string",
          "description": "Per-signal breakdown for honeypot, taxes, holder_concentration, liquidity, contract_age, and ownership."
        },
        "warnings": {
          "type": "string",
          "description": "List of flags raised by any backend, including degraded-subscore notices when a source failed."
        },
        "data_sources": {
          "type": "string",
          "description": "Which backends contributed: honeypot.is, GoPlus Security, and Etherscan v2."
        },
        "source": {
          "type": "string",
          "description": "Identifier for this endpoint (token-risk-score)."
        }
      },
      "url": "https://x402.org/v1/token-risk-score"
    },
    "token-volatility": {
      "slug": "token-volatility",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Token volatility / historical volatility / annualized vol / standard deviation of returns / crypto vol calculator. For any CoinGecko-listed token, computes log-return standard deviation over the last N days (default 30) and annualizes by sqrt(365). Returns daily and annualized volatility as percent, count of return observations, first and last close prices. Backed by CoinGecko's free public market_chart endpoint.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "crypto",
        "volatility",
        "historical-volatility",
        "annualized-volatility",
        "coingecko",
        "price-analytics",
        "token-volatility"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "coingecko_id": {
            "type": "string",
            "description": "CoinGecko coin id (e.g. 'ethereum', 'bitcoin', 'solana'). Lower-case slug, not the symbol."
          },
          "days": {
            "type": "number",
            "description": "Lookback window in days. Range [7, 365]. Default 30."
          }
        },
        "required": [
          "coingecko_id"
        ]
      },
      "outputProperties": {
        "coingecko_id": {
          "type": "string",
          "description": "CoinGecko ID of the token whose volatility was computed (e.g. bitcoin, ethereum)."
        },
        "days": {
          "type": "string",
          "description": "Lookback window in days used for the return series (default 30)."
        },
        "returns_count": {
          "type": "string",
          "description": "Number of daily log-return observations included in the standard deviation calculation."
        },
        "daily_volatility_pct": {
          "type": "string",
          "description": "Standard deviation of daily log returns over the window, expressed as a percent."
        },
        "annualized_volatility_pct": {
          "type": "string",
          "description": "Daily volatility scaled by sqrt(365), expressed as an annualized percent."
        },
        "first_price_usd": {
          "type": "string",
          "description": "Closing USD price at the start of the lookback window."
        },
        "last_price_usd": {
          "type": "string",
          "description": "Closing USD price at the end of the lookback window."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider for the price series (CoinGecko market_chart)."
        }
      },
      "url": "https://x402.org/v1/token-volatility"
    },
    "tool-card-generate": {
      "slug": "tool-card-generate",
      "price": "0.005",
      "cluster": "wordmint",
      "description": "Tool card generator / OpenAI function-calling spec / A2A tool-card / agent tool description. Given a tool name + plain-English description (and optional parameter hints), emits a strict OpenAI/A2A-compatible tool card: { name, description, parameters: <JSON Schema> }. Powered by Venice zai-org-glm-4.7 in json_object mode. Useful for retrofitting LLM-callable tool descriptions onto existing API endpoints.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "tool-card",
        "function-calling",
        "openai-schema",
        "json-schema",
        "a2a",
        "agent-tools",
        "tool-card-generator"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Tool name (1-64 chars, snake_case or kebab-case, starts with a letter)."
          },
          "description": {
            "type": "string",
            "description": "One-sentence description of what the tool does."
          },
          "parameters_hint": {
            "type": "string",
            "description": "Free-form hint about parameters: types, names, what they mean. Optional."
          },
          "example": {
            "type": "string",
            "description": "Optional example invocation."
          }
        },
        "required": [
          "name",
          "description"
        ]
      },
      "outputProperties": {
        "tool_card": {
          "type": "string",
          "description": "JSON string with the generated tool card object containing name, description, and a JSON Schema parameters block."
        },
        "model": {
          "type": "string",
          "description": "Venice model ID used to generate the tool card (zai-org-glm-4.7)."
        },
        "source": {
          "type": "string",
          "description": "Generator identifier indicating the tool card was produced by this endpoint's Venice-backed pipeline."
        }
      },
      "url": "https://x402.org/v1/tool-card-generate"
    },
    "trademark-search": {
      "slug": "trademark-search",
      "price": "0.03",
      "cluster": "edge-finance",
      "description": "Trademark search / USPTO trademark lookup / TSDR / federal trademark database. Look up any US trademark by serial number or registration number. Returns mark text, owner, status, filing date, classes, goods/services. Federal public TSDR API.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "trademark",
        "uspto",
        "tsdr",
        "ip-lookup",
        "brand-clearance",
        "trademark-search"
      ],
      "aliasOf": "uspto-trademark-search",
      "inputSchema": {
        "type": "object",
        "properties": {
          "serial_number": {
            "type": "string",
            "description": "8-digit USPTO serial number (e.g. '78787878')."
          },
          "registration_number": {
            "type": "string",
            "description": "7-digit USPTO registration number (e.g. '3000000')."
          }
        }
      },
      "outputProperties": {
        "found": {
          "type": "string",
          "description": "Boolean-style flag indicating whether a matching USPTO trademark record was located for the queried serial or registration number."
        },
        "mark_text": {
          "type": "string",
          "description": "Literal text of the trademark as registered or applied for with the USPTO."
        },
        "status_category": {
          "type": "string",
          "description": "High-level status bucket for the mark such as live, dead, pending, registered, or abandoned."
        },
        "filing_date": {
          "type": "string",
          "description": "Date the trademark application was filed with the USPTO, typically in ISO YYYY-MM-DD format."
        }
      },
      "url": "https://x402.org/v1/trademark-search"
    },
    "transcribe": {
      "slug": "transcribe",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "Video / audio transcription via Whisper v3. 90+ languages, translate-to-English mode, optional speaker diarization. 60-min max.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "transcription",
        "whisper",
        "video",
        "audio",
        "subtitles"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "media_url": {
            "type": "string",
            "description": "Public URL of an audio or video file. Supports mp3, mp4, mpeg, mpga, m4a, wav, webm. Max 60 minutes."
          },
          "language": {
            "type": "string",
            "description": "Optional ISO language code (e.g. 'en', 'fr', 'es'). If omitted, auto-detected."
          },
          "task": {
            "type": "string",
            "description": "Either 'transcribe' (default) or 'translate' (translates to English)."
          },
          "diarize": {
            "type": "boolean",
            "description": "Whether to identify different speakers. Default false."
          }
        },
        "required": [
          "media_url"
        ]
      },
      "outputProperties": {
        "text": {
          "type": "string",
          "description": "Full transcript text"
        },
        "chunks": {
          "type": "array",
          "description": "Time-segmented chunks with timestamps"
        },
        "detected_languages": {
          "type": "array",
          "description": "Languages auto-detected in the audio"
        },
        "duration_seconds": {
          "type": "number",
          "description": "Source media duration in seconds"
        },
        "task": {
          "type": "string",
          "description": "Echo of the task performed"
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL"
        }
      },
      "url": "https://x402.org/v1/transcribe"
    },
    "translate": {
      "slug": "translate",
      "price": "0.005",
      "cluster": "wordmint",
      "description": "AI translator. 100+ languages. Auto-detect source. ISO codes or names. Native fluency. Preserves Markdown / code / URLs.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "translate",
        "translation",
        "i18n",
        "language",
        "ai"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to translate. Max 12,000 chars."
          },
          "target_language": {
            "type": "string",
            "description": "ISO code or language name (e.g. 'fr', 'Mandarin Chinese')."
          },
          "source_language": {
            "type": "string",
            "description": "Optional. Auto-detected if omitted."
          },
          "formality": {
            "type": "string",
            "description": "'casual', 'formal', or 'neutral' (default)."
          }
        },
        "required": [
          "text",
          "target_language"
        ]
      },
      "outputProperties": {
        "translated_text": {
          "type": "string",
          "description": "Translated string in the target language, with Markdown, code blocks, and URLs preserved from the input."
        },
        "target_language": {
          "type": "string",
          "description": "ISO 639-1 code or language name the text was translated into, as resolved from the request."
        },
        "source_language": {
          "type": "string",
          "description": "ISO 639-1 code or language name of the input, echoed back when explicitly provided in the request."
        },
        "detected_source_language": {
          "type": "string",
          "description": "ISO 639-1 code auto-detected from the input when no source language was supplied."
        },
        "formality": {
          "type": "string",
          "description": "Tone applied to the translation, such as formal, informal, or default for the target language."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the source text submitted for translation."
        },
        "output_chars": {
          "type": "number",
          "description": "Character count of the translated text returned in this response."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the AI model that produced the translation."
        }
      },
      "url": "https://x402.org/v1/translate"
    },
    "translate-text": {
      "slug": "translate-text",
      "price": "0.01",
      "cluster": "wordmint",
      "description": "AI translator — 100+ languages, native-fluent. Auto-detects source. ISO codes or language names. Configurable formality (casual/formal/neutral). Preserves Markdown / code / URLs.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY"
      ],
      "tags": [
        "translate",
        "translation",
        "i18n",
        "language",
        "ai"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text to translate. Max 12,000 chars."
          },
          "target_language": {
            "type": "string",
            "description": "ISO code or language name (e.g. 'fr', 'Mandarin Chinese')."
          },
          "source_language": {
            "type": "string",
            "description": "Optional. Auto-detected if omitted."
          },
          "formality": {
            "type": "string",
            "enum": [
              "casual",
              "formal",
              "neutral"
            ],
            "description": "'casual', 'formal', or 'neutral' (default)."
          }
        },
        "required": [
          "text",
          "target_language"
        ]
      },
      "outputProperties": {
        "translated_text": {
          "type": "string",
          "description": "Translated output string in the target language, with Markdown, code blocks, and URLs preserved."
        },
        "target_language": {
          "type": "string",
          "description": "Target language used for the translation, as an ISO code or language name."
        },
        "source_language": {
          "type": "string",
          "description": "Source language as supplied in the request, or null if auto-detected."
        },
        "detected_source_language": {
          "type": "string",
          "description": "Language auto-detected from the input text when source_language was not provided."
        },
        "formality": {
          "type": "string",
          "description": "Formality register applied to the translation: casual, formal, or neutral."
        },
        "input_chars": {
          "type": "number",
          "description": "Character count of the original input text submitted for translation."
        },
        "output_chars": {
          "type": "number",
          "description": "Character count of the translated_text returned by the model."
        },
        "model": {
          "type": "string",
          "description": "Identifier of the AI model that produced the translation."
        }
      },
      "url": "https://x402.org/v1/translate-text"
    },
    "tx-receipt-decode": {
      "slug": "tx-receipt-decode",
      "price": "0.02",
      "cluster": "edge-market",
      "description": "EVM transaction receipt decoder / log decoder / event log reader / Etherscan tx debug / receipt parser / Basescan tx explainer / tenderly-style trace lite. Given a tx hash, fetches the receipt + transaction via Etherscan v2 and decodes every log: ERC-20 / ERC-721 Transfer + Approval + ApprovalForAll are decoded canonically (from/to/value/tokenId etc.); other logs use the contract's verified ABI when available; remaining unknown topics are looked up against 4byte.directory's event-signature index. Returns status (success/failed), block number, gas used + gas price (gwei), from/to/value, and a structured array of decoded logs with named params and contract names where verified.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "evm",
        "transaction-receipt",
        "log-decoder",
        "erc20-transfers",
        "event-logs",
        "etherscan",
        "tx-debug",
        "receipt-decoder"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "tx_hash": {
            "type": "string",
            "description": "0x-prefixed 32-byte transaction hash (66 chars total)."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'base'."
          }
        },
        "required": [
          "tx_hash"
        ]
      },
      "outputProperties": {
        "tx_hash": {
          "type": "string",
          "description": "Transaction hash that was decoded, echoed back from the request."
        },
        "chain": {
          "type": "string",
          "description": "EVM chain the tx was fetched from (e.g. base, mainnet, optimism)."
        },
        "status": {
          "type": "string",
          "description": "Receipt status, either 'success' or 'failed' based on the tx outcome."
        },
        "block_number": {
          "type": "string",
          "description": "Block number the transaction was included in, as a decimal string."
        },
        "gas_used": {
          "type": "string",
          "description": "Gas units consumed by the transaction, as a decimal string."
        },
        "gas_price_gwei": {
          "type": "string",
          "description": "Effective gas price paid for the transaction, denominated in gwei."
        },
        "from": {
          "type": "string",
          "description": "Sender address (EOA or contract) that originated the transaction."
        },
        "to": {
          "type": "string",
          "description": "Recipient address of the transaction, or null for contract-creation calls."
        },
        "value_wei": {
          "type": "string",
          "description": "Native token value transferred by the tx itself, in wei as a decimal string."
        },
        "decoded_logs": {
          "type": "string",
          "description": "Array of decoded event logs with named params, contract names, and canonical ERC-20/721 fields."
        },
        "unknown_logs_count": {
          "type": "string",
          "description": "Count of logs whose topics couldn't be resolved via verified ABI or 4byte lookup."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source used to fetch the receipt and ABI (e.g. etherscan-v2)."
        }
      },
      "url": "https://x402.org/v1/tx-receipt-decode"
    },
    "tx-simulate-swap": {
      "slug": "tx-simulate-swap",
      "price": "0.02",
      "cluster": "edge-market",
      "description": "Tx simulate swap / pre-trade quote / DEX swap simulator / 1inch + LlamaSwap quote / would-it-succeed check. Given (from_token, to_token, amount_in, chain), pulls a routed quote from a free DEX meta-aggregator and returns expected output, min-out at user-supplied slippage (default 1%), gas estimate, router address, and a would_succeed verdict. Quote-only depth — full Tenderly-style state simulation requires a paid API and is documented in the response's simulation_caveat.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "dex-aggregator",
        "swap-quote",
        "pre-trade-simulation",
        "slippage-check",
        "gas-estimate",
        "1inch",
        "swap-simulator"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "from_token": {
            "type": "string",
            "description": "0x-prefixed 20-byte ERC-20 input token."
          },
          "to_token": {
            "type": "string",
            "description": "0x-prefixed 20-byte ERC-20 output token."
          },
          "amount_in": {
            "type": "string",
            "description": "Input amount as a decimal string in smallest units (wei-equivalent)."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'base'."
          },
          "slippage_pct": {
            "type": "number",
            "description": "Slippage tolerance for min_out, in percent. Range [0, 50]. Default 1."
          }
        },
        "required": [
          "from_token",
          "to_token",
          "amount_in"
        ]
      },
      "outputProperties": {
        "chain": {
          "type": "string",
          "description": "Chain identifier (e.g. ethereum, base, arbitrum) the quote was routed on."
        },
        "from_token": {
          "type": "string",
          "description": "Source token address or symbol being swapped from."
        },
        "to_token": {
          "type": "string",
          "description": "Destination token address or symbol being swapped into."
        },
        "amount_in": {
          "type": "string",
          "description": "Input amount of from_token, echoed back in the same units the caller supplied."
        },
        "expected_out": {
          "type": "string",
          "description": "Routed quote's expected output amount of to_token before slippage is applied."
        },
        "min_out": {
          "type": "string",
          "description": "Minimum acceptable output amount after applying slippage_pct, used as the swap floor."
        },
        "slippage_pct": {
          "type": "string",
          "description": "Slippage tolerance applied to derive min_out, defaulting to 1% when caller omits it."
        },
        "gas_estimate": {
          "type": "string",
          "description": "Estimated gas units the routed swap would consume on-chain."
        },
        "router": {
          "type": "string",
          "description": "Address of the DEX router contract the quote would execute against."
        },
        "approval_target": {
          "type": "string",
          "description": "Address the user must grant ERC-20 allowance to before the swap can pull from_token."
        },
        "would_succeed": {
          "type": "string",
          "description": "Boolean verdict on whether the routed quote looks executable given current liquidity and gas."
        },
        "simulation_kind": {
          "type": "string",
          "description": "Label for the simulation depth used (quote-only vs full state sim)."
        },
        "source": {
          "type": "string",
          "description": "Upstream aggregator that produced the quote, e.g. 1inch or LlamaSwap."
        }
      },
      "url": "https://x402.org/v1/tx-simulate-swap"
    },
    "type-inference-from-json": {
      "slug": "type-inference-from-json",
      "price": "0.001",
      "cluster": "wordmint",
      "description": "Type inference from JSON / JSON to TypeScript / JSON to Zod / JSON to JSON Schema / JSON shape inferer / quicktype-style type generator. Paste a JSON sample (or array of samples); returns a generated type definition in your chosen format. Merges across array elements / object samples — properties present in some but not all become optional, mixed primitive types become unions. Auto-detects string formats (date-time / uuid / uri / email) for richer outputs. Pure compute, no upstream call, no API key. Ideal inside agent code-gen loops that need to consume an unfamiliar API response.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "json",
        "typescript",
        "zod",
        "json-schema",
        "type-inference",
        "codegen",
        "schema"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "json": {
            "type": [
              "string",
              "object",
              "array",
              "number",
              "boolean",
              "null"
            ],
            "description": "JSON sample — a JSON string OR a parsed object/array/primitive. Max 256 KB as string."
          },
          "format": {
            "type": "string",
            "enum": [
              "typescript",
              "zod",
              "jsonschema"
            ],
            "description": "Output format. Default 'typescript'."
          },
          "root_name": {
            "type": "string",
            "description": "Name of the root type / interface / Zod export. Default 'Root'."
          },
          "date_strings": {
            "type": "boolean",
            "description": "Recognize ISO date-time/UUID/URL/email and emit format-aware types. Default true."
          }
        },
        "required": [
          "json"
        ]
      },
      "outputProperties": {
        "format": {
          "type": "string",
          "description": "Output format requested: typescript, zod, json-schema, or similar."
        },
        "root_name": {
          "type": "string",
          "description": "Name used for the top-level generated type or schema (e.g. Root, User)."
        },
        "types": {
          "type": "string",
          "description": "Generated type definition source as a string in the requested format, ready to paste into code."
        },
        "inferred_shape": {
          "type": "object",
          "description": "Internal shape tree with per-field types, optionality flags, and detected string formats before rendering."
        },
        "source": {
          "type": "string",
          "description": "Echo of the input JSON sample (or array) that the types were inferred from."
        }
      },
      "url": "https://x402.org/v1/type-inference-from-json"
    },
    "unicode-normalize": {
      "slug": "unicode-normalize",
      "price": "0.001",
      "cluster": "wordmint",
      "description": "Unicode normalize / NFC NFD NFKC NFKD / homoglyph detection / IDN spoof / lookalike chars / invisible characters / zero-width / phishing detection / RTL override. Normalizes text to NFC (default), NFD, NFKC, or NFKD, classifies every codepoint by script (Latin / Cyrillic / Greek / Hebrew / Arabic / CJK / Hangul / etc.), flags Cyrillic / Greek / Latin Extended homoglyphs (the Cyrillic 'а' that looks like Latin 'a', etc.) with their position, codepoint, and the ASCII char they impersonate, and surfaces hidden / formatting characters like zero-width spaces, RTL overrides, and BOMs. Pure JS, no upstream API.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wordmint",
        "unicode-normalize",
        "homoglyph-detection",
        "idn-spoof",
        "zero-width-chars",
        "phishing-detection",
        "nfc-nfkc",
        "lookalike-chars"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Input text to normalize and analyze. Up to 100000 chars."
          },
          "form": {
            "type": "string",
            "enum": [
              "NFC",
              "NFD",
              "NFKC",
              "NFKD"
            ],
            "description": "Unicode normalization form. Default 'NFC'."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "normalized": {
          "type": "string",
          "description": "Input text after Unicode normalization to the requested form (NFC by default)."
        },
        "form": {
          "type": "string",
          "description": "Normalization form applied: NFC, NFD, NFKC, or NFKD."
        },
        "scripts_detected": {
          "type": "string",
          "description": "List of Unicode scripts found in the input (Latin, Cyrillic, Greek, CJK, etc.)."
        },
        "homoglyph_warnings": {
          "type": "string",
          "description": "Array of suspicious lookalike codepoints with position, codepoint, and the ASCII char they impersonate."
        },
        "hidden_chars": {
          "type": "string",
          "description": "Array of invisible or formatting chars found (zero-width spaces, RTL overrides, BOMs) with positions."
        },
        "is_mixed_script": {
          "type": "string",
          "description": "True when input mixes scripts in a way that suggests IDN spoofing or phishing."
        },
        "source": {
          "type": "string",
          "description": "Origin tag for the result, e.g. local JS normalization with no upstream API."
        }
      },
      "url": "https://x402.org/v1/unicode-normalize"
    },
    "upscale-image": {
      "slug": "upscale-image",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "AI image upscaler / super-resolution / image enlarger. ESRGAN. 1-8× scale factor. Best for photos and illustrations. fal.ai backend.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "FAL_KEY"
      ],
      "tags": [
        "upscale",
        "super-resolution",
        "esrgan",
        "image",
        "enhance"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "image_url": {
            "type": "string",
            "description": "URL of the source image to upscale; must be publicly reachable for the fal.ai ESRGAN backend to fetch."
          },
          "scale": {
            "type": "number",
            "minimum": 1,
            "maximum": 8,
            "description": "1-8. Default 2."
          }
        },
        "required": [
          "image_url"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "URL of the upscaled output image hosted on fal.ai's CDN."
        },
        "width": {
          "type": "number",
          "description": "Width in pixels of the upscaled output image."
        },
        "height": {
          "type": "number",
          "description": "Height in pixels of the upscaled output image."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the upscaled output image file in bytes."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the upscaled output image, typically image/png or image/jpeg."
        },
        "scale": {
          "type": "number",
          "description": "Scale factor applied by ESRGAN, between 1 and 8."
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input image_url that was upscaled."
        }
      },
      "url": "https://x402.org/v1/upscale-image"
    },
    "url-metadata-extract": {
      "slug": "url-metadata-extract",
      "price": "0.003",
      "cluster": "web-probe",
      "description": "URL metadata extractor / OG tags / Open Graph parser / Twitter Card parser / meta tag extractor / link preview / page metadata / favicon resolver / JSON-LD reader / canonical URL extractor. Fetches a webpage and parses head-level metadata: title, description, Open Graph (og:*), Twitter Card (twitter:*), canonical link, favicon, html lang, keywords, robots, author, article:published_time, JSON-LD blocks. Returns absolute URLs for image and favicon. Useful for SEO audits, link-preview generation, content cataloging, RAG ingestion.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "url-metadata",
        "open-graph",
        "twitter-card",
        "link-preview",
        "json-ld",
        "favicon",
        "meta-tags"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Page URL (http or https) to fetch and parse."
          },
          "user_agent": {
            "type": "string",
            "description": "Optional User-Agent header sent on fetch."
          },
          "follow_redirects": {
            "type": "boolean",
            "description": "Default true."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "url": {
          "type": "string",
          "description": "Original URL that was requested for metadata extraction."
        },
        "final_url": {
          "type": "string",
          "description": "Final URL after following redirects from the original request."
        },
        "status": {
          "type": "string",
          "description": "HTTP status code or fetch status returned by the upstream page."
        },
        "title": {
          "type": "string",
          "description": "Page title from the <title> tag or og:title fallback."
        },
        "description": {
          "type": "string",
          "description": "Meta description tag content or og:description fallback."
        },
        "image": {
          "type": "string",
          "description": "Absolute URL of the og:image or twitter:image preview image."
        },
        "canonical": {
          "type": "string",
          "description": "Canonical URL declared via <link rel=\"canonical\"> in the page head."
        },
        "favicon": {
          "type": "string",
          "description": "Absolute URL of the page's favicon resolved from link tags or /favicon.ico."
        },
        "language": {
          "type": "string",
          "description": "Page language code from the html lang attribute (e.g. en, en-US)."
        },
        "og": {
          "type": "string",
          "description": "Open Graph properties parsed from og:* meta tags as a key-value map."
        },
        "twitter": {
          "type": "string",
          "description": "Twitter Card properties parsed from twitter:* meta tags as a key-value map."
        },
        "json_ld": {
          "type": "string",
          "description": "JSON-LD structured data blocks extracted from <script type=\"application/ld+json\"> tags."
        }
      },
      "url": "https://x402.org/v1/url-metadata-extract"
    },
    "user-agent-parse": {
      "slug": "user-agent-parse",
      "price": "0.001",
      "cluster": "web-probe",
      "description": "User-Agent parser / UA classifier / browser detection / OS detection / bot detection / AI crawler identifier (GPTBot, ClaudeBot, PerplexityBot). Pure-local regex parser — detects browser (Chrome, Firefox, Safari, Edge, Opera, Vivaldi, Samsung), OS (Windows, macOS, iOS, Android, Linux, ChromeOS) with version, device type (desktop / mobile / tablet / bot), and identifies 32+ specific bots/crawlers. No upstream call.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "web-probe",
        "user-agent",
        "browser-detection",
        "os-detection",
        "bot-detection",
        "ai-crawler",
        "ua-parser"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "user_agent": {
            "type": "string",
            "description": "Raw User-Agent header string. Up to 2000 chars."
          }
        },
        "required": [
          "user_agent"
        ]
      },
      "outputProperties": {
        "user_agent": {
          "type": "string",
          "description": "Echoes back the raw User-Agent string that was parsed."
        },
        "is_bot": {
          "type": "string",
          "description": "Boolean flag indicating whether the UA matches a known bot or crawler signature."
        },
        "bot": {
          "type": "string",
          "description": "Identified bot name when is_bot is true (e.g. GPTBot, ClaudeBot, PerplexityBot), null otherwise."
        },
        "browser": {
          "type": "string",
          "description": "Detected browser name and version (e.g. Chrome 120, Firefox 115, Safari 17)."
        },
        "os": {
          "type": "string",
          "description": "Detected operating system and version (e.g. Windows 11, macOS 14, iOS 17, Android 14)."
        },
        "device": {
          "type": "string",
          "description": "Device class inferred from the UA: desktop, mobile, tablet, or bot."
        },
        "source": {
          "type": "string",
          "description": "Origin of the parse result, e.g. local-regex, since no upstream API is called."
        }
      },
      "url": "https://x402.org/v1/user-agent-parse"
    },
    "uspto-tm-name-search": {
      "slug": "uspto-tm-name-search",
      "price": "0.10",
      "cluster": "edge-finance",
      "description": "USPTO trademark name search / free-text TM search / wordmark search / brand-name clearance / freedom-to-use check. The companion to uspto-trademark-search (which is lookup-by-id only) — does the search USPTO does not expose as a free API. Returns active or all registered marks matching the query, with serial number, wordmark text, status, registration date, owner, and goods/services description. Source: MarkerAPI indexer of USPTO wordmarks. Screening tool only — not a substitute for a TM attorney clearance search.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "trademark-search",
        "brand-clearance",
        "uspto",
        "wordmark-lookup",
        "ip-search",
        "freedom-to-use",
        "tm-screening"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Wordmark text to search (1-100 chars, e.g. 'APPLE', 'agentutility'). Matches active USPTO trademark wordmarks; case-insensitive."
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "all"
            ],
            "description": "'active' (default — Live registrations only, what you usually want for clearance) or 'all' (includes abandoned, expired, cancelled)."
          },
          "start": {
            "type": "number",
            "description": "Pagination offset (1-indexed). Default 1. Each page returns up to 100 hits."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "query": {
          "type": "string",
          "description": "Echo of the search term used to find matching USPTO trademarks."
        },
        "count": {
          "type": "string",
          "description": "Total number of registered marks matching the query in the MarkerAPI index."
        },
        "returned": {
          "type": "string",
          "description": "Number of trademark records included in this response (may be capped below count)."
        },
        "trademarks": {
          "type": "string",
          "description": "Array of matching marks with serial number, wordmark text, status, registration date, owner, and goods/services."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider for the trademark records, typically MarkerAPI's USPTO wordmark index."
        }
      },
      "url": "https://x402.org/v1/uspto-tm-name-search"
    },
    "uspto-trademark-search": {
      "slug": "uspto-trademark-search",
      "price": "0.03",
      "cluster": "edge-finance",
      "description": "USPTO trademark status / TSDR lookup. Look up a US trademark by serial number or registration number. Returns mark text, owner, status, filing date, classes, goods/services. Federal public TSDR API.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "trademark",
        "uspto",
        "tsdr",
        "trademark-search",
        "brand-clearance",
        "ip-lookup",
        "serial-lookup"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "serial_number": {
            "type": "string",
            "description": "8-digit USPTO serial number (e.g. '78787878')."
          },
          "registration_number": {
            "type": "string",
            "description": "7-digit USPTO registration number (e.g. '3000000')."
          }
        }
      },
      "outputProperties": {
        "mark_text": {
          "type": "string",
          "description": "Literal element of the trademark (the word, phrase, or stylized text as registered with the USPTO)."
        },
        "status_category": {
          "type": "string",
          "description": "Current TSDR status category for the mark, such as live, dead, pending, registered, or abandoned."
        },
        "filing_date": {
          "type": "string",
          "description": "Date the trademark application was filed with the USPTO, in ISO 8601 (YYYY-MM-DD) format."
        }
      },
      "url": "https://x402.org/v1/uspto-trademark-search"
    },
    "video-summarize": {
      "slug": "video-summarize",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "Video summarizer / podcast summarizer / lecture notes generator. One call: Whisper v3 transcribes + Mistral summarizes. 5 styles: tldr, bullets, paragraph, executive, chapters. Returns summary + transcript. 60 min max.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "FAL_KEY_TRANSCRIBE",
        "VENICE_API_KEY"
      ],
      "tags": [
        "video",
        "podcast",
        "summarize",
        "transcribe",
        "whisper"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "media_url": {
            "type": "string",
            "description": "Public URL of the video or podcast audio file to transcribe and summarize (60 minute max length)."
          },
          "style": {
            "type": "string",
            "enum": [
              "tldr",
              "bullets",
              "paragraph",
              "executive",
              "chapters"
            ],
            "description": "Summary format: tldr, bullets, paragraph, executive, or chapters."
          },
          "max_words": {
            "type": "number",
            "description": "Target word count cap for the generated summary."
          },
          "language": {
            "type": "string",
            "description": "ISO language code hint for Whisper transcription; auto-detected if omitted."
          }
        },
        "required": [
          "media_url"
        ]
      },
      "outputProperties": {
        "summary": {
          "type": "string",
          "description": "Generated summary text in the requested style."
        },
        "style": {
          "type": "string",
          "description": "Summary style actually used (echoes the input style parameter)."
        },
        "transcript": {
          "type": "string",
          "description": "Full Whisper v3 transcript of the source media."
        },
        "transcript_chars": {
          "type": "number",
          "description": "Character count of the returned transcript."
        },
        "duration_seconds": {
          "type": "number",
          "description": "Length of the source media in seconds."
        },
        "detected_languages": {
          "type": "array",
          "description": "Languages Whisper detected in the audio, as ISO codes."
        },
        "summary_model": {
          "type": "string",
          "description": "Mistral model identifier used to write the summary."
        },
        "transcribe_model": {
          "type": "string",
          "description": "Whisper model identifier used for transcription (v3)."
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the media_url that was transcribed."
        }
      },
      "url": "https://x402.org/v1/video-summarize"
    },
    "video-thumbnail": {
      "slug": "video-thumbnail",
      "price": "0.03",
      "cluster": "mediakit",
      "description": "Video thumbnail / video frame extractor. First, middle, or last frame as JPG. fal.ai ffmpeg. Fast — no full transcode.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "FAL_KEY"
      ],
      "tags": [
        "video",
        "thumbnail",
        "frame",
        "preview",
        "extract"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "video_url": {
            "type": "string",
            "description": "Public URL of a video file."
          },
          "frame_type": {
            "type": "string",
            "enum": [
              "first",
              "middle",
              "last"
            ],
            "description": "'first' (default), 'middle', or 'last'."
          }
        },
        "required": [
          "video_url"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Hosted URL of the extracted JPG frame from the video."
        },
        "width": {
          "type": "number",
          "description": "Width of the extracted frame in pixels."
        },
        "height": {
          "type": "number",
          "description": "Height of the extracted frame in pixels."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the returned JPG file in bytes."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the extracted frame, typically image/jpeg."
        },
        "frame_type": {
          "type": "string",
          "description": "Which frame was extracted: first, middle, or last."
        },
        "source_url": {
          "type": "string",
          "description": "Original video URL that the frame was pulled from."
        }
      },
      "url": "https://x402.org/v1/video-thumbnail"
    },
    "video-to-audio": {
      "slug": "video-to-audio",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "Video → audio extractor / video to audio converter. Extract MP3 audio track from any video URL (MP4, MOV, WEBM, MKV, AVI, M4V, FLV). Selectable bitrate (96/128/192 kbps). Useful for podcast extraction, audio archival, transcription pre-processing. 60-min / 500MB max. CloudConvert backend.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "video",
        "audio",
        "mp3-extraction",
        "video-to-audio",
        "audio-extraction",
        "podcast-extraction",
        "transcription-prep"
      ],
      "aliasOf": "mp4-to-mp3",
      "inputSchema": {
        "type": "object",
        "properties": {
          "video_url": {
            "type": "string",
            "description": "Public URL of the source video. Max 500MB / 60 minutes."
          },
          "bitrate": {
            "type": "number",
            "enum": [
              96,
              128,
              192
            ],
            "description": "Output MP3 bitrate in kbps. 96 (smaller, voice), 128 (default, balanced), 192 (higher quality)."
          }
        },
        "required": [
          "video_url"
        ]
      },
      "outputProperties": {
        "audio_url": {
          "type": "string",
          "description": "Signed URL to download the extracted MP3 audio file."
        },
        "bitrate": {
          "type": "string",
          "description": "Encoded audio bitrate used for the MP3 output (96, 128, or 192 kbps)."
        },
        "file_size_bytes": {
          "type": "string",
          "description": "Size of the extracted MP3 file in bytes."
        },
        "source_url": {
          "type": "string",
          "description": "Original video URL that was processed for audio extraction."
        }
      },
      "url": "https://x402.org/v1/video-to-audio"
    },
    "video-to-subtitles": {
      "slug": "video-to-subtitles",
      "price": "0.02",
      "cluster": "mediakit",
      "description": "SRT / VTT subtitle generator from video or audio. Whisper v3 powered. Word-wrapped, ready for VLC / Premiere / FFmpeg. Auto-detect language + translate-to-English.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "FAL_KEY_TRANSCRIBE"
      ],
      "tags": [
        "subtitles",
        "srt",
        "vtt",
        "captions",
        "whisper",
        "transcription"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "media_url": {
            "type": "string",
            "description": "Public URL of an audio or video file. mp3, mp4, mpeg, mpga, m4a, wav, webm. Max 60 minutes."
          },
          "format": {
            "type": "string",
            "enum": [
              "srt",
              "vtt"
            ],
            "description": "'srt' (default) or 'vtt'."
          },
          "language": {
            "type": "string",
            "description": "Optional ISO language code. Auto-detected if omitted."
          },
          "task": {
            "type": "string",
            "enum": [
              "transcribe",
              "translate"
            ],
            "description": "'transcribe' (default) or 'translate' (translates to English)."
          },
          "max_chars_per_line": {
            "type": "number",
            "description": "Max characters per subtitle line. Default 42. Range 16-120."
          }
        },
        "required": [
          "media_url"
        ]
      },
      "outputProperties": {
        "subtitles": {
          "type": "string",
          "description": "Full subtitle file content as a string."
        },
        "format": {
          "type": "string",
          "description": "Echo of the format used."
        },
        "mime_type": {
          "type": "string",
          "description": "MIME type for the subtitle format ('application/x-subrip' or 'text/vtt')."
        },
        "cue_count": {
          "type": "number",
          "description": "Number of subtitle cues generated."
        },
        "duration_seconds": {
          "type": "number",
          "description": "Source media duration."
        },
        "detected_languages": {
          "type": "array",
          "description": "Languages auto-detected in the audio."
        },
        "task": {
          "type": "string",
          "description": "Echo of the task performed."
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL."
        }
      },
      "url": "https://x402.org/v1/video-to-subtitles"
    },
    "video-to-text": {
      "slug": "video-to-text",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "Video transcription / audio transcription via Whisper v3 large. Auto-detects 90+ languages. Translate-to-English mode. Speaker diarization optional. 60 min max.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "transcription",
        "whisper",
        "video",
        "audio",
        "subtitles"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "media_url": {
            "type": "string",
            "description": "Public URL of an audio or video file. Supports mp3, mp4, mpeg, mpga, m4a, wav, webm. Max 60 minutes."
          },
          "language": {
            "type": "string",
            "description": "Optional ISO language code (e.g. 'en', 'fr', 'es'). If omitted, auto-detected."
          },
          "task": {
            "type": "string",
            "enum": [
              "transcribe",
              "translate"
            ],
            "description": "Either 'transcribe' (default) or 'translate' (translates to English)."
          },
          "diarize": {
            "type": "boolean",
            "description": "Whether to identify different speakers. Default false."
          }
        },
        "required": [
          "media_url"
        ]
      },
      "outputProperties": {
        "text": {
          "type": "string",
          "description": "Full transcript text"
        },
        "chunks": {
          "type": "array",
          "description": "Time-segmented chunks with timestamps"
        },
        "detected_languages": {
          "type": "array",
          "description": "Languages auto-detected in the audio"
        },
        "duration_seconds": {
          "type": "number",
          "description": "Source media duration in seconds"
        },
        "task": {
          "type": "string",
          "description": "Echo of the task performed"
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL"
        }
      },
      "url": "https://x402.org/v1/video-to-text"
    },
    "video-transcribe": {
      "slug": "video-transcribe",
      "price": "0.10",
      "cluster": "mediakit",
      "description": "Transcribe video / video transcription / video to audio transcription / video-to-text. Whisper v3 large transcription for any video URL. Auto-detects 90+ languages. Translate-to-English mode. 60-min / 500MB max. Speaker diarization optional. Same backend as video-to-text under a clearer slug.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "transcribe",
        "video",
        "audio",
        "whisper",
        "transcription"
      ],
      "aliasOf": "video-to-text",
      "inputSchema": {
        "type": "object",
        "properties": {
          "media_url": {
            "type": "string",
            "description": "Public URL of an audio or video file. Supports mp3, mp4, mpeg, mpga, m4a, wav, webm. Max 60 minutes."
          },
          "language": {
            "type": "string",
            "description": "Optional ISO language code (e.g. 'en', 'fr', 'es'). If omitted, auto-detected."
          },
          "task": {
            "type": "string",
            "enum": [
              "transcribe",
              "translate"
            ],
            "description": "Either 'transcribe' (default) or 'translate' (translates to English)."
          },
          "diarize": {
            "type": "boolean",
            "description": "Whether to identify different speakers. Default false."
          }
        },
        "required": [
          "media_url"
        ]
      },
      "outputProperties": {
        "text": {
          "type": "string",
          "description": "Full transcript text"
        },
        "chunks": {
          "type": "array",
          "description": "Time-segmented chunks with timestamps"
        },
        "detected_languages": {
          "type": "array",
          "description": "Languages auto-detected in the audio"
        },
        "duration_seconds": {
          "type": "number",
          "description": "Source media duration in seconds"
        },
        "task": {
          "type": "string",
          "description": "Echo of the task performed"
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL"
        }
      },
      "url": "https://x402.org/v1/video-transcribe"
    },
    "video-trim": {
      "slug": "video-trim",
      "price": "0.02",
      "cluster": "mediakit",
      "description": "Video trimmer / video cutter / video clip tool. Pass start + end OR start + duration. HH:MM:SS, MM:SS, or seconds. CloudConvert + x264 re-encode.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "video",
        "trim",
        "cut",
        "edit"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "video_url": {
            "type": "string",
            "description": "Public URL of a video file."
          },
          "trim_start": {
            "description": "Start time. HH:MM:SS, MM:SS, or seconds."
          },
          "trim_end": {
            "description": "End time. HH:MM:SS, MM:SS, or seconds. Use this OR duration."
          },
          "duration": {
            "description": "Length to keep from trim_start. HH:MM:SS, MM:SS, or seconds."
          },
          "output_format": {
            "type": "string",
            "description": "Output format. Default: same as input."
          }
        },
        "required": [
          "video_url",
          "trim_start"
        ]
      },
      "outputProperties": {
        "video_url": {
          "type": "string",
          "description": "Signed URL to download the trimmed MP4 clip (x264 re-encoded)."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the trimmed output video in bytes."
        },
        "trim_start": {
          "type": "string",
          "description": "Start timestamp applied to the cut, echoed in HH:MM:SS form."
        },
        "trim_end": {
          "type": "string",
          "description": "End timestamp applied to the cut, echoed in HH:MM:SS form."
        },
        "input_format": {
          "type": "string",
          "description": "Container/codec of the source video (e.g. mp4, mov, webm)."
        },
        "output_format": {
          "type": "string",
          "description": "Container of the returned clip, typically mp4 with x264 video."
        },
        "source_url": {
          "type": "string",
          "description": "Original video URL that was fetched and trimmed."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job identifier for the trim/re-encode task."
        }
      },
      "url": "https://x402.org/v1/video-trim"
    },
    "vin-decode": {
      "slug": "vin-decode",
      "price": "0.005",
      "cluster": "locale",
      "description": "VIN decoder / VIN lookup / decode VIN / vehicle identification number / NHTSA vPIC wrapper. Pass a 17-char VIN; returns make, model, model_year, manufacturer, plant country, body class, vehicle type, fuel type, engine cylinders/displacement/HP, drive type, transmission, GVWR, safety features (ABS, traction control, airbags), and any decode errors. Includes a `valid_checksum` flag (ISO 3779 mod-11 check; reliable for North-American VINs). Backed by NHTSA's free public vPIC API — US Govt public domain, no API key required.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "vin",
        "vehicle",
        "car",
        "automotive",
        "nhtsa",
        "decode"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "vin": {
            "type": "string",
            "description": "17-character VIN. Alphanumeric, no I/O/Q."
          },
          "model_year": {
            "type": [
              "integer",
              "string"
            ],
            "description": "Optional model year hint (YYYY) — helps NHTSA disambiguate the 10th position."
          }
        },
        "required": [
          "vin"
        ]
      },
      "outputProperties": {
        "vin": {
          "type": "string",
          "description": "Echoed 17-character VIN that was decoded, uppercased and stripped of whitespace."
        },
        "valid_checksum": {
          "type": "boolean",
          "description": "True if the VIN passes the ISO 3779 mod-11 check digit; reliable for North-American VINs."
        },
        "decode_ok": {
          "type": "boolean",
          "description": "True if NHTSA vPIC returned a usable decode with no fatal errors."
        },
        "errors": {
          "type": "array",
          "description": "List of decode error codes/messages reported by vPIC (e.g. invalid characters, unknown WMI)."
        },
        "make": {
          "type": [
            "string",
            "null"
          ],
          "description": "Vehicle make (e.g. Ford, Toyota), or null if vPIC could not determine it."
        },
        "model": {
          "type": [
            "string",
            "null"
          ],
          "description": "Vehicle model name (e.g. F-150, Camry), or null if not resolvable from the VIN."
        },
        "model_year": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Four-digit model year decoded from the VIN, or null if vPIC could not determine it."
        },
        "manufacturer": {
          "type": [
            "string",
            "null"
          ],
          "description": "Full manufacturer name as registered with NHTSA (e.g. Ford Motor Company), or null."
        },
        "body_class": {
          "type": [
            "string",
            "null"
          ],
          "description": "Body style classification (e.g. Sedan/4-Door, Pickup, SUV), or null if unavailable."
        },
        "vehicle_type": {
          "type": [
            "string",
            "null"
          ],
          "description": "Top-level vehicle type (e.g. Passenger Car, Truck, Motorcycle), or null."
        },
        "fuel_type_primary": {
          "type": [
            "string",
            "null"
          ],
          "description": "Primary fuel type (e.g. Gasoline, Diesel, Electric), or null if not reported."
        },
        "source": {
          "type": "string",
          "description": "Upstream data source identifier, always \"NHTSA vPIC\" for this endpoint."
        },
        "attribution": {
          "type": "string",
          "description": "Required attribution string crediting NHTSA's vPIC public-domain dataset."
        }
      },
      "url": "https://x402.org/v1/vin-decode"
    },
    "visa-requirements": {
      "slug": "visa-requirements",
      "price": "0.005",
      "cluster": "locale",
      "description": "Visa requirements lookup. Passport country + destination → visa-free / e-visa / visa-on-arrival / visa-required + duration. Public CC-BY dataset.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "locale",
        "travel",
        "visa-requirements",
        "passport",
        "immigration",
        "visa-free",
        "e-visa"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "passport": {
            "type": "string",
            "description": "ISO 2-letter country code."
          },
          "destination": {
            "type": "string",
            "description": "ISO 2-letter country code."
          },
          "full_matrix": {
            "type": "boolean",
            "description": "If true, returns the full row of requirements for the passport country across all destinations instead of a single pair. Default false."
          }
        },
        "required": [
          "passport"
        ]
      },
      "outputProperties": {
        "passport": {
          "type": "string",
          "description": "ISO country code of the traveler's passport that was queried."
        },
        "destination": {
          "type": "string",
          "description": "ISO country code of the destination being checked for entry requirements."
        },
        "visa_free": {
          "type": "string",
          "description": "Entry category: visa-free, e-visa, visa-on-arrival, or visa-required."
        },
        "visa_free_days": {
          "type": "string",
          "description": "Maximum stay duration in days allowed under the returned entry category."
        }
      },
      "url": "https://x402.org/v1/visa-requirements"
    },
    "voice": {
      "slug": "voice",
      "price": "0.05",
      "cluster": "synthforge",
      "description": "Text-to-speech / TTS / voice synthesis. Venice TTS (Kokoro/xAI/ElevenLabs/Orpheus/MiniMax). 30+ voices, MP3/WAV/OPUS/AAC/FLAC.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "VENICE_API_KEY",
        "FAL_KEY"
      ],
      "tags": [
        "tts",
        "speech",
        "audio",
        "voice",
        "ai"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Max 4000 chars."
          },
          "voice": {
            "type": "string",
            "description": "Default 'af_sky'."
          },
          "model": {
            "type": "string",
            "description": "Default 'tts-kokoro'. Other options: tts-xai-v1, tts-elevenlabs-turbo-v2-5, tts-orpheus, etc."
          },
          "speed": {
            "type": "number",
            "description": "0.25-4. Default 1."
          },
          "format": {
            "type": "string",
            "description": "mp3 (default), wav, opus, aac, flac."
          }
        },
        "required": [
          "text"
        ]
      },
      "outputProperties": {
        "audio_url": {
          "type": "string",
          "description": "Signed URL to the generated audio file hosted on R2 or similar object storage."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the generated audio file in bytes."
        },
        "content_type": {
          "type": "string",
          "description": "MIME type of the audio response, like audio/mpeg or audio/wav."
        },
        "format": {
          "type": "string",
          "description": "Audio container/codec returned: mp3, wav, opus, aac, or flac."
        },
        "voice": {
          "type": "string",
          "description": "Voice ID used for synthesis from the 30+ Venice TTS voices."
        },
        "model": {
          "type": "string",
          "description": "TTS model that produced the audio: Kokoro, xAI, ElevenLabs, Orpheus, or MiniMax."
        },
        "speed": {
          "type": "number",
          "description": "Playback speed multiplier applied during synthesis, where 1.0 is normal pace."
        },
        "input_chars": {
          "type": "number",
          "description": "Number of characters in the input text that were synthesized."
        }
      },
      "url": "https://x402.org/v1/voice"
    },
    "wallet-label": {
      "slug": "wallet-label",
      "price": "0.005",
      "cluster": "edge-market",
      "description": "Wallet label / address tagger / known-address lookup / EOA-vs-contract check / deployer tracer. Best-effort labelling for any EVM address against an in-handler dictionary of well-known CEX hot/cold wallets, DEX routers, NFT marketplaces, popular MEV bots, bridges, and stablecoins. Etherscan v2 'getcontractcreation' adds is_contract + deployer for unknown contracts. Returns label, category, and the source of the match.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "wallet-label",
        "address-tagger",
        "known-addresses",
        "deployer-tracer",
        "contract-check",
        "eoa-detection",
        "etherscan-lookup"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "0x-prefixed 20-byte EVM address."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'ethereum'."
          }
        },
        "required": [
          "address"
        ]
      },
      "outputProperties": {
        "address": {
          "type": "string",
          "description": "EVM address that was looked up, returned in lowercase hex form."
        },
        "chain": {
          "type": "string",
          "description": "Chain the lookup ran against (e.g. ethereum, base, polygon)."
        },
        "is_contract": {
          "type": "string",
          "description": "True if the address has bytecode deployed, false if it's an externally owned account."
        },
        "deployer": {
          "type": "string",
          "description": "Address that deployed the contract, pulled from Etherscan getcontractcreation when available."
        },
        "creation_tx": {
          "type": "string",
          "description": "Transaction hash that created the contract, or null for EOAs and unknown contracts."
        },
        "label": {
          "type": "string",
          "description": "Human-readable name for the address (e.g. 'Binance Hot Wallet 14', 'Uniswap V3 Router')."
        },
        "category": {
          "type": "string",
          "description": "Bucket the label falls into: cex, dex, bridge, stablecoin, nft-marketplace, mev-bot, etc."
        },
        "source": {
          "type": "string",
          "description": "Where the match came from: in-handler dictionary, etherscan-creation, or unmatched."
        }
      },
      "url": "https://x402.org/v1/wallet-label"
    },
    "wallet-pnl": {
      "slug": "wallet-pnl",
      "price": "0.05",
      "cluster": "edge-market",
      "description": "Wallet token P&L / FIFO cost basis / realized + unrealized profit / EVM portfolio analytics. For any (wallet, ERC-20, chain) triple, pulls all transfers from Etherscan v2, prices each one at the historical USD spot via CoinGecko, runs FIFO accounting and reports cost basis, realized gain, unrealized gain, current balance, and tx count. Capped at the most recent 500 transfers.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-market",
        "wallet-analytics",
        "portfolio-tracking",
        "cost-basis",
        "fifo-accounting",
        "realized-pnl",
        "erc-20",
        "wallet-pnl"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "wallet": {
            "type": "string",
            "description": "0x-prefixed 20-byte wallet address."
          },
          "token_address": {
            "type": "string",
            "description": "0x-prefixed 20-byte ERC-20 contract."
          },
          "chain": {
            "type": "string",
            "enum": [
              "base",
              "ethereum",
              "polygon",
              "arbitrum",
              "optimism"
            ],
            "description": "EVM chain. Default 'ethereum'."
          }
        },
        "required": [
          "wallet",
          "token_address"
        ]
      },
      "outputProperties": {
        "wallet": {
          "type": "string",
          "description": "EVM wallet address whose token P&L was computed."
        },
        "token": {
          "type": "string",
          "description": "ERC-20 contract address of the token analyzed."
        },
        "chain": {
          "type": "string",
          "description": "EVM chain the wallet and token live on (e.g. ethereum, base, polygon)."
        },
        "symbol": {
          "type": "string",
          "description": "Ticker symbol of the ERC-20 token (e.g. USDC, WETH)."
        },
        "decimals": {
          "type": "string",
          "description": "Number of decimal places the ERC-20 contract uses to format balances."
        },
        "tx_count": {
          "type": "string",
          "description": "Total transfer count for this wallet/token pair included in the FIFO calculation."
        },
        "transfers_in": {
          "type": "string",
          "description": "Count of inbound transfers credited to the wallet's FIFO inventory."
        },
        "transfers_out": {
          "type": "string",
          "description": "Count of outbound transfers consumed against FIFO inventory to realize gains."
        },
        "current_balance": {
          "type": "string",
          "description": "Wallet's current token balance after applying all in/out transfers, in human units."
        },
        "current_price_usd": {
          "type": "string",
          "description": "Latest USD spot price per token from CoinGecko at query time."
        },
        "cost_basis_usd": {
          "type": "string",
          "description": "FIFO cost basis in USD for the wallet's remaining token balance."
        },
        "realized_pnl_usd": {
          "type": "string",
          "description": "USD profit/loss already locked in by outbound transfers under FIFO accounting."
        },
        "unrealized_pnl_usd": {
          "type": "string",
          "description": "USD profit/loss on the current balance at current price vs remaining cost basis."
        },
        "total_pnl_usd": {
          "type": "string",
          "description": "Sum of realized and unrealized USD P&L for this wallet/token/chain triple."
        },
        "capped_at": {
          "type": "string",
          "description": "Max transfer count the calculation considered (500 if the wallet exceeded the cap)."
        },
        "coingecko_id": {
          "type": "string",
          "description": "CoinGecko asset ID used to fetch historical and current USD prices for the token."
        },
        "source": {
          "type": "string",
          "description": "Origin of the underlying transfer + price data (e.g. etherscan_v2+coingecko)."
        }
      },
      "url": "https://x402.org/v1/wallet-pnl"
    },
    "watermark": {
      "slug": "watermark",
      "price": "0.02",
      "cluster": "mediakit",
      "description": "PDF / image / video watermarking — text or image overlay. CloudConvert engine. Configurable position, opacity, font, rotation, margin. Works on PDFs, PNG/JPG/GIF, MP4/MOV/WEBM.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "watermark",
        "pdf",
        "image",
        "video",
        "branding"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "file_url": {
            "type": "string",
            "description": "Public URL of the input file (PDF, PNG, JPG, GIF, BMP, TIFF, WEBP, MP4, MOV, WEBM, MKV, AVI, etc.). The URL extension is used to detect format."
          },
          "text": {
            "type": "string",
            "description": "Watermark text. Provide either text OR image_url (not both)."
          },
          "image_url": {
            "type": "string",
            "description": "Public URL of an image to use as the watermark (use a transparent PNG)."
          },
          "font_size": {
            "type": "number",
            "description": "Font size in points (text watermark). Default 40. Range 6-400."
          },
          "font_color": {
            "type": "string",
            "description": "Font color as 6-digit hex (e.g. '#FF0000'). Default '#000000'."
          },
          "opacity": {
            "type": "number",
            "description": "Opacity 0-100. 100 = fully visible."
          },
          "rotation": {
            "type": "number",
            "description": "Rotation in degrees (-360 to 360)."
          },
          "position_vertical": {
            "type": "string",
            "enum": [
              "top",
              "center",
              "bottom"
            ],
            "description": "'top', 'center' (default), or 'bottom'."
          },
          "position_horizontal": {
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ],
            "description": "'left', 'center' (default), or 'right'."
          }
        },
        "required": [
          "file_url"
        ]
      },
      "outputProperties": {
        "output_url": {
          "type": "string",
          "description": "Signed CloudConvert URL of the watermarked file (24h expiry)."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Output file size in bytes."
        },
        "input_format": {
          "type": "string",
          "description": "Detected input format (pdf, png, mp4, etc.)."
        },
        "watermark_type": {
          "type": "string",
          "description": "'text' or 'image'."
        },
        "source_url": {
          "type": "string",
          "description": "Echo of the input URL."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job id."
        }
      },
      "url": "https://x402.org/v1/watermark"
    },
    "watermark-pdf": {
      "slug": "watermark-pdf",
      "price": "0.02",
      "cluster": "mediakit",
      "description": "Add watermark to PDF. Text or image overlay on PDFs, PNG / JPG / GIF, or MP4 / MOV / WEBM with configurable position, opacity, font, rotation, and margin. Same backend as watermark / pdf-watermark under a clearer search slug. CloudConvert engine.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "pdf",
        "watermark",
        "pdf-watermark",
        "overlay",
        "cloudconvert",
        "add-watermark-pdf"
      ],
      "aliasOf": "watermark",
      "inputSchema": {
        "type": "object",
        "properties": {
          "file_url": {
            "type": "string",
            "description": "URL of the PDF, image, or video file to watermark."
          },
          "text": {
            "type": "string",
            "description": "Watermark text to overlay on the file; mutually exclusive with image_url."
          },
          "image_url": {
            "type": "string",
            "description": "URL of an image to use as the watermark overlay; mutually exclusive with text."
          },
          "font_size": {
            "type": "number",
            "description": "Font size in points for text watermarks."
          },
          "font_color": {
            "type": "string",
            "description": "Hex color code (e.g., #FF0000) for the watermark text."
          },
          "opacity": {
            "type": "number",
            "description": "Watermark opacity from 0 (transparent) to 1 (fully opaque)."
          },
          "rotation": {
            "type": "number",
            "description": "Rotation angle in degrees applied to the watermark."
          },
          "position_vertical": {
            "type": "string",
            "enum": [
              "top",
              "center",
              "bottom"
            ],
            "description": "Vertical placement of the watermark: top, center, or bottom."
          },
          "position_horizontal": {
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ],
            "description": "Horizontal placement of the watermark: left, center, or right."
          }
        },
        "required": [
          "file_url"
        ]
      },
      "outputProperties": {
        "output_url": {
          "type": "string",
          "description": "URL of the watermarked PDF, image, or video file."
        },
        "watermark_type": {
          "type": "string",
          "description": "Type of watermark applied: text or image."
        },
        "input_format": {
          "type": "string",
          "description": "Detected format of the source file (pdf, png, jpg, gif, mp4, mov, or webm)."
        }
      },
      "url": "https://x402.org/v1/watermark-pdf"
    },
    "weather": {
      "slug": "weather",
      "price": "0.005",
      "cluster": "locale",
      "description": "Weather API / weather forecast / current weather / hourly forecast. Returns current conditions plus 1-7 day daily forecast and optional hourly forecast for any latitude/longitude. Daily includes temp max/min, precipitation, sunrise/sunset, UV index. Open-Meteo backend.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "weather",
        "locale",
        "forecast",
        "current-conditions",
        "hourly-forecast",
        "uv-index",
        "open-meteo"
      ],
      "aliasOf": "weather-forecast",
      "inputSchema": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "Decimal degrees, range [-90, 90]. Positive north."
          },
          "longitude": {
            "type": "number",
            "description": "Decimal degrees, range [-180, 180]. Positive east."
          },
          "units": {
            "type": "string",
            "enum": [
              "metric",
              "imperial"
            ],
            "description": "'metric' (°C, km/h, mm) or 'imperial' (°F, mph, inch). Default 'metric'."
          },
          "forecast_days": {
            "type": "number",
            "description": "Number of forecast days, 1-7. Default 3."
          },
          "hourly": {
            "type": "boolean",
            "description": "If true, include hourly temperature, precipitation, and weather code arrays. Default false."
          }
        },
        "required": [
          "latitude",
          "longitude"
        ]
      },
      "outputProperties": {
        "location": {
          "type": "string",
          "description": "Echo of the requested coordinates with resolved place name, timezone, and elevation for the forecast point."
        },
        "current": {
          "type": "string",
          "description": "Current conditions snapshot: temperature, apparent temp, humidity, wind speed/direction, and weather code."
        },
        "daily": {
          "type": "string",
          "description": "Array of 1-7 day forecasts with temp max/min, precipitation totals, sunrise/sunset times, and UV index."
        },
        "units": {
          "type": "string",
          "description": "Unit labels for each returned field (e.g. temperature in C or F, wind in km/h, precipitation in mm)."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider identifier, set to open-meteo for this endpoint."
        }
      },
      "url": "https://x402.org/v1/weather"
    },
    "weather-forecast": {
      "slug": "weather-forecast",
      "price": "0.005",
      "cluster": "locale",
      "description": "Weather forecast / hourly forecast / current weather / temperature / precipitation / UV index / sunrise-sunset / Open-Meteo / weather API. Returns current conditions, a 1-7 day daily forecast, and an optional hourly forecast for any latitude/longitude. Daily includes temp max/min, precipitation total + probability, sunrise/sunset, max UV index, and WMO weather code. Current includes temperature, apparent temperature, humidity %, wind speed/direction, precipitation, weather code, and is_day. Metric or imperial units. Wraps the public Open-Meteo API — no auth, commercial-OK, CC-BY 4.0.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "weather",
        "forecast",
        "weather-forecast",
        "hourly-forecast",
        "open-meteo",
        "uv-index",
        "precipitation",
        "locale"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "Decimal degrees, range [-90, 90]. Positive north."
          },
          "longitude": {
            "type": "number",
            "description": "Decimal degrees, range [-180, 180]. Positive east."
          },
          "units": {
            "type": "string",
            "enum": [
              "metric",
              "imperial"
            ],
            "description": "'metric' (°C, km/h, mm) or 'imperial' (°F, mph, inch). Default 'metric'."
          },
          "forecast_days": {
            "type": "number",
            "description": "Number of forecast days, 1-7. Default 3."
          },
          "hourly": {
            "type": "boolean",
            "description": "If true, include hourly temperature, precipitation, and weather code arrays. Default false."
          }
        },
        "required": [
          "latitude",
          "longitude"
        ]
      },
      "outputProperties": {
        "location": {
          "type": "string",
          "description": "Latitude/longitude pair (and resolved timezone) the forecast was generated for."
        },
        "current": {
          "type": "string",
          "description": "Current conditions block: temperature, apparent temp, humidity, wind, precipitation, weather code, is_day."
        },
        "daily": {
          "type": "string",
          "description": "1-7 day daily forecast: temp max/min, precipitation total + probability, sunrise/sunset, max UV, WMO code."
        },
        "units": {
          "type": "string",
          "description": "Unit system applied to the response, either metric (°C, mm, km/h) or imperial (°F, in, mph)."
        },
        "source": {
          "type": "string",
          "description": "Upstream data provider, Open-Meteo (CC-BY 4.0, commercial-OK, no auth)."
        }
      },
      "url": "https://x402.org/v1/weather-forecast"
    },
    "webpage-diff": {
      "slug": "webpage-diff",
      "price": "0.04",
      "cluster": "web-probe",
      "description": "Webpage change detection / website monitor / content diff. Cleans HTML to text + SHA-256 hash. Pass previous hash/text to get added/removed line lists. Price + policy + status-page monitoring.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "diff",
        "monitor",
        "change-detection",
        "scrape",
        "html"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Page URL to fetch (http or https). Server follows redirects and reports the final_url."
          },
          "previous_hash": {
            "type": "string",
            "description": "SHA-256 hex from a previous call."
          },
          "previous_text": {
            "type": "string",
            "description": "Previous cleaned text. Triggers a line diff."
          },
          "selector": {
            "type": "string",
            "description": "Optional CSS selector to limit content scope."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "url": {
          "type": "string",
          "description": "Original URL requested for monitoring."
        },
        "final_url": {
          "type": "string",
          "description": "URL after following redirects to the actual fetched page."
        },
        "status_code": {
          "type": "number",
          "description": "HTTP status code returned by the target server."
        },
        "current_text": {
          "type": "string",
          "description": "Cleaned plain-text extracted from the page HTML."
        },
        "current_hash": {
          "type": "string",
          "description": "SHA-256 hash of the cleaned text for fast change detection."
        },
        "char_count": {
          "type": "number",
          "description": "Length of the cleaned text in characters."
        },
        "selector": {
          "type": "string",
          "description": "CSS selector used to scope extraction, or empty if full page was used."
        },
        "changed": {
          "type": "boolean",
          "description": "True when the current hash differs from the previous hash passed in."
        },
        "diff": {
          "type": "object",
          "description": "Object with added and removed line arrays comparing current text to previous text."
        }
      },
      "url": "https://x402.org/v1/webpage-diff"
    },
    "website-screenshot": {
      "slug": "website-screenshot",
      "price": "0.04",
      "cluster": "web-probe",
      "description": "URL to PNG / JPG / website screenshot tool. Configurable viewport, retina, crop/fit, transparent BG, JPG quality, JS wait conditions. CloudConvert capture.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [
        "CLOUD_CONVERT_API_KEY"
      ],
      "tags": [
        "screenshot",
        "url",
        "png",
        "jpg",
        "render",
        "capture"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Public http/https URL."
          },
          "format": {
            "type": "string",
            "enum": [
              "png",
              "jpg"
            ],
            "description": "'png' (default) or 'jpg'."
          },
          "screen_width": {
            "type": "number",
            "description": "Viewport width 320-3840. Default 1440."
          },
          "screen_height": {
            "type": "number",
            "description": "Viewport height 240-4320."
          },
          "device_scale_factor": {
            "type": "number",
            "description": "1-4 (retina). Default 1."
          },
          "width": {
            "type": "number",
            "description": "Final image width 1-8000."
          },
          "height": {
            "type": "number",
            "description": "Final image height 1-8000."
          },
          "fit": {
            "type": "string",
            "description": "'max' (default), 'crop', or 'scale'."
          },
          "quality": {
            "type": "number",
            "description": "JPG quality 1-100."
          },
          "transparent_background": {
            "type": "boolean",
            "description": "PNG only. Default false."
          }
        },
        "required": [
          "url"
        ]
      },
      "outputProperties": {
        "image_url": {
          "type": "string",
          "description": "Public URL where the rendered screenshot PNG or JPG can be downloaded."
        },
        "file_size_bytes": {
          "type": "number",
          "description": "Size of the generated screenshot file in bytes."
        },
        "format": {
          "type": "string",
          "description": "Image format of the screenshot, either png or jpg."
        },
        "source_url": {
          "type": "string",
          "description": "Original target URL that was captured for the screenshot."
        },
        "job_id": {
          "type": "string",
          "description": "CloudConvert job identifier for the capture task, useful for tracing or debugging."
        }
      },
      "url": "https://x402.org/v1/website-screenshot"
    },
    "whois": {
      "slug": "whois",
      "price": "0.02",
      "cluster": "web-probe",
      "description": "Domain WHOIS / RDAP lookup. Registration, age, expiration, registrar, contacts, nameservers, DNSSEC, status flags.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "whois",
        "rdap",
        "domain",
        "dns",
        "security"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain."
          },
          "include_certificates": {
            "type": "boolean",
            "description": "If true, attaches a crt.sh certificate-transparency summary. Default false."
          }
        },
        "required": [
          "domain"
        ]
      },
      "outputProperties": {
        "domain": {
          "type": "string",
          "description": "Queried domain name in canonical form (lowercased, punycode for IDNs)."
        },
        "rdap_server": {
          "type": "string",
          "description": "RDAP service URL that answered the query, or the WHOIS host if RDAP was unavailable."
        },
        "registered_date": {
          "type": "string",
          "description": "Domain creation date in ISO 8601 (UTC) as reported by the registry."
        },
        "expiration_date": {
          "type": "string",
          "description": "Domain expiration date in ISO 8601 (UTC) as reported by the registry."
        },
        "age_days": {
          "type": "number",
          "description": "Days elapsed since the registered_date, rounded down."
        },
        "days_until_expiry": {
          "type": "number",
          "description": "Days remaining until expiration_date; negative if already expired."
        },
        "registrar": {
          "type": "object",
          "description": "Registrar record with name, IANA ID, abuse contact email, and URL."
        },
        "contacts": {
          "type": "object",
          "description": "Registrant, admin, and tech contact handles with any fields the registry exposes (often redacted)."
        },
        "nameservers": {
          "type": "array",
          "description": "Authoritative nameserver hostnames listed at the registry for the domain."
        },
        "dnssec_signed": {
          "type": "boolean",
          "description": "True if the registry reports a signed delegation (DS records present) for the domain."
        },
        "statuses": {
          "type": "array",
          "description": "EPP status codes from the registry (clientTransferProhibited, serverHold, pendingDelete, etc.)."
        },
        "flags": {
          "type": "array",
          "description": "Derived risk flags such as newly_registered, expiring_soon, redacted_contacts, or locked."
        },
        "cert_summary": {
          "type": "object",
          "description": "TLS certificate snapshot for the apex: issuer, notBefore, notAfter, SANs count, days_to_expiry."
        }
      },
      "url": "https://x402.org/v1/whois"
    },
    "whois-lookup": {
      "slug": "whois-lookup",
      "price": "0.02",
      "cluster": "web-probe",
      "description": "WHOIS / RDAP domain lookup. Registration date, age, expiration, registrar, contacts, nameservers, DNSSEC, status flags, transfer history. Optional certificate-transparency summary.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "whois",
        "rdap",
        "domain",
        "dns",
        "security"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Apex domain to look up (e.g. 'example.com'). Subdomains are stripped to the registrable domain before query."
          },
          "include_certificates": {
            "type": "boolean",
            "description": "If true, fetch a crt.sh certificate-transparency summary (issuer counts, first/last seen, total certs). Default false."
          }
        },
        "required": [
          "domain"
        ]
      },
      "outputProperties": {
        "domain": {
          "type": "string",
          "description": "Queried domain name in canonical lowercase form."
        },
        "rdap_server": {
          "type": "string",
          "description": "RDAP server URL that answered the lookup for this TLD."
        },
        "registered_date": {
          "type": "string",
          "description": "Domain creation timestamp in ISO 8601 format."
        },
        "expiration_date": {
          "type": "string",
          "description": "Current registration expiration timestamp in ISO 8601 format."
        },
        "age_days": {
          "type": "number",
          "description": "Days elapsed since the domain was first registered."
        },
        "days_until_expiry": {
          "type": "number",
          "description": "Days remaining until the current registration expires; negative if already expired."
        },
        "registrar": {
          "type": "object",
          "description": "Registrar record with name, IANA ID, and abuse contact email and phone."
        },
        "contacts": {
          "type": "object",
          "description": "Registrant, admin, and tech contact roles with any unredacted name, org, email, and country."
        },
        "nameservers": {
          "type": "array",
          "description": "Authoritative nameserver hostnames listed on the domain record."
        },
        "dnssec_signed": {
          "type": "boolean",
          "description": "True if the domain has a signed DNSSEC delegation at the TLD."
        },
        "statuses": {
          "type": "array",
          "description": "EPP status codes on the domain such as clientTransferProhibited or pendingDelete."
        },
        "flags": {
          "type": "array",
          "description": "Derived risk flags like newly-registered, expiring-soon, redacted-whois, or pending-transfer."
        },
        "cert_summary": {
          "type": "object",
          "description": "Certificate-transparency summary with first-seen date, recent issuers, and active cert count."
        }
      },
      "url": "https://x402.org/v1/whois-lookup"
    },
    "wikipedia": {
      "slug": "wikipedia",
      "price": "0.005",
      "cluster": "web-probe",
      "description": "Wikipedia API / encyclopedia lookup. Title, summary, image, sections, Wikidata id, optional 25k-char extract. 300+ languages.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wikipedia",
        "knowledge",
        "lookup",
        "encyclopedia"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search term or article title (e.g. 'Albert Einstein', 'mitochondria'). Resolved via MediaWiki search to the best-matching page."
          },
          "language": {
            "type": "string",
            "description": "Wiki language code (e.g. 'en', 'de', 'ja', 'es'). Default 'en'."
          },
          "full_text": {
            "type": "boolean",
            "description": "If true, include a plain-text extract of the full article body (truncated to ~25k chars). Default false."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "title": {
          "type": "string",
          "description": "Article title as it appears on Wikipedia."
        },
        "canonical_url": {
          "type": "string",
          "description": "Canonical Wikipedia URL for the article page."
        },
        "page_id": {
          "type": "string",
          "description": "Numeric MediaWiki page identifier as a string."
        },
        "wikidata_item": {
          "type": "string",
          "description": "Wikidata Q-identifier linked to the article (e.g. Q42)."
        },
        "language": {
          "type": "string",
          "description": "Wiki language code the article was fetched from (e.g. en, de, ja)."
        },
        "summary": {
          "type": "string",
          "description": "Short plain-text lead extract summarizing the article."
        },
        "description": {
          "type": "string",
          "description": "Short Wikidata-style descriptor (e.g. \"American physicist\")."
        },
        "type": {
          "type": "string",
          "description": "Page type reported by Wikipedia (standard, disambiguation, redirect, etc.)."
        },
        "thumbnail_url": {
          "type": "string",
          "description": "URL of the small thumbnail image for the article, if one exists."
        },
        "image_url": {
          "type": "string",
          "description": "URL of the full-resolution lead image for the article, if one exists."
        },
        "coordinates": {
          "type": "object",
          "description": "Geographic coordinates for the subject with lat and lon fields, if applicable."
        },
        "sections": {
          "type": "array",
          "description": "Ordered list of article section headings with anchors and nesting level."
        },
        "full_text": {
          "type": "string",
          "description": "Plain-text article body, capped at 25k characters when the extract flag is set."
        },
        "full_text_truncated": {
          "type": "boolean",
          "description": "True when full_text was cut off at the 25k-character limit."
        }
      },
      "url": "https://x402.org/v1/wikipedia"
    },
    "wikipedia-lookup": {
      "slug": "wikipedia-lookup",
      "price": "0.005",
      "cluster": "web-probe",
      "description": "Wikipedia API / encyclopedia lookup / structured article fetch. Title, summary, image, sections, Wikidata id, optional 25k-char extract. 300+ languages.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "wikipedia",
        "knowledge",
        "lookup",
        "encyclopedia"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search term or page title (e.g. 'Albert Einstein', 'mitochondria'). Resolved via MediaWiki search to the best-matching article."
          },
          "language": {
            "type": "string",
            "description": "Wiki language code (e.g. 'en', 'de', 'ja', 'es'). Default 'en'. Routes to <lang>.wikipedia.org."
          },
          "full_text": {
            "type": "boolean",
            "description": "If true, include a plain-text extract of the full article body (truncated to ~25k chars). Default false (summary only)."
          }
        },
        "required": [
          "query"
        ]
      },
      "outputProperties": {
        "title": {
          "type": "string",
          "description": "Article title as it appears on Wikipedia (e.g., \"Albert Einstein\")."
        },
        "canonical_url": {
          "type": "string",
          "description": "Permanent Wikipedia URL for the article in the requested language."
        },
        "page_id": {
          "type": "string",
          "description": "Wikipedia's internal numeric page identifier as a string."
        },
        "wikidata_item": {
          "type": "string",
          "description": "Linked Wikidata entity ID (e.g., \"Q937\") for cross-language and structured-data lookups."
        },
        "language": {
          "type": "string",
          "description": "ISO language code of the returned article (e.g., \"en\", \"de\", \"ja\")."
        },
        "summary": {
          "type": "string",
          "description": "Short plain-text lead summary from the article's intro paragraph."
        },
        "description": {
          "type": "string",
          "description": "One-line subtitle describing the article subject (e.g., \"German-born physicist\")."
        },
        "type": {
          "type": "string",
          "description": "Article type from Wikipedia (standard, disambiguation, redirect, no-extract)."
        },
        "thumbnail_url": {
          "type": "string",
          "description": "URL of the small thumbnail image associated with the article, if any."
        },
        "image_url": {
          "type": "string",
          "description": "URL of the full-resolution lead image for the article, if any."
        },
        "coordinates": {
          "type": "object",
          "description": "Geographic coordinates (lat/lon) for articles about places, when present."
        },
        "sections": {
          "type": "array",
          "description": "List of article section headings with their nesting levels and anchors."
        },
        "full_text": {
          "type": "string",
          "description": "Plain-text article body, up to 25,000 characters when the extract option is requested."
        },
        "full_text_truncated": {
          "type": "boolean",
          "description": "True if the article body was cut off at the 25k-character limit."
        }
      },
      "url": "https://x402.org/v1/wikipedia-lookup"
    },
    "xbrl-financials": {
      "slug": "xbrl-financials",
      "price": "0.05",
      "cluster": "edge-finance",
      "description": "SEC XBRL financials. Returns structured financial line items (revenue, net income, EPS, total assets, cash, etc.) for a US-listed ticker. Federal public XBRL data — Bloomberg-killer for fundamentals.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "edge-finance",
        "sec-filings",
        "xbrl",
        "fundamentals",
        "financial-statements",
        "ticker-lookup",
        "earnings-data",
        "xbrl-financials"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string",
            "description": "US-listed ticker (e.g. 'AAPL', 'MSFT'). Either ticker or cik is required."
          },
          "cik": {
            "type": "string",
            "description": "SEC CIK (zero-padded or numeric, e.g. '0000320193'). Use when ticker is ambiguous or unavailable."
          },
          "metrics": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Aliases of financial metrics to return, e.g. ['revenue', 'net_income', 'eps_diluted', 'total_assets', 'cash']. See available_metric_aliases in response. Default: a curated set."
          },
          "unit": {
            "type": "string",
            "enum": [
              "USD",
              "USD/shares",
              "shares",
              "any"
            ],
            "description": "Filter values to one unit. Default 'any'."
          },
          "limit_per_metric": {
            "type": "number",
            "description": "Max datapoints returned per metric. 1-50. Default 10 (most-recent-first)."
          },
          "fy_only": {
            "type": "boolean",
            "description": "If true, only fiscal-year (10-K) values are returned, skipping quarterly 10-Q data. Default false."
          }
        }
      },
      "outputProperties": {
        "ticker": {
          "type": "string",
          "description": "Stock ticker symbol of the US-listed company the financials belong to (e.g. AAPL, MSFT)."
        },
        "company_name": {
          "type": "string",
          "description": "Registered company name from the SEC filing matching the requested ticker."
        },
        "series": {
          "type": "string",
          "description": "Reporting period series (e.g. annual 10-K or quarterly 10-Q) for the returned line items."
        }
      },
      "url": "https://x402.org/v1/xbrl-financials"
    },
    "xlsx-to-csv": {
      "slug": "xlsx-to-csv",
      "price": "0.005",
      "cluster": "mediakit",
      "description": "Excel to CSV / XLSX to CSV / Numbers to CSV / spreadsheet to CSV. Convert any sheet of an .xlsx, .xlsm, .xls, or .ods workbook to CSV. Sheet selection, encoding, quote style. CloudConvert.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "file-conversion",
        "spreadsheet",
        "xlsx",
        "csv",
        "excel-to-csv",
        "xlsx-to-csv"
      ],
      "aliasOf": "excel-to-csv",
      "inputSchema": {
        "type": "object",
        "properties": {
          "xlsx_url": {
            "type": "string",
            "description": "URL of the .xlsx, .xlsm, .xls, or .ods workbook to download and convert."
          },
          "sheet": {
            "type": "string",
            "description": "Name or index of the sheet to convert; defaults to the first sheet if omitted."
          },
          "format": {
            "type": "string",
            "enum": [
              "csv",
              "tsv",
              "json"
            ],
            "description": "Output CSV format options like delimiter, quote style, or encoding (e.g. utf8, latin1)."
          },
          "include_all_sheets": {
            "type": "boolean",
            "description": "When true, converts every sheet in the workbook instead of just the selected one."
          }
        },
        "required": [
          "xlsx_url"
        ]
      },
      "outputProperties": {
        "sheet_count": {
          "type": "string",
          "description": "Number of sheets found in the source workbook."
        },
        "total_rows": {
          "type": "string",
          "description": "Total row count across the converted sheet(s) in the resulting CSV output."
        }
      },
      "url": "https://x402.org/v1/xlsx-to-csv"
    },
    "xml-to-word": {
      "slug": "xml-to-word",
      "price": "0.05",
      "cluster": "mediakit",
      "description": "XML → Microsoft Word (DOCX) converter via CloudConvert. Demand-intel: 43 unmet signals.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "file-conversion",
        "document-conversion",
        "xml",
        "docx",
        "word",
        "xml-to-docx",
        "xml-to-word"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "xml_url": {
            "type": "string",
            "description": "Public URL of the source XML file to convert into a DOCX document."
          },
          "xml": {
            "type": "string",
            "description": "Raw XML content as a string, used when no xml_url is provided."
          }
        }
      },
      "outputProperties": {
        "docx_url": {
          "type": "string",
          "description": "Signed URL to download the converted Microsoft Word (DOCX) file."
        }
      },
      "url": "https://x402.org/v1/xml-to-word"
    },
    "youtube-transcript": {
      "slug": "youtube-transcript",
      "price": "0.01",
      "cluster": "mediakit",
      "description": "YouTube transcript / closed-caption fetcher / video subtitles puller / auto-generated CC reader. Pulls YouTube auto-generated or manual captions for any video and returns the full text plus per-segment {start, duration, text}. Optional language pick. Backed by Supadata's transcript pipeline (server-side; no caller key required). If no transcript is available for the video, returns a 404 with a clear error.",
      "methods": [
        "POST"
      ],
      "requiredEnvVars": [],
      "tags": [
        "mediakit",
        "youtube",
        "transcript",
        "captions",
        "subtitles",
        "video-text",
        "closed-captions",
        "youtube-transcript"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "video_id_or_url": {
            "type": "string",
            "description": "YouTube video ID (11-char) or full URL (youtube.com/watch?v=…, youtu.be/…, /embed/…, /shorts/…)."
          },
          "language": {
            "type": "string",
            "description": "Preferred caption language code (e.g. 'en', 'es', 'ja'). Default: pick the first available."
          },
          "include_chapters": {
            "type": "boolean",
            "description": "Parse chapter timestamps from the video description. Default false."
          }
        },
        "required": [
          "video_id_or_url"
        ]
      },
      "outputProperties": {
        "video_id": {
          "type": "string",
          "description": "YouTube video ID parsed from the input URL or passed through verbatim."
        },
        "title": {
          "type": "string",
          "description": "Video title as listed on YouTube."
        },
        "channel": {
          "type": "string",
          "description": "Channel name that uploaded the video."
        },
        "duration_seconds": {
          "type": "string",
          "description": "Total video length in seconds."
        },
        "language": {
          "type": "string",
          "description": "BCP-47 language code of the returned transcript (e.g. 'en', 'es')."
        },
        "transcript": {
          "type": "string",
          "description": "Full caption text joined into a single string with segment breaks collapsed."
        },
        "segments": {
          "type": "string",
          "description": "Array of {start, duration, text} objects giving per-caption-line timing in seconds."
        },
        "chapters": {
          "type": "string",
          "description": "Array of video chapter markers with title and start time, when YouTube exposes them."
        },
        "source": {
          "type": "string",
          "description": "Caption origin tag: 'manual' for uploaded subtitles or 'auto' for YouTube auto-generated CC."
        }
      },
      "url": "https://x402.org/v1/youtube-transcript"
    }
  }
}