{"openapi":"3.0.3","info":{"title":"4yearcycle x402 Data Catalog","version":"1.0.0","description":"General web search reselling the Tavily Search API: query the live web and get back ranked results (title, URL, snippet, relevance score) plus an optional short synthesized answer, with basic or advanced search depth and optional domain include/exclude filters.\n\nBitcoin network state snapshot from mempool.space: confirmed fee rates (fastest/half-hour/hour/economy/minimum, sat/vB), difficulty adjustment progress with forecast change and next retarget, current block height with blocks-and-time to the next halving (block 1,050,000, ~2028), and mempool backlog (pending count, virtual size, total fees in sats). One call for the full on-chain picture agents need for fee budgeting and cycle-aware decisions.\n\nCurated DeFi yield and TVL snapshot from the official DefiLlama yields API: the ~15k-pool dump filtered to non-outlier pools above a TVL floor, optionally by chain and stablecoin-only, ranked by APY or TVL and returned as a compact top-N list with the APY base/reward split, impermanent-loss risk flag and DefiLlama pool id per pool — a pre-filtered answer instead of the raw dump.\n\nReal-time USDT-margined crypto futures snapshot from Binance: mark price, last funding rate, next funding time, open interest, and 5-minute trader long/short positioning ratio per symbol. Covers the majors with funding + positioning in one call — the data paid agents most consistently buy in the crypto derivatives category.\n\nFunded Horizon Europe (2021-2027) research and innovation projects from the official CORDIS bulk dataset (data.europa.eu, CC BY 4.0), filtered by free-text topic/keyword, coordinator country and minimum EU total project cost; returns title, acronym, a 500-character objective excerpt, total cost, the funding call/topic, coordinator country, start date and the CORDIS project URL with proper EU/CORDIS attribution on every record.\n\nLive aircraft positions from the adsb.lol open community ADS-B network (ODbL-licensed, keyless): all aircraft currently seen within a radius of a latitude/longitude point, with position, altitude, ground speed, heading and callsign. Data comes from volunteer ground receivers — coverage depends on receiver density near the queried point, and military/PIA-filtered aircraft may be omitted upstream.\n\nOfficial daily foreign exchange reference rates from the European Central Bank (~30 currencies vs EUR, published each business day around 16:00 CET), rebased on request to any listed currency via EUR cross-rates and filtered to a requested symbol list; returns the reference date, the rate table and the ECB source attribution.\n\nCurrent gas prices for Base, Ethereum and Bitcoin in one call: pending-block base fee plus slow/normal/fast priority-fee tiers in gwei for the EVM chains (medians of the 10/50/90th percentile rewards over the last 10 blocks via public JSON-RPC), and slow/normal/fast sat/vB tiers for Bitcoin from the mempool.space fee estimator; 60-second server-side cache.\n\nGlobal news headline search over the GDELT DOC 2.0 API, which monitors worldwide online news in 65 languages and indexes articles within minutes of publication: free-text query with GDELT operators (quoted phrases, OR, domain:), optionally filtered by source country and language over a recent window up to 7 days; returns a deduplicated, compact JSON list per article with title, URL, domain, first-seen timestamp (ISO 8601), source country and language.\n\nEU public procurement tender notices from the official TED (Tenders Electronic Daily) v3 API, filtered by CPV product/service code, country of performance and free-text keywords over a recent publication window; returns structured JSON per notice with title, buyer, deadline, publication date, CPV codes, notice URL and German PDF link.\n\nERC-20 token safety screen from the GoPlus Security contract-audit engine: honeypot detection, buy/sell tax, source verification, proxy/mintable/owner-privilege flags, holder and LP-holder counts, and top-3 holder concentration on Ethereum, Base, BSC or Arbitrum — ~60 raw audit flags curated into a dozen typed fields plus a single human-readable risks[] list an agent can gate a trade on.\n\nGerman weather observations and forecast (temperature, precipitation, wind, sunshine, cloud cover, condition) for a coordinate or DWD station, sourced from the Deutscher Wetterdienst (DWD) Open Data feeds via the free Bright Sky JSON proxy; returns one compact record per hour over the requested window plus the resolved DWD station and a CC BY 4.0 DWD attribution."},"servers":[{"url":"https://4yearcycle.com/x402"}],"paths":{"/web-search":{"get":{"summary":"General web search (Tavily) with ranked results and an optional short answer","description":"General web search reselling the Tavily Search API: query the live web and get back ranked results (title, URL, snippet, relevance score) plus an optional short synthesized answer, with basic or advanced search depth and optional domain include/exclude filters.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":400},"example":"who is Leo Messi","description":"Search query"},{"name":"max","in":"query","schema":{"type":"integer","default":5,"minimum":1,"maximum":10},"description":"Maximum number of results"},{"name":"depth","in":"query","schema":{"type":"string","enum":["basic","advanced"],"default":"basic"},"description":"Search depth"},{"name":"include_domains","in":"query","schema":{"type":"string"},"example":"wikipedia.org","description":"Comma-separated domains to include"},{"name":"exclude_domains","in":"query","schema":{"type":"string"},"example":"pinterest.com","description":"Comma-separated domains to exclude"}],"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"properties":{"query":{"type":"string","description":"Query as sent to Tavily"},"count":{"type":"integer","description":"Number of results returned"},"results":{"type":"array","description":"Ranked search results, most relevant first","items":{"type":"object","properties":{"title":{"type":"string","description":"Page title as indexed by Tavily"},"url":{"type":"string","description":"Source URL"},"snippet":{"type":"string","description":"Tavily's extracted content for this result, capped to 500 characters"},"score":{"type":"number","description":"Tavily relevance score for this result (higher = more relevant)"}},"required":["title","url","snippet","score"]}},"answer":{"type":"string","nullable":true,"description":"Tavily's short synthesized answer, null if unavailable"},"responseTimeMs":{"type":"integer","description":"Upstream Tavily response time in milliseconds"}},"required":["query","count","results"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/btc":{"get":{"summary":"BTC fees, difficulty, mempool backlog and halving countdown in one call","description":"Bitcoin network state snapshot from mempool.space: confirmed fee rates (fastest/half-hour/hour/economy/minimum, sat/vB), difficulty adjustment progress with forecast change and next retarget, current block height with blocks-and-time to the next halving (block 1,050,000, ~2028), and mempool backlog (pending count, virtual size, total fees in sats). One call for the full on-chain picture agents need for fee budgeting and cycle-aware decisions.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"parameters":[],"responses":{"200":{"description":"Bitcoin on-chain state snapshot","content":{"application/json":{"schema":{"properties":{"fees":{"type":"object","description":"Confirmed fee rates in sat/vB (fastest, half-hour, hour, economy, minimum)","properties":{"fastest":{"type":"integer"},"halfHour":{"type":"integer"},"hour":{"type":"integer"},"economy":{"type":"integer"},"minimum":{"type":"integer"}}},"difficulty":{"type":"object","description":"Difficulty epoch progress and forecast change","properties":{"progressPercent":{"type":"number"},"difficultyChangePct":{"type":"number"},"nextRetargetHeight":{"type":"integer"},"remainingBlocks":{"type":"integer"},"estimatedRetargetDate":{"type":"integer","description":"Epoch ms"}}},"blockchain":{"type":"object","description":"Blockchain tip and halving countdown","properties":{"height":{"type":"integer"},"halving":{"type":"object","properties":{"nextHeight":{"type":"integer"},"blocksRemaining":{"type":"integer"},"estimatedSecondsRemaining":{"type":"integer"}}}}},"mempool":{"type":"object","description":"Mempool backlog","properties":{"count":{"type":"integer"},"vsizeBytes":{"type":"integer"},"totalFeeSat":{"type":"integer"}}}},"required":["fees","difficulty","blockchain","mempool"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/defi-yields":{"get":{"summary":"Top DeFi pools by APY or TVL, filtered by chain, TVL floor and stablecoin flag","description":"Curated DeFi yield and TVL snapshot from the official DefiLlama yields API: the ~15k-pool dump filtered to non-outlier pools above a TVL floor, optionally by chain and stablecoin-only, ranked by APY or TVL and returned as a compact top-N list with the APY base/reward split, impermanent-loss risk flag and DefiLlama pool id per pool — a pre-filtered answer instead of the raw dump.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}},"parameters":[{"name":"chain","in":"query","schema":{"type":"string"},"example":"Base","description":"Optional chain filter (DefiLlama chain name, case-insensitive); empty = all chains"},{"name":"minTvlUsd","in":"query","schema":{"type":"integer","default":10000000},"description":"Minimum pool TVL in USD"},{"name":"stablecoinOnly","in":"query","schema":{"type":"boolean","default":false},"description":"Keep only stablecoin pools"},{"name":"top","in":"query","schema":{"type":"integer","default":20,"maximum":100},"description":"Maximum number of pools returned"},{"name":"sort","in":"query","schema":{"type":"string","enum":["apy","tvl"],"default":"apy"},"description":"Ranking order: highest APY or largest TVL first"}],"responses":{"200":{"description":"Curated yield snapshot","content":{"application/json":{"schema":{"properties":{"count":{"type":"integer","description":"Number of pools returned (after filtering and top cap)"},"generatedAt":{"type":"integer","description":"Epoch ms when the snapshot was generated"},"pools":{"type":"array","description":"Curated pools in the requested sort order","items":{"type":"object","properties":{"project":{"type":"string","description":"DefiLlama project slug, e.g. aave-v3, lido, aerodrome-v1"},"symbol":{"type":"string","description":"Pool token symbol(s), e.g. STETH or USDC-AERO"},"chain":{"type":"string","description":"Chain name as used by DefiLlama, e.g. Ethereum, Base, Arbitrum"},"tvlUsd":{"type":"number","description":"Pool TVL in USD"},"apy":{"type":"number","description":"Total APY in percent (base + reward)"},"apyBase":{"type":"number","nullable":true,"description":"Base (fee/interest) APY in percent, null if not split out"},"apyReward":{"type":"number","nullable":true,"description":"Reward-token incentive APY in percent, null if none"},"ilRisk":{"type":"string","description":"Impermanent-loss risk flag from DefiLlama: yes or no"},"stablecoin":{"type":"boolean","description":"True if DefiLlama classifies the pool as stablecoin-only"},"poolId":{"type":"string","description":"DefiLlama pool UUID, usable against yields.llama.fi/chart/{poolId}"}},"required":["project","symbol","chain","tvlUsd","apy","poolId"]}}},"required":["count","generatedAt","pools"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/derivatives":{"get":{"summary":"Funding rates, open interest and long/short positioning for major perpetuals","description":"Real-time USDT-margined crypto futures snapshot from Binance: mark price, last funding rate, next funding time, open interest, and 5-minute trader long/short positioning ratio per symbol. Covers the majors with funding + positioning in one call — the data paid agents most consistently buy in the crypto derivatives category.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"parameters":[{"name":"symbols","in":"query","schema":{"type":"string"},"example":"BTCUSDT,ETHUSDT,SOLUSDT","description":"Comma-separated USDT-margined futures symbols (max 25); defaults to the top 10 majors"}],"responses":{"200":{"description":"Derivatives snapshot","content":{"application/json":{"schema":{"properties":{"count":{"type":"integer","description":"Number of symbol rows returned"},"generatedAt":{"type":"integer","description":"Epoch ms when the snapshot was generated"},"rows":{"type":"array","description":"Per-symbol derivatives snapshot","items":{"type":"object","properties":{"symbol":{"type":"string","description":"Binance USDT-margined futures symbol"},"markPrice":{"type":"number","description":"Mark price in USDT"},"indexPrice":{"type":"number","description":"Index price in USDT"},"lastFundingRate":{"type":"number","description":"Last funding rate as a decimal fraction (e.g. 0.00005 = 0.005%)"},"fundingRatePct":{"type":"number","description":"Last funding rate in percent"},"nextFundingTime":{"type":"integer","description":"Epoch ms of the next funding settlement"},"openInterest":{"type":"number","nullable":true,"description":"Open interest in base units (coins), null if lookup failed"},"longShortRatio":{"type":"number","nullable":true,"description":"Long/short account ratio, null if lookup failed"},"longAccountPct":{"type":"number","nullable":true,"description":"Percentage of accounts long, null if lookup failed"}},"required":["symbol","markPrice","lastFundingRate"]}}},"required":["count","generatedAt","rows"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/eu-grants":{"get":{"summary":"Funded Horizon Europe research grants by topic, coordinator country and funding size","description":"Funded Horizon Europe (2021-2027) research and innovation projects from the official CORDIS bulk dataset (data.europa.eu, CC BY 4.0), filtered by free-text topic/keyword, coordinator country and minimum EU total project cost; returns title, acronym, a 500-character objective excerpt, total cost, the funding call/topic, coordinator country, start date and the CORDIS project URL with proper EU/CORDIS attribution on every record.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"parameters":[{"name":"topic","in":"query","schema":{"type":"string"},"example":"carbon capture","description":"Free-text keyword over title, acronym, objective and funding call code"},{"name":"country","in":"query","schema":{"type":"string"},"example":"DE,AT","description":"Comma-separated ISO2 coordinator country codes"},{"name":"programme","in":"query","schema":{"type":"string"},"example":"HORIZON","description":"Framework programme filter (dataset currently covers Horizon Europe only)"},{"name":"minFunding","in":"query","schema":{"type":"integer","default":0},"description":"Minimum total project cost in EUR"},{"name":"max","in":"query","schema":{"type":"integer","default":20,"maximum":200},"description":"Maximum number of projects returned"}],"responses":{"200":{"description":"Matching Horizon Europe projects","content":{"application/json":{"schema":{"properties":{"count":{"type":"integer","description":"Number of projects returned (after filtering and the max cap)"},"projects":{"type":"array","description":"Matching Horizon Europe projects, as recorded in the CORDIS bulk dataset","items":{"type":"object","properties":{"title":{"type":"string","description":"Project title"},"acronym":{"type":"string","description":"Project acronym"},"objective":{"type":"string","description":"Objective/abstract text, truncated to 500 characters"},"totalCost":{"type":"number","nullable":true,"description":"Total project cost in EUR as reported by CORDIS"},"fundedUnder":{"type":"string","nullable":true,"description":"Funding call/topic code (or framework programme if no topic is recorded)"},"coordinatorCountry":{"type":"string","nullable":true,"description":"ISO 3166-1 alpha-2 country of the project coordinator organisation, null if no coordinator role is recorded"},"startDate":{"type":"string","nullable":true,"description":"Project start date (YYYY-MM-DD)"},"status":{"type":"string","nullable":true,"description":"CORDIS project status, e.g. SIGNED, CLOSED, TERMINATED"},"cordisUrl":{"type":"string","description":"Official CORDIS project page"},"attribution":{"type":"string","description":"Required CC BY 4.0 attribution: © European Union, CORDIS"}},"required":["title","acronym","cordisUrl","attribution"]}},"source":{"type":"string","description":"Always \"CORDIS\" — the EU's Community Research and Development Information Service"},"attribution":{"type":"string","description":"Required CC BY 4.0 attribution for the dataset as a whole"}},"required":["count","projects","source","attribution"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/flights":{"get":{"summary":"Live aircraft positions near a point (adsb.lol open ADS-B network)","description":"Live aircraft positions from the adsb.lol open community ADS-B network (ODbL-licensed, keyless): all aircraft currently seen within a radius of a latitude/longitude point, with position, altitude, ground speed, heading and callsign. Data comes from volunteer ground receivers — coverage depends on receiver density near the queried point, and military/PIA-filtered aircraft may be omitted upstream.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number"},"example":51.5,"description":"Latitude of the query point, decimal degrees"},{"name":"lon","in":"query","required":true,"schema":{"type":"number"},"example":-0.12,"description":"Longitude of the query point, decimal degrees"},{"name":"radius","in":"query","schema":{"type":"integer","default":100,"maximum":250},"description":"Search radius in nautical miles"}],"responses":{"200":{"description":"Aircraft near the given point","content":{"application/json":{"schema":{"properties":{"count":{"type":"integer","description":"Number of aircraft returned (capped at 200)"},"attribution":{"type":"string","description":"Required data source attribution (ODbL)"},"aircraft":{"type":"array","description":"Aircraft currently seen within the radius","items":{"type":"object","properties":{"icao24":{"type":"string","description":"24-bit ICAO aircraft address, hex"},"callsign":{"type":"string","nullable":true,"description":"Flight callsign as broadcast, trimmed; null if not transmitted"},"lat":{"type":"number","description":"Latitude, WGS84 degrees"},"lon":{"type":"number","description":"Longitude, WGS84 degrees"},"altitudeM":{"type":"number","nullable":true,"description":"Barometric altitude in meters, converted from feet; null if unknown or on ground without a reading"},"velocityMs":{"type":"number","nullable":true,"description":"Ground speed in meters/second, converted from knots"},"heading":{"type":"number","nullable":true,"description":"True track over ground in degrees, 0-360"},"onGround":{"type":"boolean","description":"True if the aircraft reports itself on the ground"}},"required":["icao24","lat","lon"]}}},"required":["count","attribution","aircraft"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/fx-rates":{"get":{"summary":"Daily ECB reference exchange rates, any base currency, optional symbol filter","description":"Official daily foreign exchange reference rates from the European Central Bank (~30 currencies vs EUR, published each business day around 16:00 CET), rebased on request to any listed currency via EUR cross-rates and filtered to a requested symbol list; returns the reference date, the rate table and the ECB source attribution.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"parameters":[{"name":"base","in":"query","schema":{"type":"string","default":"EUR"},"example":"USD","description":"Base currency (ISO 4217); EUR or any ECB-listed currency, cross-rates computed via EUR"},{"name":"symbols","in":"query","schema":{"type":"string"},"example":"EUR,GBP,JPY","description":"Optional comma-separated currency codes to filter the rate table; unknown codes are ignored"}],"responses":{"200":{"description":"Daily reference rates for the requested base","content":{"application/json":{"schema":{"properties":{"base":{"type":"string","description":"Base currency of the rate table (ISO 4217)"},"date":{"type":"string","description":"ECB reference date of the rates (YYYY-MM-DD, last business day)"},"rates":{"type":"object","description":"Units of each quoted currency per 1 unit of base, e.g. rates.USD = USD per base. ECB publishes vs EUR; other bases are cross-rates via EUR rounded to 6 decimals.","additionalProperties":{"type":"number"}},"source":{"type":"string","description":"Always \"ECB\" — European Central Bank euro foreign exchange reference rates"},"notice":{"type":"string","description":"ECB attribution notice: the underlying data is available free of charge from the ECB; cross-rates are computed values"}},"required":["base","date","rates","source","notice"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/gas-oracle":{"get":{"summary":"Current gas: base fee + priority tiers for Base/Ethereum, sat/vB tiers for Bitcoin","description":"Current gas prices for Base, Ethereum and Bitcoin in one call: pending-block base fee plus slow/normal/fast priority-fee tiers in gwei for the EVM chains (medians of the 10/50/90th percentile rewards over the last 10 blocks via public JSON-RPC), and slow/normal/fast sat/vB tiers for Bitcoin from the mempool.space fee estimator; 60-second server-side cache.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"parameters":[{"name":"chains","in":"query","schema":{"type":"string","default":"base,ethereum,bitcoin"},"example":"base,eth,btc","description":"Comma-separated chains (base, ethereum/eth, bitcoin/btc)"}],"responses":{"200":{"description":"Gas quotes","content":{"application/json":{"schema":{"properties":{"count":{"type":"integer","description":"Number of chain quotes returned"},"chains":{"type":"array","description":"One quote per requested chain, in requested order","items":{"type":"object","properties":{"chain":{"type":"string","description":"Canonical chain name: base, ethereum or bitcoin"},"kind":{"type":"string","enum":["evm","btc"],"description":"Fee model: evm = gwei fields, btc = satPerVb field"},"gasPriceGwei":{"type":"number","description":"EVM only: legacy eth_gasPrice suggestion in gwei"},"baseFeeGwei":{"type":"number","description":"EVM only: pending-block EIP-1559 base fee in gwei"},"priorityGwei":{"type":"object","description":"EVM only: suggested priority fee (tip) tiers in gwei; add to baseFeeGwei for an effective per-gas price","properties":{"slow":{"type":"number","nullable":true},"normal":{"type":"number","nullable":true},"fast":{"type":"number","nullable":true}}},"rpc":{"type":"string","description":"EVM only: which public RPC answered"},"satPerVb":{"type":"object","description":"Bitcoin only: fee-rate tiers in sat/vB from mempool.space (slow ≈ 1h, normal ≈ 30min, fast = next block)","properties":{"slow":{"type":"number"},"normal":{"type":"number"},"fast":{"type":"number"},"minimum":{"type":"number"}}},"fetchedAt":{"type":"integer","description":"Epoch ms when this chain was actually fetched (server caches for 60 s)"}},"required":["chain","kind","fetchedAt"]}}},"required":["count","chains"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/news-headlines":{"get":{"summary":"Global news headlines (GDELT) by query, source country and language","description":"Global news headline search over the GDELT DOC 2.0 API, which monitors worldwide online news in 65 languages and indexes articles within minutes of publication: free-text query with GDELT operators (quoted phrases, OR, domain:), optionally filtered by source country and language over a recent window up to 7 days; returns a deduplicated, compact JSON list per article with title, URL, domain, first-seen timestamp (ISO 8601), source country and language.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string"},"example":"\"bitcoin regulation\"","description":"Free-text search, GDELT syntax (quoted phrases, OR groups, domain:site.com)"},{"name":"country","in":"query","schema":{"type":"string"},"example":"germany","description":"Optional source-country filter (GDELT country name without spaces or FIPS code); empty = all countries"},{"name":"lang","in":"query","schema":{"type":"string","default":"english"},"example":"english","description":"Article language (GDELT language name); \"any\" = all languages"},{"name":"hours","in":"query","schema":{"type":"integer","default":24,"maximum":168},"description":"Look-back window in hours (up to 7 days)"},{"name":"max","in":"query","schema":{"type":"integer","default":20,"maximum":100},"description":"Maximum number of headlines returned"}],"responses":{"200":{"description":"Matching news headlines","content":{"application/json":{"schema":{"properties":{"count":{"type":"integer","description":"Number of headlines returned (after deduplication and max cap); 0 = no matches in the window"},"articles":{"type":"array","description":"Matching articles, newest first, deduplicated by domain + title","items":{"type":"object","properties":{"title":{"type":"string","description":"Article headline as crawled by GDELT, truncated to 300 characters"},"url":{"type":"string","description":"Canonical article URL"},"domain":{"type":"string","nullable":true,"description":"Publisher domain, e.g. reuters.com"},"seendate":{"type":"string","nullable":true,"description":"When GDELT first saw the article, ISO 8601 UTC"},"sourcecountry":{"type":"string","nullable":true,"description":"Country of the publishing outlet as classified by GDELT, e.g. Germany"},"language":{"type":"string","nullable":true,"description":"Article language as detected by GDELT, e.g. English"}},"required":["title","url"]}}},"required":["count","articles"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/tenders":{"get":{"summary":"EU public procurement tenders (TED) by CPV code, country and keyword","description":"EU public procurement tender notices from the official TED (Tenders Electronic Daily) v3 API, filtered by CPV product/service code, country of performance and free-text keywords over a recent publication window; returns structured JSON per notice with title, buyer, deadline, publication date, CPV codes, notice URL and German PDF link.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"parameters":[{"name":"cpv","in":"query","schema":{"type":"string","default":"45262670"},"example":"45262670,44316000","description":"Comma-separated CPV classification codes"},{"name":"country","in":"query","schema":{"type":"string","default":"DEU"},"example":"DEU,AUT","description":"Comma-separated ISO3 countries of performance"},{"name":"keywords","in":"query","schema":{"type":"string"},"example":"CNC,Laserschneiden","description":"Optional comma-separated keywords matched case-insensitively against title and description"},{"name":"days","in":"query","schema":{"type":"integer","default":14,"maximum":90},"description":"Publication window in days"},{"name":"max","in":"query","schema":{"type":"integer","default":100,"maximum":500},"description":"Maximum number of tenders returned"}],"responses":{"200":{"description":"Matching tenders","content":{"application/json":{"schema":{"properties":{"count":{"type":"integer","description":"Number of tenders returned (after keyword filtering and max cap)"},"tenders":{"type":"array","description":"Matching tender notices, newest first as returned by TED","items":{"type":"object","properties":{"publicationNumber":{"type":"string","description":"TED publication number, unique notice id"},"title":{"type":"string","description":"Notice title (German preferred, else English, else first available language)"},"buyer":{"type":"string","nullable":true,"description":"Contracting authority name"},"deadline":{"type":"string","nullable":true,"description":"Submission deadline as returned by TED (ISO 8601 date-time), null if not stated"},"publicationDate":{"type":"string","nullable":true,"description":"TED publication date"},"noticeType":{"type":"string","nullable":true,"description":"TED notice type code, e.g. cn-standard"},"cpv":{"type":"array","items":{"type":"string"},"description":"CPV classification codes of the notice"},"url":{"type":"string","description":"Human-readable notice page on ted.europa.eu"},"pdfDe":{"type":"string","description":"Direct link to the German PDF of the notice"},"description":{"type":"string","description":"Lot description, truncated to 500 characters"}},"required":["publicationNumber","title","url"]}}},"required":["count","tenders"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/token-safety":{"get":{"summary":"Honeypot, tax and rug-risk screen for an ERC-20 on Ethereum, Base, BSC or Arbitrum","description":"ERC-20 token safety screen from the GoPlus Security contract-audit engine: honeypot detection, buy/sell tax, source verification, proxy/mintable/owner-privilege flags, holder and LP-holder counts, and top-3 holder concentration on Ethereum, Base, BSC or Arbitrum — ~60 raw audit flags curated into a dozen typed fields plus a single human-readable risks[] list an agent can gate a trade on.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}},"parameters":[{"name":"address","in":"query","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"example":"0x6982508145454Ce325dDbE47a25d4ec3d2311933","description":"Token contract address"},{"name":"chain","in":"query","schema":{"type":"string","enum":["eth","base","bsc","arbitrum"],"default":"base"},"example":"eth","description":"Chain name (eth, base, bsc or arbitrum)"}],"responses":{"200":{"description":"Token safety report","content":{"application/json":{"schema":{"properties":{"found":{"type":"boolean","description":"False if GoPlus has no data for this address on this chain (not a token, or not yet indexed)"},"address":{"type":"string","description":"Token contract address as queried"},"chain":{"type":"string","description":"Chain name as queried"},"chainId":{"type":"string","description":"EVM chain id used against GoPlus"},"token":{"type":"object","description":"Token identity as read on-chain","properties":{"name":{"type":"string","nullable":true},"symbol":{"type":"string","nullable":true},"totalSupply":{"type":"number","nullable":true}}},"isHoneypot":{"type":"boolean","nullable":true,"description":"True if the token cannot be sold (the kill criterion), null if not analyzed"},"buyTaxPct":{"type":"number","nullable":true,"description":"Buy tax in percent, null if not analyzed"},"sellTaxPct":{"type":"number","nullable":true,"description":"Sell tax in percent, null if not analyzed"},"isOpenSource":{"type":"boolean","nullable":true,"description":"True if the contract source is verified"},"isProxy":{"type":"boolean","nullable":true,"description":"True if the contract is a proxy whose implementation can change"},"isMintable":{"type":"boolean","nullable":true,"description":"True if new supply can be minted"},"ownerCanChangeBalance":{"type":"boolean","nullable":true,"description":"True if the owner can modify holder balances"},"holderCount":{"type":"integer","nullable":true,"description":"Number of token holders"},"lpHolderCount":{"type":"integer","nullable":true,"description":"Number of liquidity-pool token holders"},"top3HolderPct":{"type":"number","nullable":true,"description":"Combined supply share of the 3 largest holders, in percent"},"listedOnCex":{"type":"boolean","nullable":true,"description":"True if listed on at least one major centralized exchange"},"onGoPlusTrustList":{"type":"boolean","description":"True if GoPlus whitelists this token as a well-known asset"},"risks":{"type":"array","items":{"type":"string"},"description":"Human-readable elevated-risk findings, worst first; empty array = no elevated risks found"}},"required":["found","address","chain","chainId","risks"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}},"/weather-de":{"get":{"summary":"German weather forecast/observations by coordinate or DWD station, hourly","description":"German weather observations and forecast (temperature, precipitation, wind, sunshine, cloud cover, condition) for a coordinate or DWD station, sourced from the Deutscher Wetterdienst (DWD) Open Data feeds via the free Bright Sky JSON proxy; returns one compact record per hour over the requested window plus the resolved DWD station and a CC BY 4.0 DWD attribution.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"parameters":[{"name":"lat","in":"query","schema":{"type":"number"},"example":52.52,"description":"Latitude in decimal degrees; required unless station is given"},{"name":"lon","in":"query","schema":{"type":"number"},"example":13.405,"description":"Longitude in decimal degrees; required unless station is given"},{"name":"station","in":"query","schema":{"type":"string"},"description":"DWD station ID, used instead of lat/lon"},{"name":"hours","in":"query","schema":{"type":"integer","default":24,"maximum":240},"description":"Forecast/observation window in hours from now"},{"name":"tz","in":"query","schema":{"type":"string","default":"Europe/Berlin"},"description":"IANA timezone for returned timestamps"}],"responses":{"200":{"description":"Hourly German weather forecast/observations","content":{"application/json":{"schema":{"properties":{"count":{"type":"integer","description":"Number of hourly records returned"},"station":{"type":"object","nullable":true,"description":"Resolved DWD station used for the forecast","properties":{"dwdStationId":{"type":"string","nullable":true},"stationName":{"type":"string","nullable":true},"lat":{"type":"number","nullable":true},"lon":{"type":"number","nullable":true},"distanceMeters":{"type":"number","nullable":true}}},"forecast":{"type":"array","description":"Hourly weather records over the requested window","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"Record timestamp, ISO 8601 in the requested timezone"},"temperatureC":{"type":"number","nullable":true,"description":"Air temperature in °C"},"precipitationMm":{"type":"number","nullable":true,"description":"Precipitation in mm over the hour"},"precipitationProbabilityPct":{"type":"integer","nullable":true,"description":"Precipitation probability in %, forecast records only"},"windSpeedKmh":{"type":"number","nullable":true,"description":"Mean wind speed in km/h"},"windDirectionDeg":{"type":"integer","nullable":true,"description":"Wind direction in degrees"},"windGustKmh":{"type":"number","nullable":true,"description":"Maximum wind gust in km/h"},"sunshineMinutes":{"type":"number","nullable":true,"description":"Sunshine duration in minutes over the hour"},"cloudCoverPct":{"type":"integer","nullable":true,"description":"Cloud cover in %"},"condition":{"type":"string","nullable":true,"description":"DWD condition code, e.g. dry, rain, snow, fog"},"icon":{"type":"string","nullable":true,"description":"Bright Sky icon name for the condition"}}}},"source":{"type":"string","description":"Always \"DWD\" — Deutscher Wetterdienst"},"attribution":{"type":"string","description":"Required CC BY 4.0 DWD attribution"}},"required":["count","forecast","source","attribution"],"type":"object"}}}},"402":{"description":"Payment required (x402: pay USDC on Base, retry with payment header)"}}}}}}