{
  "brand": "Wireframe",
  "version": 2,
  "researched": "2026-10-05",
  "description": "Connections library: free, trial and freemium APIs agents can use. Treg ids are called agent-side via Treg MCP; direct-https entries are public URLs; docs-only entries are never called by this Worker.",
  "disclaimer": "Do not scrape or redistribute Finnhub quote bodies from a public page (Finnhub ToS). This Worker stores no Treg tokens or provider keys and makes no paid calls. Freemium entries may bill — read `cost`.",
  "legend": {
    "status": {
      "free": "$0, no billing (rate limits may apply)",
      "trial": "$0 trial pool on Treg's key; refused past the daily allowance",
      "freemium": "Free tier with quotas OR a cheap per-call bill — read `cost` before use"
    },
    "connect": {
      "treg-mcp": "Agent calls via Treg MCP (catalog_get → call). Key injected by Treg. This site never proxies the body.",
      "direct-https": "Agent calls the public HTTPS URL directly (no Treg).",
      "docs-only": "Documentation only. Keys (if any) live agent-side; Wireframe never calls it.",
      "wireframe-worker": "Served by this Worker on lumasky.xyz."
    }
  },
  "counts": {
    "total": 40,
    "new": 34,
    "by_status": {
      "trial": 13,
      "free": 16,
      "freemium": 11
    },
    "by_category": {
      "market-data": 18,
      "web": 6,
      "dev": 2,
      "utility": 5,
      "ai": 5,
      "webhook": 2,
      "realtime-rooms": 2
    },
    "by_connect": {
      "treg-mcp": 22,
      "direct-https": 11,
      "docs-only": 6,
      "wireframe-worker": 1
    }
  },
  "filters": {
    "status": [
      "free",
      "trial",
      "freemium"
    ],
    "category": [
      "market-data",
      "web",
      "utility",
      "dev",
      "ai",
      "webhook",
      "realtime-rooms"
    ],
    "connect": [
      "treg-mcp",
      "direct-https",
      "docs-only",
      "wireframe-worker"
    ],
    "new": [
      "1",
      "0"
    ]
  },
  "connections": [
    {
      "id": "finnhub.quote",
      "name": "Finnhub quote",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Real-time stock quote by ticker — price, day change.",
      "how": "Treg MCP: catalog_get(\"finnhub.quote\") for params/price, then call(\"finnhub.quote\", {symbol:\"AAPL\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Finnhub ToS: never redistribute quote bodies on a public page. Agent-side only.",
      "new": false
    },
    {
      "id": "finnhub.company.news",
      "name": "Finnhub company news",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Company news by ticker over a date range.",
      "how": "Treg MCP: catalog_get(\"finnhub.company.news\") for params/price, then call(\"finnhub.company.news\", {symbol:\"AAPL\", from:\"2026-10-01\", to:\"2026-10-05\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only; do not republish bodies publicly.",
      "new": true
    },
    {
      "id": "finnhub.company.profile",
      "name": "Finnhub company profile",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Company profile by ticker — industry, market cap, IPO date.",
      "how": "Treg MCP: catalog_get(\"finnhub.company.profile\") for params/price, then call(\"finnhub.company.profile\", {symbol:\"AAPL\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only.",
      "new": true
    },
    {
      "id": "finnhub.symbol.search",
      "name": "Finnhub symbol search",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Search ticker symbols by company name.",
      "how": "Treg MCP: catalog_get(\"finnhub.symbol.search\") for params/price, then call(\"finnhub.symbol.search\", {q:\"nvidia\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Use before a quote when you only have a company name.",
      "new": true
    },
    {
      "id": "finnhub.metrics.basic",
      "name": "Finnhub basic metrics",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Fundamentals by ticker — P/E, margins, 52-week range.",
      "how": "Treg MCP: catalog_get(\"finnhub.metrics.basic\") for params/price, then call(\"finnhub.metrics.basic\", {symbol:\"AAPL\", metric:\"all\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only.",
      "new": true
    },
    {
      "id": "twelvedata.price",
      "name": "Twelve Data price",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Current price of a symbol — one number.",
      "how": "Treg MCP: catalog_get(\"twelvedata.price\") for params/price, then call(\"twelvedata.price\", {symbol:\"AAPL\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only.",
      "new": false
    },
    {
      "id": "twelvedata.quote",
      "name": "Twelve Data quote",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Stock / forex / crypto quote with 52-week range.",
      "how": "Treg MCP: catalog_get(\"twelvedata.quote\") for params/price, then call(\"twelvedata.quote\", {symbol:\"EUR/USD\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Also covers FX pairs.",
      "new": false
    },
    {
      "id": "twelvedata.time-series",
      "name": "Twelve Data time series",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "OHLCV series, 1min → 1month intervals.",
      "how": "Treg MCP: catalog_get(\"twelvedata.time-series\") for params/price, then call(\"twelvedata.time-series\", {symbol:\"AAPL\", interval:\"1day\", outputsize:5}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Keep outputsize small.",
      "new": true
    },
    {
      "id": "twelvedata.symbol.search",
      "name": "Twelve Data symbol search",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Search stock, forex and crypto symbols by name.",
      "how": "Treg MCP: catalog_get(\"twelvedata.symbol.search\") for params/price, then call(\"twelvedata.symbol.search\", {symbol:\"tesla\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "tiingo.iex.latest",
      "name": "Tiingo IEX latest",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Latest stock quote from the IEX feed.",
      "how": "Treg MCP: catalog_get(\"tiingo.iex.latest\") for params/price, then call(\"tiingo.iex.latest\", {tickers:\"aapl\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only.",
      "new": false
    },
    {
      "id": "tiingo.crypto.prices",
      "name": "Tiingo crypto prices",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Crypto OHLCV bars by pair, 1min → daily.",
      "how": "Treg MCP: catalog_get(\"tiingo.crypto.prices\") for params/price, then call(\"tiingo.crypto.prices\", {tickers:\"btcusd\", resampleFreq:\"1day\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": false
    },
    {
      "id": "tiingo.daily.prices",
      "name": "Tiingo daily prices",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "End-of-day adjusted OHLCV, 30+ years of history.",
      "how": "Treg MCP: catalog_get(\"tiingo.daily.prices\") for params/price, then call(\"tiingo.daily.prices\", {ticker:\"aapl\", startDate:\"2026-09-01\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "tiingo.daily.meta",
      "name": "Tiingo ticker meta",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Ticker metadata — name, exchange, available date range.",
      "how": "Treg MCP: catalog_get(\"tiingo.daily.meta\") for params/price, then call(\"tiingo.daily.meta\", {ticker:\"aapl\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "tinyfish.web.search",
      "name": "TinyFish web search",
      "category": "web",
      "status": "free",
      "connect": "treg-mcp",
      "cost": "$0 listed",
      "limits": "Fair use (no published cap in Treg catalog)",
      "does": "Open-web search results.",
      "how": "Treg MCP: catalog_get(\"tinyfish.web.search\") for params/price, then call(\"tinyfish.web.search\", {query:\"cloudflare workers cache api\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": false
    },
    {
      "id": "tinyfish.web.fetch",
      "name": "TinyFish web fetch",
      "category": "web",
      "status": "free",
      "connect": "treg-mcp",
      "cost": "$0 listed (verified by Treg: wallet unchanged)",
      "limits": "Fair use",
      "does": "Fetch clean page content (markdown/text) for a URL.",
      "how": "Treg MCP: catalog_get(\"tinyfish.web.fetch\") for params/price, then call(\"tinyfish.web.fetch\", {urls:[\"https://example.com\"]}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Up to 10 URLs per call; format markdown|html|json.",
      "new": true
    },
    {
      "id": "tinyfish.web.search.news",
      "name": "TinyFish news search",
      "category": "web",
      "status": "free",
      "connect": "treg-mcp",
      "cost": "$0 listed",
      "limits": "Fair use",
      "does": "Search recent news.",
      "how": "Treg MCP: catalog_get(\"tinyfish.web.search.news\") for params/price, then call(\"tinyfish.web.search.news\", {query:\"edge computing\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "tinyfish.web.search.publications",
      "name": "TinyFish publications search",
      "category": "web",
      "status": "free",
      "connect": "treg-mcp",
      "cost": "$0 listed",
      "limits": "Fair use",
      "does": "Search research publications / papers.",
      "how": "Treg MCP: catalog_get(\"tinyfish.web.search.publications\") for params/price, then call(\"tinyfish.web.search.publications\", {query:\"retrieval augmented generation\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "coingecko.simple.price",
      "name": "CoinGecko simple price (via Treg)",
      "category": "market-data",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.00029/call billed to Treg balance",
      "limits": "Prepaid balance",
      "does": "Current crypto price by coin id — market cap, 24h change.",
      "how": "Treg MCP: catalog_get(\"coingecko.simple.price\") for params/price, then call(\"coingecko.simple.price\", {ids:\"bitcoin\", vs_currencies:\"usd\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free. Free alternative: CoinGecko Demo key direct (see coingecko.demo) or tiingo.crypto.prices trial.",
      "new": true
    },
    {
      "id": "coingecko.search",
      "name": "CoinGecko search (via Treg)",
      "category": "market-data",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.00029/call billed",
      "limits": "Prepaid balance",
      "does": "Search coins and exchanges by name/ticker.",
      "how": "Treg MCP: catalog_get(\"coingecko.search\") for params/price, then call(\"coingecko.search\", {query:\"solana\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free.",
      "new": true
    },
    {
      "id": "litescrape.duckduckgo.serp.organic",
      "name": "DuckDuckGo SERP (LiteScrape via Treg)",
      "category": "web",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.00015/call billed",
      "limits": "Prepaid balance",
      "does": "DuckDuckGo organic search results.",
      "how": "Treg MCP: catalog_get(\"litescrape.duckduckgo.serp.organic\") for params/price, then call(\"litescrape.duckduckgo.serp.organic\", {q:\"wireframe ui kit\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free. Prefer tinyfish.web.search ($0) first.",
      "new": true
    },
    {
      "id": "scrapecreators.x.v1-github-trending-repositories",
      "name": "GitHub trending (ScrapeCreators via Treg)",
      "category": "dev",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.00188/call billed",
      "limits": "Prepaid balance",
      "does": "GitHub trending repositories, filterable by language.",
      "how": "Treg MCP: catalog_get(\"scrapecreators.x.v1-github-trending-repositories\") for params/price, then call(\"scrapecreators.x.v1-github-trending-repositories\", {language:\"typescript\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free. For repo metadata use GitHub REST (unauth, free) instead.",
      "new": true
    },
    {
      "id": "marketstack.eod.latest",
      "name": "Marketstack EOD latest (via Treg)",
      "category": "market-data",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.000999/call billed",
      "limits": "Prepaid balance",
      "does": "Latest end-of-day bar by ticker.",
      "how": "Treg MCP: catalog_get(\"marketstack.eod.latest\") for params/price, then call(\"marketstack.eod.latest\", {symbols:\"AAPL\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free. tiingo.daily.prices is the $0 trial alternative.",
      "new": true
    },
    {
      "id": "open-meteo.forecast",
      "name": "Open-Meteo weather",
      "category": "utility",
      "status": "free",
      "connect": "direct-https",
      "cost": "$0, no key",
      "limits": "Non-commercial: < 10,000 calls/day, 5,000/hr, 600/min",
      "does": "Weather forecast + current conditions by lat/lon.",
      "how": "GET https://api.open-meteo.com/v1/forecast?latitude=40.71&longitude=-74.01&current=temperature_2m",
      "docs": "https://open-meteo.com/en/docs",
      "notes": "Commercial use needs a paid plan.",
      "new": true
    },
    {
      "id": "httpbin",
      "name": "httpbin",
      "category": "utility",
      "status": "free",
      "connect": "direct-https",
      "cost": "$0, no key",
      "limits": "Shared public instance, no SLA",
      "does": "HTTP request/response echo and test endpoints (/get, /post, /status/:code, /headers).",
      "how": "GET https://httpbin.org/get · POST https://httpbin.org/post",
      "docs": "https://httpbin.org",
      "notes": "Never send secrets — public service. Wireframe /api/echo is a private alternative.",
      "new": true
    },
    {
      "id": "ipify",
      "name": "ipify",
      "category": "utility",
      "status": "free",
      "connect": "direct-https",
      "cost": "$0, no key",
      "limits": "No published limit",
      "does": "Returns caller's public IP.",
      "how": "GET https://api.ipify.org?format=json",
      "docs": "https://www.ipify.org",
      "notes": "",
      "new": true
    },
    {
      "id": "github.rest.public",
      "name": "GitHub REST (unauthenticated)",
      "category": "dev",
      "status": "free",
      "connect": "direct-https",
      "cost": "$0, no key",
      "limits": "60 requests/hour per IP (unauth)",
      "does": "Read-only public repo, user, release, issue metadata.",
      "how": "GET https://api.github.com/repos/{owner}/{repo} with header User-Agent: <app>",
      "docs": "https://docs.github.com/rest",
      "notes": "Read-only. Shared egress IPs exhaust 60/hr fast — cache responses.",
      "new": true
    },
    {
      "id": "wikipedia.rest",
      "name": "Wikipedia REST",
      "category": "utility",
      "status": "free",
      "connect": "direct-https",
      "cost": "$0, no key",
      "limits": "Be polite; set a descriptive User-Agent; ~200 req/s ceiling",
      "does": "Page summaries, HTML, related pages.",
      "how": "GET https://en.wikipedia.org/api/rest_v1/page/summary/{title}",
      "docs": "https://en.wikipedia.org/api/rest_v1/",
      "notes": "Content is CC BY-SA — attribute.",
      "new": true
    },
    {
      "id": "frankfurter.fx",
      "name": "Frankfurter FX",
      "category": "market-data",
      "status": "free",
      "connect": "direct-https",
      "cost": "$0, no key",
      "limits": "No published cap; ECB reference rates updated daily",
      "does": "Currency exchange rates + history.",
      "how": "GET https://api.frankfurter.app/latest?from=USD&to=EUR (also api.frankfurter.dev/v1/)",
      "docs": "https://frankfurter.dev",
      "notes": "Daily reference rates, not live FX.",
      "new": true
    },
    {
      "id": "dog.ceo",
      "name": "Dog CEO",
      "category": "utility",
      "status": "free",
      "connect": "direct-https",
      "cost": "$0, no key",
      "limits": "No published cap",
      "does": "Random dog images by breed — fun demo payload.",
      "how": "GET https://dog.ceo/api/breeds/image/random",
      "docs": "https://dog.ceo/dog-api/",
      "notes": "",
      "new": true
    },
    {
      "id": "duckduckgo.instant-answer",
      "name": "DuckDuckGo Instant Answer",
      "category": "web",
      "status": "free",
      "connect": "direct-https",
      "cost": "$0, no key",
      "limits": "Unofficial; no SLA",
      "does": "Instant answers / abstracts (NOT full search results).",
      "how": "GET https://api.duckduckgo.com/?q={query}&format=json&no_html=1",
      "docs": "https://duckduckgo.com/api",
      "notes": "Returns topic abstracts only. For SERP use tinyfish.web.search.",
      "new": true
    },
    {
      "id": "huggingface.hub.spaces",
      "name": "Hugging Face Hub — Spaces list",
      "category": "ai",
      "status": "free",
      "connect": "direct-https",
      "cost": "$0, no token for public reads",
      "limits": "Anonymous: ~500 requests / 5 min per IP (ratelimit-policy header)",
      "does": "List public Spaces with likes, SDK, tags. Wireframe syncs this live at /api/spaces.",
      "how": "GET https://huggingface.co/api/spaces?limit=24&sort=likes&direction=-1 — or GET https://lumasky.xyz/api/spaces (cached 10 min)",
      "docs": "https://huggingface.co/docs/hub/api",
      "notes": "Read-only. No HF writes, no token in the Worker.",
      "new": true
    },
    {
      "id": "coingecko.demo",
      "name": "CoinGecko Demo API (direct)",
      "category": "market-data",
      "status": "freemium",
      "connect": "direct-https",
      "cost": "$0 with free Demo key (sign-up)",
      "limits": "~30 calls/min, ~10,000 calls/month (Demo plan)",
      "does": "Crypto prices, markets, coin metadata.",
      "how": "GET https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd with header x-cg-demo-api-key (agent-side key only)",
      "docs": "https://www.coingecko.com/en/api/pricing",
      "notes": "Freemium: key required; keep it agent-side, never in this Worker.",
      "new": true
    },
    {
      "id": "openrouter.free-models",
      "name": "OpenRouter :free models",
      "category": "ai",
      "status": "freemium",
      "connect": "docs-only",
      "cost": "$0 per token on :free variants",
      "limits": "20 req/min; 50 req/day (< $10 credits ever purchased) or 1,000 req/day (≥ $10 purchased); account-wide",
      "does": "OpenAI-compatible chat completions on free model variants; openrouter/free router picks a free model.",
      "how": "Agent-side: POST https://openrouter.ai/api/v1/chat/completions, model \"<id>:free\", Bearer key from the agent's own secret store.",
      "docs": "https://openrouter.ai/docs/api_reference/limits",
      "notes": "Some free providers log prompts for training. Never embed keys in a public Worker.",
      "new": true
    },
    {
      "id": "groq.free-tier",
      "name": "Groq free tier",
      "category": "ai",
      "status": "freemium",
      "connect": "docs-only",
      "cost": "$0 on Free plan",
      "limits": "Per model, per org — e.g. llama-3.1-8b-instant 30 RPM / 14,400 RPD; larger models ~1,000 RPD; token/day caps apply",
      "does": "Very fast OpenAI-compatible inference (Llama, GPT-OSS, Qwen, Whisper).",
      "how": "Agent-side: POST https://api.groq.com/openai/v1/chat/completions with the agent's own key.",
      "docs": "https://console.groq.com/docs/rate-limits",
      "notes": "Limits page in console is authoritative. Docs only.",
      "new": true
    },
    {
      "id": "google.ai-studio.gemini-free",
      "name": "Google AI Studio — Gemini API free tier",
      "category": "ai",
      "status": "freemium",
      "connect": "docs-only",
      "cost": "$0 tokens on Free tier, no card",
      "limits": "Model-specific RPM/RPD (e.g. Flash-Lite ~15 RPM / 1,000 RPD); check AI Studio",
      "does": "Gemini models via generativelanguage API.",
      "how": "Agent-side: POST https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent?key=… (agent's own key)",
      "docs": "https://ai.google.dev/gemini-api/docs/rate-limits",
      "notes": "Free-tier content may be used to improve Google products.",
      "new": true
    },
    {
      "id": "cloudflare.workers-ai",
      "name": "Cloudflare Workers AI",
      "category": "ai",
      "status": "freemium",
      "connect": "docs-only",
      "cost": "$0 within daily free allocation",
      "limits": "10,000 Neurons/day free; billed beyond on Workers Paid",
      "does": "Run open models (Llama, Whisper, embeddings) from a Worker binding.",
      "how": "Worker binding `ai` → env.AI.run(model, input). Not enabled on Wireframe (no binding).",
      "docs": "https://developers.cloudflare.com/workers-ai/platform/pricing/",
      "notes": "Documented only; Wireframe does not call it.",
      "new": true
    },
    {
      "id": "wireframe.echo",
      "name": "Wireframe /api/echo",
      "category": "webhook",
      "status": "free",
      "connect": "wireframe-worker",
      "cost": "$0",
      "limits": "20/min/IP (shared /api bucket); body echoed up to 8 KB; nothing stored",
      "does": "Echoes method, path, query, safe headers and body back as JSON — a stateless webhook/test target.",
      "how": "curl -X POST https://lumasky.xyz/api/echo -H 'content-type: application/json' -d '{\"hello\":\"wire\"}'",
      "docs": "https://lumasky.xyz/api/echo",
      "notes": "Authorization / cookie headers are redacted. No persistence — not an inbox.",
      "new": true
    },
    {
      "id": "webhook.site",
      "name": "webhook.site",
      "category": "webhook",
      "status": "freemium",
      "connect": "direct-https",
      "cost": "$0 free URLs; paid plans for custom/persistent URLs",
      "limits": "Free URLs expire (~7 days) and cap stored requests",
      "does": "Unique inbound URL that records and displays every request — inspect third-party webhooks.",
      "how": "Open https://webhook.site to get a URL, point a webhook at it, inspect in browser.",
      "docs": "https://docs.webhook.site",
      "notes": "Public inbox — never send secrets. Docs only.",
      "new": true
    },
    {
      "id": "livekit.cloud.build",
      "name": "LiveKit Cloud — Build plan",
      "category": "realtime-rooms",
      "status": "free",
      "label": "free tier (usage quotas)",
      "connect": "docs-only",
      "cost": "$0/mo, no credit card",
      "limits": "1,000 agent session min/mo · 5 concurrent agent sessions · 5,000 WebRTC participant min · 100 concurrent connections · $2.50 inference credits · 1 free US local number + 50 inbound min",
      "does": "Hosted WebRTC rooms + voice/video agent deployment.",
      "how": "Agent/app-side with LiveKit SDKs and your own project keys. Wireframe never calls LiveKit APIs.",
      "docs": "https://livekit.io/pricing",
      "notes": "Overages and Ship+ plans are paid.",
      "new": true
    },
    {
      "id": "livekit.oss",
      "name": "LiveKit (self-host)",
      "category": "realtime-rooms",
      "status": "free",
      "label": "open-source",
      "connect": "docs-only",
      "cost": "$0 license (Apache-2.0); you pay your own infra",
      "limits": "Your hardware",
      "does": "Self-hosted WebRTC SFU server.",
      "how": "Run livekit-server yourself (Docker/binary).",
      "docs": "https://github.com/livekit/livekit",
      "notes": "Open-source.",
      "new": true
    }
  ],
  "endpoints": [
    {
      "id": "finnhub.quote",
      "name": "Finnhub quote",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Real-time stock quote by ticker — price, day change.",
      "how": "Treg MCP: catalog_get(\"finnhub.quote\") for params/price, then call(\"finnhub.quote\", {symbol:\"AAPL\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Finnhub ToS: never redistribute quote bodies on a public page. Agent-side only.",
      "new": false
    },
    {
      "id": "finnhub.company.news",
      "name": "Finnhub company news",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Company news by ticker over a date range.",
      "how": "Treg MCP: catalog_get(\"finnhub.company.news\") for params/price, then call(\"finnhub.company.news\", {symbol:\"AAPL\", from:\"2026-10-01\", to:\"2026-10-05\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only; do not republish bodies publicly.",
      "new": true
    },
    {
      "id": "finnhub.company.profile",
      "name": "Finnhub company profile",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Company profile by ticker — industry, market cap, IPO date.",
      "how": "Treg MCP: catalog_get(\"finnhub.company.profile\") for params/price, then call(\"finnhub.company.profile\", {symbol:\"AAPL\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only.",
      "new": true
    },
    {
      "id": "finnhub.symbol.search",
      "name": "Finnhub symbol search",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Search ticker symbols by company name.",
      "how": "Treg MCP: catalog_get(\"finnhub.symbol.search\") for params/price, then call(\"finnhub.symbol.search\", {q:\"nvidia\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Use before a quote when you only have a company name.",
      "new": true
    },
    {
      "id": "finnhub.metrics.basic",
      "name": "Finnhub basic metrics",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "50 calls/team/day",
      "does": "Fundamentals by ticker — P/E, margins, 52-week range.",
      "how": "Treg MCP: catalog_get(\"finnhub.metrics.basic\") for params/price, then call(\"finnhub.metrics.basic\", {symbol:\"AAPL\", metric:\"all\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only.",
      "new": true
    },
    {
      "id": "twelvedata.price",
      "name": "Twelve Data price",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Current price of a symbol — one number.",
      "how": "Treg MCP: catalog_get(\"twelvedata.price\") for params/price, then call(\"twelvedata.price\", {symbol:\"AAPL\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only.",
      "new": false
    },
    {
      "id": "twelvedata.quote",
      "name": "Twelve Data quote",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Stock / forex / crypto quote with 52-week range.",
      "how": "Treg MCP: catalog_get(\"twelvedata.quote\") for params/price, then call(\"twelvedata.quote\", {symbol:\"EUR/USD\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Also covers FX pairs.",
      "new": false
    },
    {
      "id": "twelvedata.time-series",
      "name": "Twelve Data time series",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "OHLCV series, 1min → 1month intervals.",
      "how": "Treg MCP: catalog_get(\"twelvedata.time-series\") for params/price, then call(\"twelvedata.time-series\", {symbol:\"AAPL\", interval:\"1day\", outputsize:5}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Keep outputsize small.",
      "new": true
    },
    {
      "id": "twelvedata.symbol.search",
      "name": "Twelve Data symbol search",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Search stock, forex and crypto symbols by name.",
      "how": "Treg MCP: catalog_get(\"twelvedata.symbol.search\") for params/price, then call(\"twelvedata.symbol.search\", {symbol:\"tesla\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "tiingo.iex.latest",
      "name": "Tiingo IEX latest",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Latest stock quote from the IEX feed.",
      "how": "Treg MCP: catalog_get(\"tiingo.iex.latest\") for params/price, then call(\"tiingo.iex.latest\", {tickers:\"aapl\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Agent-side only.",
      "new": false
    },
    {
      "id": "tiingo.crypto.prices",
      "name": "Tiingo crypto prices",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Crypto OHLCV bars by pair, 1min → daily.",
      "how": "Treg MCP: catalog_get(\"tiingo.crypto.prices\") for params/price, then call(\"tiingo.crypto.prices\", {tickers:\"btcusd\", resampleFreq:\"1day\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": false
    },
    {
      "id": "tiingo.daily.prices",
      "name": "Tiingo daily prices",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "End-of-day adjusted OHLCV, 30+ years of history.",
      "how": "Treg MCP: catalog_get(\"tiingo.daily.prices\") for params/price, then call(\"tiingo.daily.prices\", {ticker:\"aapl\", startDate:\"2026-09-01\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "tiingo.daily.meta",
      "name": "Tiingo ticker meta",
      "category": "market-data",
      "status": "trial",
      "connect": "treg-mcp",
      "cost": "$0 (Treg trial pool)",
      "limits": "20 calls/team/day",
      "does": "Ticker metadata — name, exchange, available date range.",
      "how": "Treg MCP: catalog_get(\"tiingo.daily.meta\") for params/price, then call(\"tiingo.daily.meta\", {ticker:\"aapl\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "tinyfish.web.search",
      "name": "TinyFish web search",
      "category": "web",
      "status": "free",
      "connect": "treg-mcp",
      "cost": "$0 listed",
      "limits": "Fair use (no published cap in Treg catalog)",
      "does": "Open-web search results.",
      "how": "Treg MCP: catalog_get(\"tinyfish.web.search\") for params/price, then call(\"tinyfish.web.search\", {query:\"cloudflare workers cache api\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": false
    },
    {
      "id": "tinyfish.web.fetch",
      "name": "TinyFish web fetch",
      "category": "web",
      "status": "free",
      "connect": "treg-mcp",
      "cost": "$0 listed (verified by Treg: wallet unchanged)",
      "limits": "Fair use",
      "does": "Fetch clean page content (markdown/text) for a URL.",
      "how": "Treg MCP: catalog_get(\"tinyfish.web.fetch\") for params/price, then call(\"tinyfish.web.fetch\", {urls:[\"https://example.com\"]}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Up to 10 URLs per call; format markdown|html|json.",
      "new": true
    },
    {
      "id": "tinyfish.web.search.news",
      "name": "TinyFish news search",
      "category": "web",
      "status": "free",
      "connect": "treg-mcp",
      "cost": "$0 listed",
      "limits": "Fair use",
      "does": "Search recent news.",
      "how": "Treg MCP: catalog_get(\"tinyfish.web.search.news\") for params/price, then call(\"tinyfish.web.search.news\", {query:\"edge computing\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "tinyfish.web.search.publications",
      "name": "TinyFish publications search",
      "category": "web",
      "status": "free",
      "connect": "treg-mcp",
      "cost": "$0 listed",
      "limits": "Fair use",
      "does": "Search research publications / papers.",
      "how": "Treg MCP: catalog_get(\"tinyfish.web.search.publications\") for params/price, then call(\"tinyfish.web.search.publications\", {query:\"retrieval augmented generation\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "",
      "new": true
    },
    {
      "id": "coingecko.simple.price",
      "name": "CoinGecko simple price (via Treg)",
      "category": "market-data",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.00029/call billed to Treg balance",
      "limits": "Prepaid balance",
      "does": "Current crypto price by coin id — market cap, 24h change.",
      "how": "Treg MCP: catalog_get(\"coingecko.simple.price\") for params/price, then call(\"coingecko.simple.price\", {ids:\"bitcoin\", vs_currencies:\"usd\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free. Free alternative: CoinGecko Demo key direct (see coingecko.demo) or tiingo.crypto.prices trial.",
      "new": true
    },
    {
      "id": "coingecko.search",
      "name": "CoinGecko search (via Treg)",
      "category": "market-data",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.00029/call billed",
      "limits": "Prepaid balance",
      "does": "Search coins and exchanges by name/ticker.",
      "how": "Treg MCP: catalog_get(\"coingecko.search\") for params/price, then call(\"coingecko.search\", {query:\"solana\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free.",
      "new": true
    },
    {
      "id": "litescrape.duckduckgo.serp.organic",
      "name": "DuckDuckGo SERP (LiteScrape via Treg)",
      "category": "web",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.00015/call billed",
      "limits": "Prepaid balance",
      "does": "DuckDuckGo organic search results.",
      "how": "Treg MCP: catalog_get(\"litescrape.duckduckgo.serp.organic\") for params/price, then call(\"litescrape.duckduckgo.serp.organic\", {q:\"wireframe ui kit\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free. Prefer tinyfish.web.search ($0) first.",
      "new": true
    },
    {
      "id": "scrapecreators.x.v1-github-trending-repositories",
      "name": "GitHub trending (ScrapeCreators via Treg)",
      "category": "dev",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.00188/call billed",
      "limits": "Prepaid balance",
      "does": "GitHub trending repositories, filterable by language.",
      "how": "Treg MCP: catalog_get(\"scrapecreators.x.v1-github-trending-repositories\") for params/price, then call(\"scrapecreators.x.v1-github-trending-repositories\", {language:\"typescript\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free. For repo metadata use GitHub REST (unauth, free) instead.",
      "new": true
    },
    {
      "id": "marketstack.eod.latest",
      "name": "Marketstack EOD latest (via Treg)",
      "category": "market-data",
      "status": "freemium",
      "connect": "treg-mcp",
      "cost": "~$0.000999/call billed",
      "limits": "Prepaid balance",
      "does": "Latest end-of-day bar by ticker.",
      "how": "Treg MCP: catalog_get(\"marketstack.eod.latest\") for params/price, then call(\"marketstack.eod.latest\", {symbols:\"AAPL\"}). Key injected server-side by Treg — agents never hold it. This site does not proxy the response.",
      "notes": "Cheap but NOT free. tiingo.daily.prices is the $0 trial alternative.",
      "new": true
    }
  ],
  "skills": [
    {
      "id": "wireframe-catalog-browse",
      "summary": "Discover a free/freemium connection for a task before calling anything.",
      "cost": "$0",
      "detail": "/api/skills"
    },
    {
      "id": "wireframe-health-check",
      "summary": "Smoke-test the Wireframe edge.",
      "cost": "$0",
      "detail": "/api/skills"
    },
    {
      "id": "treg-free-quote-agent-side",
      "summary": "Get a stock quote through Treg MCP on the agent side — the public site never proxies Finnhub bodies.",
      "cost": "$0 (trial pools)",
      "detail": "/api/skills"
    },
    {
      "id": "hf-spaces-sync",
      "summary": "Browse live Hugging Face Spaces through Wireframe's cached sync.",
      "cost": "$0",
      "detail": "/api/skills"
    },
    {
      "id": "free-public-api-recipes",
      "summary": "Direct HTTPS utilities agents can hit without any key.",
      "cost": "$0",
      "detail": "/api/skills"
    },
    {
      "id": "webhook-echo-test",
      "summary": "Test a webhook sender against Wireframe's stateless echo.",
      "cost": "$0",
      "detail": "/api/skills"
    },
    {
      "id": "ai-freemium-picker",
      "summary": "Pick a free LLM tier (docs only; keys live agent-side).",
      "cost": "$0 within free tiers",
      "detail": "/api/skills"
    }
  ],
  "routes": [
    "/api/health",
    "/api/catalog",
    "/api/skills",
    "/api/spaces",
    "/api/echo",
    "/api/ping",
    "/api/pass_work",
    "/api/reply"
  ],
  "rate_limit": {
    "limit": 20,
    "remaining": 18,
    "window_seconds": 60
  }
}