Overview
Check routing, fetched_at and freshness_seconds where provided. Cache age and defaults vary by endpoint; use the request schema below. A cached response is not a fresh measurement. Catalog checked: 2026-09-15 · router 0.6.0.
Web search & extraction, PDF text, SEO, e-mail & DNS checks, market data, gas fees, DeFi yields, wallet balances and more — 38 endpoints routed across multiple providers and paid with x402 micropayments in USDC or USDT on Base. No API keys, no invoices, no accounts — just HTTP and a wallet.
Daten-Infrastruktur für autonome KI-Agenten — bezahlt pro Anfrage, ohne Vertrag, ohne API-Key.
curl -s -X POST https://agent-margin-router-production.up.railway.app/market-spread \ -H "Content-Type: application/json" \ -H "X-WALLET: 0xYourAgentWallet" \ -d '{"asset": "ETH", "buy_venue": "binance", "sell_venue": "coinbase"}'x402 turns the HTTP 402 status code into a machine-native payment rail. Your agent never leaves the request loop.
So funktioniert's: Anfrage → Zahlung → Daten. Keine Registrierung, kein Vertrag.
Your agent calls an endpoint over plain HTTPS with a JSON body. No signup, no API key.
The API answers 402 with exact payment terms. The agent signs a $0.005–$0.05 USDC or USDT transfer on Base and retries with the X-PAYMENT header.
The facilitator verifies the payment, the router picks the healthiest provider and returns strict JSON — with provenance and billing metadata.
Identify your agent with an X-WALLET: 0x… header and the first 3 calls skip the 402 step entirely. Once exhausted, the API switches to pay-per-use from $0.005 per request. Perfect for integration tests and CI.
Free-Tier: 3 kostenlose Anfragen pro Wallet, danach ab $0.005 pro Request.
Per-endpoint pricing from $0.005 to $0.05. HTTP schemas and prices synchronized with router 0.6.0; examples are documentation samples, not live market readings.
38 Endpunkte mit geprüften Zahlungsanforderungen. Kein Abo, Abrechnung pro Call.
/extract-cleanClean page extraction from any public URL: title, meta description, main text, JSON-LD, language. Optional `schema` keeps only the listed top-level keys. Apify (JS-rendered) with direct-fetch fallback.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "url": "https://example.com"}/market-spreadCross-exchange crypto spread from live tickers: gross spread, fees, modelled slippage, transfer cost and net edge in bps for a given trade size. Ticker/volume based (no full order book).
Analyse, keine Ausführung oder Renditegarantie.
{ "asset": "ETH", "buy_venue": "binance", "sell_venue": "coinbase", "size_usd": 1000}/gas-feesLive EIP-1559 gas fees (slow/standard/fast tiers) plus USD cost per transaction type (transfer, ERC-20 transfer, swap, NFT mint) for Base, Ethereum, Arbitrum, Optimism and Polygon. Aggregated from public RPC nodes – no API key.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "chain": "base"}/token-priceMulti-venue median spot price for any major crypto asset (Binance, Coinbase, Kraken, CoinGecko) with min/max, deviation and confidence score – one call instead of four. No API key.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "asset": "ETH", "quote": "USD"}/wallet-balanceNative + stablecoin balances (ETH, USDC, USDT, DAI, WETH) of any EVM wallet with USD valuation, read directly from public RPC nodes on Base, Ethereum, Arbitrum, Optimism or Polygon. No API key.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "address": "0xf7a181bbe5d29924e800df4ba93418ef94f4e7c2", "chain": "base"}/web-searchLive web search results (title, URL, domain, snippet) for any query, key-less, region-aware.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "query": "x402 micropayments AI agents", "max_results": 5}/email-validateValidate an email address: RFC syntax, MX/A records via DNS-over-HTTPS, disposable and free-provider detection, role-account flag, deliverability score and verdict.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "email": "[email protected]"}/dns-whoisDNS records (A, AAAA, MX, NS, TXT, CNAME, SOA, CAA) via DNS-over-HTTPS plus RDAP/WHOIS registration data (registrar, created/expires, status, nameservers, DNSSEC).
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "domain": "example.com", "record_types": [ "A", "MX", "NS" ]}/pdf-textExtract clean text (per page + full) and metadata from any public PDF URL up to 25 MB / 200 pages.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "url": "https://bitcoin.org/bitcoin.pdf", "max_pages": 3}/seo-checkOn-page SEO audit of any URL: title, meta description, canonical, headings, images without alt, links, Open Graph, structured data, robots.txt/sitemap, prioritized issues and a 0-100 score with grade.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "url": "https://example.com"}/defi-yieldsLive DeFi pool yields (APY, TVL, stablecoin flag) across 100+ chains and protocols from DefiLlama. Filter by chain, asset, project, minimum TVL; sorted by APY.
Analyse, keine Ausführung oder Renditegarantie.
{ "chain": "Base", "asset": "USDC", "limit": 3}/currency-convertFiat currency conversion with ECB reference rates (30+ currencies): amount, source currency, one or many targets. Returns rates, converted amounts and rate date.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "amount": 100, "from": "EUR", "to": [ "USD", "GBP" ]}/geo-ipIP geolocation for IPv4/IPv6: country, region, city, coordinates, timezone, ASN, ISP/org, EU flag, private-range detection.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "ip": "8.8.8.8"}/rss-feedFetch and parse any RSS 2.0 or Atom feed into clean JSON: title, link, published date, author, summary, optional full text content and categories per item.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "url": "https://hnrss.org/frontpage", "max_items": 5}/crypto-ohlcvHistorical OHLCV candles for any major crypto pair (Binance, Coinbase fallback): intervals 1m-1w, up to 500 candles, with period summary (high, low, volume, change %).
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "symbol": "BTC", "interval": "1h", "limit": 3}/ens-resolveResolve an ENS name to its Ethereum address plus text records (url, com.twitter, avatar, ...) via on-chain calls.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "name": "vitalik.eth"}/html-to-markdownConvert any public web page into clean, LLM-ready Markdown: main content only (boilerplate, nav and ads removed), headings, lists, tables and optional links/images preserved. Trafilatura extraction with markdownify fallback, SSRF-guarded fetch, up to 3 MB HTML.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "url": "https://en.wikipedia.org/wiki/Markdown", "include_links": false}/youtube-transcriptFetch the transcript of a YouTube video (manual or auto-generated captions) as timestamped segments plus full text, with language preference and English fallback. Accepts a video id or any YouTube URL. No API key, no download.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "video_id": "dQw4w9WgXcQ", "language": "en"}/github-repo-summaryOne-call overview of any public GitHub repository: description, stars, forks, open issues, primary language and language split (%), topics, license, default branch, README excerpt and the 5 most recent commits.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "repo": "langchain-ai/langchain"}/dex-priceLive DEX price, 24h change, volume and liquidity for any on-chain token (long-tail tokens not listed on CEXs) by contract address or symbol on Base, Ethereum, Arbitrum, Optimism, Polygon, BSC, Avalanche or Solana, with the top liquidity pairs per DEX (DexScreener).
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "token_address": "0x940181a94A35A4569E4529A3CDfB74e38FD98631", "chain": "base"}/tx-statusStatus of any EVM transaction on Base, Ethereum, BSC, Polygon, Arbitrum or Optimism: success/failed/pending, block number, confirmations, gas used, effective gas price, fee, from/to/value and all ERC-20 Transfer events decoded from the receipt logs (contract, symbol, decimals, amount). Public JSON-RPC nodes with fallback.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "tx_hash": "0xabababababababababababababababababababababababababababababababab", "chain": "base"}/erc20-balanceBalances of up to 20 arbitrary ERC-20 tokens for one wallet in a single Multicall3 round-trip: raw and decimal-formatted balance, decimals and symbol per token, on Base, Ethereum, BSC, Polygon, Arbitrum or Optimism.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "wallet_address": "0x1111111111111111111111111111111111111111", "contract_addresses": [ "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913" ], "chain": "base"}/news-searchGlobal news article search across 65+ languages via the GDELT DOC 2.0 API: title, URL, source domain, publication time, language and country per article, with look-back window (e.g. 24h, 7d) and language filter.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "query": "stablecoin regulation", "max_results": 5, "language": "en", "timespan": "3d"}/hn-searchSearch Hacker News stories and comments via the Algolia HN API: title, URL, author, points, comment count, timestamp and HN discussion link; sort by relevance or date, optional tag filter (story, comment, ask_hn, show_hn).
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "query": "x402 payments", "max_results": 5, "sort_by": "date"}/reddit-searchSearch Reddit posts site-wide or within one subreddit: title, URL, subreddit, author, score, upvote ratio, comment count, timestamp and the first 500 characters of the post text; sort by relevance, hot, new, top or comments with a time filter.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "query": "base chain gas fees", "subreddit": "ethereum", "max_results": 5, "sort": "top", "time_filter": "month"}/defi-tvlTotal value locked of a DeFi protocol (by DefiLlama slug: TVL, 1d/7d change, market cap, mcap/TVL ratio, TVL per chain, category) or of a whole chain (TVL, native token, protocol count, top-10 protocols).
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "protocol": "aerodrome"}/fear-greedCrypto market sentiment: the daily Fear & Greed index (0-100) with classification, 1d/7d change and up to 90 days of history from alternative.me.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "limit": 7}/agent-wallet-snapshotOne-call wallet overview for autonomous agents: native balance, ERC-20 balances (default stablecoins + WETH, or any contracts you pass), current gas price, tx count, contract check and USD values incl. total – bundles what would otherwise be 5+ RPC calls. Base, Ethereum, BSC, Polygon, Arbitrum, Optimism.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "wallet_address": "0x1111111111111111111111111111111111111111", "chain": "base"}/url-statusHealth check for any public URL: HTTP status, full redirect chain, response time, content type, SSL certificate validity/expiry/issuer and a security-header audit (HSTS, CSP, X-Frame-Options, …) with score. SSRF-guarded (private/internal targets are rejected).
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "url": "https://example.com"}/web-crawlMini crawler: fetches a start page and follows same-domain links breadth-first (max 10 pages), returning clean LLM-ready Markdown, title, word count and discovered links per page; honours robots.txt by default. SSRF-guarded.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "start_url": "https://docs.example.com", "max_pages": 3}/wikipedia-summaryClean article summary from Wikipedia in any language: title, short description, extract (capped), canonical URL, thumbnail and coordinates; falls back to search when the title is fuzzy. Content CC BY-SA 4.0.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "title": "x402", "language": "en"}/arxiv-searchSearch arXiv preprints: returns id, title, authors, abstract, categories, published/updated dates and PDF links, sortable by relevance or date, optionally filtered by category (e.g. cs.AI).
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "query": "agent micropayments", "max_results": 5, "sort_by": "date"}/npm-packagenpm package intelligence: latest version, license, repository, maintainers, dependency count, publish dates and weekly downloads – ideal for dependency vetting by coding agents.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "name": "express"}/pypi-packagePyPI project intelligence: latest version, summary, license, author, project URLs, Python requirement, declared dependencies, release count and last release date.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "name": "httpx"}/geocodeTurn a place name or address into coordinates, bounding box, address parts and OSM type using OpenStreetMap Nominatim (ODbL); cached 24h.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "query": "Brandenburger Tor, Berlin", "max_results": 1}/domain-rdapDomain registration data via RDAP (the WHOIS successor): registered flag, registrar, status, registration/expiry events, nameservers and DNSSEC – for availability checks and due diligence.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "domain": "agentmarginrouter.com"}/dns-lookupResolve any DNS record type (A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR) over DNS-over-HTTPS with TTLs and DNSSEC validation flag.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "name": "agentmarginrouter.com", "record_type": "A"}/contract-infoSmart-contract metadata from Blockscout for Base, Ethereum, Optimism or Arbitrum: verification status, name, compiler, proxy/implementation, creator, creation tx, token details and function/event names.
Beispiele zeigen das veröffentlichte Antwortformat, keine aktuellen Messwerte.
{ "address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", "chain": "base"}Base URL: https://agent-margin-router-production.up.railway.app — all endpoints speak JSON over HTTPS. Content-Type: application/json.
Vollständige API-Referenz: Authentifizierung, Schemas, Fehlercodes, Beispiele in Python und cURL.
Check routing, fetched_at and freshness_seconds where provided. Cache age and defaults vary by endpoint; use the request schema below. A cached response is not a fresh measurement. Catalog checked: 2026-09-15 · router 0.6.0.
API keys are optional, not required. Access is granted by payment. The protocol is x402: the server replies 402 Payment Required with the exact terms; the client signs an EIP-3009 transferWithAuthorization for USDC or USDT on Base and resends the request with the signed payload base64-encoded in X-PAYMENT. Verification and settlement are performed by the PayAI x402 facilitator (facilitator.payai.network); the v2 header names PAYMENT-SIGNATURE / PAYMENT-RESPONSE are accepted as aliases.
HTTP/1.1 402 Payment RequiredContent-Type: application/json { "x402Version": 1, "error": "payment_required", "accepts": [ { "scheme": "exact", "network": "base", "asset": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", "assetSymbol": "USDC", "maxAmountRequired": "20000", "priceUsd": 0.02, "payTo": "0xf7a181bbe5d29924e800df4ba93418ef94f4e7c2", "resource": "https://agent-margin-router-production.up.railway.app/extract-clean", "description": "Agent Margin Router – Extract Clean: Clean page extraction from any public URL: title, meta description, main text, JSON-LD, language. Optional `schema` keeps only the listed top-level keys. Apify (JS-rendered) with direct-fetch fallback. Pay per call with USDC or USDT on Base via x402 – no API key, no signup. 3 free calls per wallet.", "mimeType": "application/json", "maxTimeoutSeconds": 300, "extra": { "name": "USD Coin", "version": "2", "chainId": 8453, "decimals": 6 }, "outputSchema": { "input": { "type": "http", "method": "POST", "discoverable": true, "bodyType": "json", "bodyFields": { "url": { "type": "string", "format": "uri", "required": true, "description": "Public URL to extract." }, "schema": { "type": "object", "required": false, "description": "Optional JSON schema for the output." }, "instructions": { "type": "string", "required": false, "description": "Optional natural-language hints." } }, "example": { "url": "https://example.com", "schema": { "title": "string", "price": "number" } } }, "output": { "type": "json", "example": { "data": { "url": "https://example.com/", "title": "Example Domain", "description": null, "text": "Example Domain. This domain is for use in illustrative examples in documents...", "json_ld": [], "language": "en" }, "sources_checked": 1, "freshness_seconds": 0, "confidence": 0.9, "cost_usdc": 0.02, "token": "USDC", "fetched_at": "2026-09-13T10:00:00Z", "routing": { "provider": "httpx_direct", "fallback_used": false, "providers_tried": [ "httpx_direct" ], "cache_hit": false, "latency_ms": 380 } } } } }, { "scheme": "exact", "network": "base", "asset": "0xfde4c96c8593536e31f229ea8f37b2ada2699bb2", "assetSymbol": "USDT", "maxAmountRequired": "20000", "priceUsd": 0.02, "payTo": "0xf7a181bbe5d29924e800df4ba93418ef94f4e7c2", "resource": "https://agent-margin-router-production.up.railway.app/extract-clean", "description": "Agent Margin Router – Extract Clean: Clean page extraction from any public URL: title, meta description, main text, JSON-LD, language. Optional `schema` keeps only the listed top-level keys. Apify (JS-rendered) with direct-fetch fallback. Pay per call with USDC or USDT on Base via x402 – no API key, no signup. 3 free calls per wallet.", "mimeType": "application/json", "maxTimeoutSeconds": 300, "extra": { "name": "Tether USD", "version": "1", "chainId": 8453, "decimals": 6 }, "outputSchema": { "input": { "type": "http", "method": "POST", "discoverable": true, "bodyType": "json", "bodyFields": { "url": { "type": "string", "format": "uri", "required": true, "description": "Public URL to extract." }, "schema": { "type": "object", "required": false, "description": "Optional JSON schema for the output." }, "instructions": { "type": "string", "required": false, "description": "Optional natural-language hints." } }, "example": { "url": "https://example.com", "schema": { "title": "string", "price": "number" } } }, "output": { "type": "json", "example": { "data": { "url": "https://example.com/", "title": "Example Domain", "description": null, "text": "Example Domain. This domain is for use in illustrative examples in documents...", "json_ld": [], "language": "en" }, "sources_checked": 1, "freshness_seconds": 0, "confidence": 0.9, "cost_usdc": 0.02, "token": "USDC", "fetched_at": "2026-09-13T10:00:00Z", "routing": { "provider": "httpx_direct", "fallback_used": false, "providers_tried": [ "httpx_direct" ], "cache_hit": false, "latency_ms": 380 } } } } } ], "facilitator": "https://facilitator.payai.network/verify", "free_tier": { "limit": 3, "how_to": "Send header X-WALLET: 0x<your address> (or X-API-KEY) for free requests, then pay via x402." }}X-PAYMENT — request; base64 JSON of the signed x402 payload.X-WALLET — request; EVM address to claim the free tier.PAYMENT-RESPONSE — response; base64 settlement receipt incl. tx hash.X-Free-Remaining — response; free requests left for the wallet.import os, httpx r = httpx.post( "https://agent-margin-router-production.up.railway.app/extract-clean", headers={"X-WALLET": os.environ["AGENT_WALLET"]}, json={"url": "https://example.com"}, timeout=60,)print(r.status_code, r.json())# Nach dem Gratis-Kontingent: 402 prüfen und mit x402-Wallet/SDK bezahlen.import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"asset\":\"ETH\",\"buy_venue\":\"binance\",\"sell_venue\":\"coinbase\",\"size_usd\":1000}")r = httpx.post("https://agent-margin-router-production.up.railway.app/market-spread", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Connect your own payment client directly to Railway. This page prepares commands only: it never holds a wallet, signs a payment or charges you. A client button or a discovery result is not proof of paid compatibility.
AgentCash — acceptance status
One paid DNS call verified with the version-pinned test adapter. Other endpoints and the standard CLI payment flow are not payment-tested.
Use an existing, funded AgentCash wallet. Install locally with yarn add --dev --exact [email protected]. The standard CLI may initialize wallets; do not run onboarding without reviewing its setup.
Official client documentation ↗yarn agentcash check 'https://agent-margin-router-production.up.railway.app/dns-lookup' -b '{"name":"agentmarginrouter.com","record_type":"A"}'Catalog price: 0.005 USDC. Recheck the live quote, network, token and recipient before paying. The generated command uses the documented POST method even if a discovery probe reports another method. AgentCash --max-amount is a decimal USD amount, NOT atomic units.
After a timeout or unclear result, reconcile the settlement receipt and transaction before trying again. Do not issue a fresh authorization automatically. USDT is not covered by these client examples.
Poncho: The direct AMR launch URL returned HTTP 404 during the 15 September 2026 check. No working AMR launch button or paid acceptance is claimed. Poncho catalog ↗
Coinbase Agentic Wallet MCP: Supports checking requirements and making x402 requests using a separately authorized wallet. Connecting AMR’s data MCP server does not connect a payment wallet. No paid MCP-wallet acceptance yet. Setup documentation ↗
pay.sh: Its documented payment rail is Solana. AMR currently quotes Base only; Solana recipient, verification and settlement support are not deployed. Provider documentation ↗
Coinbase Bazaar: A discovery catalog, not a payment wallet. The official DNS validation rejected AMR because its payment challenge lacks the required Bazaar extension. MCP output schemas alone do not establish Bazaar indexing. Indexing requirements ↗
Public, unauthenticated, never billed. Returns service status, per-provider health, Redis connectivity and uptime. Poll it from your orchestrator before dispatching paid requests; returns 503 when degraded.
curl -s https://agent-margin-router-production.up.railway.app/health | jq{ "status": "ok", "version": "0.6.0", "environment": "production", "timestamp": "2026-09-15T15:05:46.691850Z", "uptime_seconds": 92.7, "redis_connected": true, "redis_backend": "redis", "request_count": 22, "error_count": 0, "error_rate": 0, "cache_hits": 0, "cache_misses": 0, "cache_hit_rate": 0, "providers": [ { "name": "apify_web_scraper", "capability": "extract", "healthy": true, "circuit_open": false, "consecutive_failures": 0, "success_rate": 0.9, "avg_latency_ms": 0, "requests": 0 }, { "name": "coingecko", "capability": "market_data", "healthy": true, "circuit_open": false, "consecutive_failures": 0, "success_rate": 0.9, "avg_latency_ms": 0, "requests": 0 }, { "name": "coinmarketcap", "capability": "market_data", "healthy": true, "circuit_open": false, "consecutive_failures": 0, "success_rate": 0.9, "avg_latency_ms": 0, "requests": 0 }, { "name": "binance_public", "capability": "market_data", "healthy": true, "circuit_open": false, "consecutive_failures": 0, "success_rate": 0.9, "avg_latency_ms": 0, "requests": 0 }, { "name": "coinbase_public", "capability": "market_data", "healthy": true, "circuit_open": false, "consecutive_failures": 0, "success_rate": 0.9, "avg_latency_ms": 0, "requests": 0 }, { "name": "defillama", "capability": "market_data", "healthy": true, "circuit_open": false, "consecutive_failures": 0, "success_rate": 0.9, "avg_latency_ms": 0, "requests": 0 }, { "name": "httpx_direct", "capability": "extract", "healthy": true, "circuit_open": false, "consecutive_failures": 0, "success_rate": 0.9, "avg_latency_ms": 0, "requests": 0 } ]}Clean page extraction from any public URL: title, meta description, main text, JSON-LD, language. Optional `schema` keeps only the listed top-level keys. Apify (JS-rendered) with direct-fetch fallback. Price: $0.02 per paid call.
Schema selects top-level fields; do not rely on it for arbitrary structured generation. CSS selectors are not part of the current request model.
urlrequired | string (uri) | Public URL of the page/document to extract. minLength: 1 maxLength: 2083 |
schema | object | null | Optional JSON schema describing the desired output structure. |
instructions | string | null | Optional natural-language hints for the extractor. |
max_age_seconds | integer | Maximum acceptable cache age. 0 forces a fresh fetch. Default: 60. minimum: 0 maximum: 86400 |
{ "url": "https://example.com"}{ "data": { "url": "https://example.com/", "title": "Example Domain", "description": null, "text": "Example Domain. This domain is for use in illustrative examples in documents...", "json_ld": [], "language": "en" }, "sources_checked": 1, "freshness_seconds": 0, "confidence": 0.9, "cost_usdc": 0.02, "token": "USDC", "fetched_at": "2026-09-13T10:00:00Z", "routing": { "provider": "httpx_direct", "fallback_used": false, "providers_tried": [ "httpx_direct" ], "cache_hit": false, "latency_ms": 380 }}datarequired | object | Extracted page data (title, description, text, json_ld, language, ...). |
sources_checkedrequired | integer | Number of providers consulted. |
freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
confidencerequired | number | Confidence score between 0 and 1. minimum: 0 maximum: 1 |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1). |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
{ "properties": { "url": { "type": "string", "maxLength": 2083, "minLength": 1, "format": "uri", "title": "Url", "description": "Public URL of the page/document to extract." }, "schema": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "title": "Schema", "description": "Optional JSON schema describing the desired output structure." }, "instructions": { "anyOf": [ { "type": "string", "maxLength": 2000 }, { "type": "null" } ], "title": "Instructions", "description": "Optional natural-language hints for the extractor." }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "description": "Maximum acceptable cache age. 0 forces a fresh fetch.", "default": 60 } }, "type": "object", "required": [ "url" ], "title": "ExtractCleanRequest", "description": "Request body for ``POST /extract-clean``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"url\":\"https://example.com\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/extract-clean", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Cross-exchange crypto spread from live tickers: gross spread, fees, modelled slippage, transfer cost and net edge in bps for a given trade size. Ticker/volume based (no full order book). Price: $0.05 per paid call.
Read-only analysis, not trading execution or a guaranteed return. Historical yields and modelled fees/slippage do not guarantee an executable opportunity.
assetrequired | string | Asset ticker, e.g. ETH. minLength: 1 maxLength: 20 |
buy_venuerequired | string | Venue to buy on. minLength: 1 maxLength: 40 |
sell_venuerequired | string | Venue to sell on. minLength: 1 maxLength: 40 |
size_usd | number | Notional trade size in USD for slippage estimate. Default: 1000. exclusiveMinimum: 0 maximum: 10000000 |
quote | string | Default: "USDT". minLength: 1 maxLength: 10 |
max_age_seconds | integer | Default: 30. minimum: 0 maximum: 3600 |
{ "asset": "ETH", "buy_venue": "binance", "sell_venue": "coinbase", "size_usd": 1000}{ "asset": "ETH", "quote": "USDT", "buy_venue": "binance", "sell_venue": "coinbase", "buy_price": 3412.1, "sell_price": 3415.85, "gross_spread_bps": 10.99, "fees_bps": 20, "slippage_bps": 4, "transfer_cost": 1.2, "transfer_cost_bps": 12, "net_spread_bps": -25.01, "estimated_net_profit_usd": -2.5, "confidence": 0.9, "execution_risk": "medium", "freshness_seconds": 3, "cost_usdc": 0.05, "token": "USDC", "fetched_at": "2026-09-13T10:00:00Z", "routing": { "provider": "binance,coinbase", "fallback_used": false, "providers_tried": [ "binance", "coinbase" ], "cache_hit": false, "latency_ms": 620 }}assetrequired | string | Siehe veröffentlichtes Schema. |
quoterequired | string | Siehe veröffentlichtes Schema. |
buy_venuerequired | string | Siehe veröffentlichtes Schema. |
sell_venuerequired | string | Siehe veröffentlichtes Schema. |
buy_pricerequired | number | Siehe veröffentlichtes Schema. |
sell_pricerequired | number | Siehe veröffentlichtes Schema. |
gross_spread_bpsrequired | number | Siehe veröffentlichtes Schema. |
fees_bpsrequired | number | Siehe veröffentlichtes Schema. |
slippage_bpsrequired | number | Siehe veröffentlichtes Schema. |
transfer_costrequired | number | Absolute transfer/gas cost in quote units. |
transfer_cost_bpsrequired | number | Siehe veröffentlichtes Schema. |
net_spread_bpsrequired | number | Siehe veröffentlichtes Schema. |
estimated_net_profit_usdrequired | number | Siehe veröffentlichtes Schema. |
confidencerequired | number | minimum: 0 maximum: 1 |
execution_riskrequired | string | Values: ["low","medium","high"]. |
freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
{ "properties": { "asset": { "type": "string", "maxLength": 20, "minLength": 1, "title": "Asset", "description": "Asset ticker, e.g. ETH." }, "buy_venue": { "type": "string", "maxLength": 40, "minLength": 1, "title": "Buy Venue", "description": "Venue to buy on." }, "sell_venue": { "type": "string", "maxLength": 40, "minLength": 1, "title": "Sell Venue", "description": "Venue to sell on." }, "size_usd": { "type": "number", "maximum": 10000000, "exclusiveMinimum": 0, "title": "Size Usd", "description": "Notional trade size in USD for slippage estimate.", "default": 1000 }, "quote": { "type": "string", "maxLength": 10, "minLength": 1, "title": "Quote", "default": "USDT" }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 30 } }, "type": "object", "required": [ "asset", "buy_venue", "sell_venue" ], "title": "MarketSpreadRequest", "description": "Request body for ``POST /market-spread``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"asset\":\"ETH\",\"buy_venue\":\"binance\",\"sell_venue\":\"coinbase\",\"size_usd\":1000}")r = httpx.post("https://agent-margin-router-production.up.railway.app/market-spread", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Live EIP-1559 gas fees (slow/standard/fast tiers) plus USD cost per transaction type (transfer, ERC-20 transfer, swap, NFT mint) for Base, Ethereum, Arbitrum, Optimism and Polygon. Aggregated from public RPC nodes – no API key. Price: $0.005 per paid call.
chain | string | base | ethereum | arbitrum | optimism | polygon Default: "base". minLength: 1 maxLength: 20 |
max_age_seconds | integer | Default: 10. minimum: 0 maximum: 300 |
{ "chain": "base"}{ "chain": "base", "chain_id": 8453, "native_token": "ETH", "native_price_usd": 3412.5, "block_number": 21000000, "base_fee_gwei": 0.0051, "gas_price_gwei": 0.0062, "trend": "stable", "tiers": { "standard": { "max_fee_gwei": 0.0071, "priority_fee_gwei": 0.001, "cost_usd": { "transfer": 0.0005, "swap": 0.0036 } } }, "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "onchain", "cache_hit": false, "latency_ms": 310 }}chainrequired | string | Siehe veröffentlichtes Schema. |
chain_idrequired | integer | Siehe veröffentlichtes Schema. |
native_tokenrequired | string | Siehe veröffentlichtes Schema. |
native_price_usd | number | null | Siehe veröffentlichtes Schema. |
block_numberrequired | integer | Siehe veröffentlichtes Schema. |
base_fee_gweirequired | number | Siehe veröffentlichtes Schema. |
gas_price_gweirequired | number | Siehe veröffentlichtes Schema. |
trendrequired | string | Siehe veröffentlichtes Schema. |
tiersrequired | object | Siehe veröffentlichtes Schema. |
gas_units_assumedrequired | object | Siehe veröffentlichtes Schema. |
freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
{ "properties": { "chain": { "type": "string", "maxLength": 20, "minLength": 1, "title": "Chain", "description": "base | ethereum | arbitrum | optimism | polygon", "default": "base" }, "max_age_seconds": { "type": "integer", "maximum": 300, "minimum": 0, "title": "Max Age Seconds", "default": 10 } }, "type": "object", "title": "GasFeesRequest", "description": "Request body for ``POST /gas-fees``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"chain\":\"base\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/gas-fees", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Multi-venue median spot price for any major crypto asset (Binance, Coinbase, Kraken, CoinGecko) with min/max, deviation and confidence score – one call instead of four. No API key. Price: $0.01 per paid call.
assetrequired | string | Asset ticker, e.g. ETH. minLength: 1 maxLength: 20 |
quote | string | Quote currency, e.g. USD or USDT. Default: "USD". minLength: 1 maxLength: 10 |
venues | array | null | Optional subset of binance, coinbase, kraken, coingecko. |
max_age_seconds | integer | Default: 5. minimum: 0 maximum: 300 |
{ "asset": "ETH", "quote": "USD"}{ "asset": "ETH", "quote": "USD", "price": 3412.42, "price_min": 3411.9, "price_max": 3413.1, "max_deviation_pct": 0.035, "change_24h_pct": 1.8, "sources_checked": 4, "confidence": 0.98, "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "onchain", "cache_hit": false, "latency_ms": 420 }}assetrequired | string | Siehe veröffentlichtes Schema. |
quoterequired | string | Siehe veröffentlichtes Schema. |
pricerequired | number | Siehe veröffentlichtes Schema. |
price_minrequired | number | Siehe veröffentlichtes Schema. |
price_maxrequired | number | Siehe veröffentlichtes Schema. |
max_deviation_pctrequired | number | Siehe veröffentlichtes Schema. |
change_24h_pct | number | null | Siehe veröffentlichtes Schema. |
sourcesrequired | array | Siehe veröffentlichtes Schema. |
sources_failed | object | Siehe veröffentlichtes Schema. |
sources_checkedrequired | integer | Siehe veröffentlichtes Schema. |
confidencerequired | number | minimum: 0 maximum: 1 |
freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
{ "properties": { "asset": { "type": "string", "maxLength": 20, "minLength": 1, "title": "Asset", "description": "Asset ticker, e.g. ETH." }, "quote": { "type": "string", "maxLength": 10, "minLength": 1, "title": "Quote", "description": "Quote currency, e.g. USD or USDT.", "default": "USD" }, "venues": { "anyOf": [ { "items": { "type": "string" }, "type": "array", "maxItems": 6 }, { "type": "null" } ], "title": "Venues", "description": "Optional subset of binance, coinbase, kraken, coingecko." }, "max_age_seconds": { "type": "integer", "maximum": 300, "minimum": 0, "title": "Max Age Seconds", "default": 5 } }, "type": "object", "required": [ "asset" ], "title": "TokenPriceRequest", "description": "Request body for ``POST /token-price``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"asset\":\"ETH\",\"quote\":\"USD\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/token-price", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Native + stablecoin balances (ETH, USDC, USDT, DAI, WETH) of any EVM wallet with USD valuation, read directly from public RPC nodes on Base, Ethereum, Arbitrum, Optimism or Polygon. No API key. Price: $0.01 per paid call.
addressrequired | string | EVM wallet address. pattern: ^0x[0-9a-fA-F]{40}$ |
chain | string | Default: "base". minLength: 1 maxLength: 20 |
tokens | array | null | Token symbols (USDC, USDT, DAI, WETH). Default: all known. |
{ "address": "0xf7a181bbe5d29924e800df4ba93418ef94f4e7c2", "chain": "base"}{ "address": "0xf7a181bbe5d29924e800df4ba93418ef94f4e7c2", "chain": "base", "chain_id": 8453, "block_number": 21000000, "balances": { "ETH": { "balance": 0.012, "usd": 40.95 }, "USDC": { "balance": 12.5, "usd": 12.5 } }, "total_usd": 53.45, "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "onchain", "cache_hit": false, "latency_ms": 280 }}addressrequired | string | Siehe veröffentlichtes Schema. |
chainrequired | string | Siehe veröffentlichtes Schema. |
chain_idrequired | integer | Siehe veröffentlichtes Schema. |
block_numberrequired | integer | Siehe veröffentlichtes Schema. |
balancesrequired | object | Siehe veröffentlichtes Schema. |
total_usdrequired | number | Siehe veröffentlichtes Schema. |
freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
{ "properties": { "address": { "type": "string", "pattern": "^0x[0-9a-fA-F]{40}$", "title": "Address", "description": "EVM wallet address." }, "chain": { "type": "string", "maxLength": 20, "minLength": 1, "title": "Chain", "default": "base" }, "tokens": { "anyOf": [ { "items": { "type": "string" }, "type": "array", "maxItems": 8 }, { "type": "null" } ], "title": "Tokens", "description": "Token symbols (USDC, USDT, DAI, WETH). Default: all known." } }, "type": "object", "required": [ "address" ], "title": "WalletBalanceRequest", "description": "Request body for ``POST /wallet-balance``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"address\":\"0xf7a181bbe5d29924e800df4ba93418ef94f4e7c2\",\"chain\":\"base\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/wallet-balance", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Live web search results (title, URL, domain, snippet) for any query, key-less, region-aware. Price: $0.02 per paid call.
queryrequired | string | Search query. minLength: 1 maxLength: 400 |
max_results | integer | Default: 10. minimum: 1 maximum: 20 |
region | string | DuckDuckGo region, e.g. de-de. Default: "wt-wt". minLength: 2 maxLength: 10 |
max_age_seconds | integer | Accept cached results up to this age. Default: 300. minimum: 0 maximum: 3600 |
{ "query": "x402 micropayments AI agents", "max_results": 5}{ "query": "x402 micropayments AI agents", "region": "wt-wt", "results": [ { "rank": 1, "title": "x402 – HTTP-native payments", "url": "https://www.x402.org/", "domain": "x402.org", "snippet": "An open standard for internet-native payments ..." } ], "result_count": 5, "source": "duckduckgo", "freshness_seconds": 0, "cost_usdc": 0.02, "routing": { "provider": "webtools", "cache_hit": false, "latency_ms": 640 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
queryrequired | string | Siehe veröffentlichtes Schema. |
regionrequired | string | Siehe veröffentlichtes Schema. |
resultsrequired | array | Siehe veröffentlichtes Schema. |
result_countrequired | integer | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "query": { "type": "string", "maxLength": 400, "minLength": 1, "title": "Query", "description": "Search query." }, "max_results": { "type": "integer", "maximum": 20, "minimum": 1, "title": "Max Results", "default": 10 }, "region": { "type": "string", "maxLength": 10, "minLength": 2, "title": "Region", "description": "DuckDuckGo region, e.g. de-de.", "default": "wt-wt" }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "description": "Accept cached results up to this age.", "default": 300 } }, "type": "object", "required": [ "query" ], "title": "WebSearchRequest", "description": "Request body for ``POST /web-search``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"query\":\"x402 micropayments AI agents\",\"max_results\":5}")r = httpx.post("https://agent-margin-router-production.up.railway.app/web-search", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Validate an email address: RFC syntax, MX/A records via DNS-over-HTTPS, disposable and free-provider detection, role-account flag, deliverability score and verdict. Price: $0.01 per paid call.
emailrequired | string | Email address to validate. minLength: 3 maxLength: 320 |
check_mx | boolean | Resolve MX/A records via DNS-over-HTTPS. Default: true. |
{ "email": "[email protected]"}{ "email": "[email protected]", "domain": "example.com", "valid_syntax": true, "disposable": false, "free_provider": false, "role_account": false, "has_mx": true, "deliverability_score": 85, "verdict": "deliverable", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "webtools", "cache_hit": false, "latency_ms": 210 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
emailrequired | string | Siehe veröffentlichtes Schema. |
local_part | string | null | Siehe veröffentlichtes Schema. |
domain | string | null | Siehe veröffentlichtes Schema. |
valid_syntaxrequired | boolean | Siehe veröffentlichtes Schema. |
disposablerequired | boolean | Siehe veröffentlichtes Schema. |
free_providerrequired | boolean | Siehe veröffentlichtes Schema. |
role_accountrequired | boolean | Siehe veröffentlichtes Schema. |
mx_checkedrequired | boolean | Siehe veröffentlichtes Schema. |
has_mx | boolean | null | Siehe veröffentlichtes Schema. |
null_mx | boolean | Default: false. |
mx_records | array | Siehe veröffentlichtes Schema. |
domain_resolves | boolean | null | Siehe veröffentlichtes Schema. |
deliverability_scorerequired | integer | Siehe veröffentlichtes Schema. |
verdictrequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "email": { "type": "string", "maxLength": 320, "minLength": 3, "title": "Email", "description": "Email address to validate." }, "check_mx": { "type": "boolean", "title": "Check Mx", "description": "Resolve MX/A records via DNS-over-HTTPS.", "default": true } }, "type": "object", "required": [ "email" ], "title": "EmailValidateRequest", "description": "Request body for ``POST /email-validate``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"email\":\"[email protected]\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/email-validate", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()DNS records (A, AAAA, MX, NS, TXT, CNAME, SOA, CAA) via DNS-over-HTTPS plus RDAP/WHOIS registration data (registrar, created/expires, status, nameservers, DNSSEC). Price: $0.005 per paid call.
domainrequired | string | Domain name, e.g. example.com. minLength: 3 maxLength: 253 |
record_types | array | null | A, AAAA, MX, NS, TXT, CNAME, SOA, CAA. Default: A AAAA MX NS TXT CNAME. |
include_whois | boolean | Include RDAP/WHOIS registration data. Default: true. |
max_age_seconds | integer | Default: 300. minimum: 0 maximum: 3600 |
{ "domain": "example.com", "record_types": [ "A", "MX", "NS" ]}{ "domain": "example.com", "records": { "A": [ { "ttl": 300, "data": "93.184.215.14" } ], "MX": [], "NS": [ { "ttl": 3600, "data": "a.iana-servers.net." } ] }, "whois": { "registered": true, "registrar": "RESERVED-Internet Assigned Numbers Authority", "created": "1995-08-14T04:00:00Z" }, "errors": {}, "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "webtools", "cache_hit": false, "latency_ms": 380 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
domainrequired | string | Siehe veröffentlichtes Schema. |
recordsrequired | object | Siehe veröffentlichtes Schema. |
whois | object | null | Siehe veröffentlichtes Schema. |
errors | object | Siehe veröffentlichtes Schema. |
{ "properties": { "domain": { "type": "string", "maxLength": 253, "minLength": 3, "title": "Domain", "description": "Domain name, e.g. example.com." }, "record_types": { "anyOf": [ { "items": { "type": "string" }, "type": "array", "maxItems": 8 }, { "type": "null" } ], "title": "Record Types", "description": "A, AAAA, MX, NS, TXT, CNAME, SOA, CAA. Default: A AAAA MX NS TXT CNAME." }, "include_whois": { "type": "boolean", "title": "Include Whois", "description": "Include RDAP/WHOIS registration data.", "default": true }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 300 } }, "type": "object", "required": [ "domain" ], "title": "DnsWhoisRequest", "description": "Request body for ``POST /dns-whois``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"domain\":\"example.com\",\"record_types\":[\"A\",\"MX\",\"NS\"]}")r = httpx.post("https://agent-margin-router-production.up.railway.app/dns-whois", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Extract clean text (per page + full) and metadata from any public PDF URL up to 25 MB / 200 pages. Price: $0.02 per paid call.
urlrequired | string (uri) | Public URL of the PDF (max 25 MB). minLength: 1 maxLength: 2083 |
max_pages | integer | Default: 50. minimum: 1 maximum: 200 |
pages | array | null | 1-based page numbers to extract. |
{ "url": "https://bitcoin.org/bitcoin.pdf", "max_pages": 3}{ "url": "https://bitcoin.org/bitcoin.pdf", "page_count": 9, "pages_extracted": 3, "truncated": true, "char_count": 9800, "word_count": 1500, "metadata": { "title": "Bitcoin: A Peer-to-Peer Electronic Cash System" }, "pages": [ { "page": 1, "chars": 3200, "text": "Bitcoin: A Peer-to-Peer Electronic Cash System ..." } ], "text": "Bitcoin: A Peer-to-Peer Electronic Cash System ...", "freshness_seconds": 0, "cost_usdc": 0.02, "routing": { "provider": "webtools", "cache_hit": false, "latency_ms": 950 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
urlrequired | string | Siehe veröffentlichtes Schema. |
final_urlrequired | string | Siehe veröffentlichtes Schema. |
bytesrequired | integer | Siehe veröffentlichtes Schema. |
fetch_msrequired | integer | Siehe veröffentlichtes Schema. |
page_countrequired | integer | Siehe veröffentlichtes Schema. |
pages_extractedrequired | integer | Siehe veröffentlichtes Schema. |
truncatedrequired | boolean | Siehe veröffentlichtes Schema. |
char_countrequired | integer | Siehe veröffentlichtes Schema. |
word_countrequired | integer | Siehe veröffentlichtes Schema. |
metadatarequired | object | Siehe veröffentlichtes Schema. |
pagesrequired | array | Siehe veröffentlichtes Schema. |
textrequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "url": { "type": "string", "maxLength": 2083, "minLength": 1, "format": "uri", "title": "Url", "description": "Public URL of the PDF (max 25 MB)." }, "max_pages": { "type": "integer", "maximum": 200, "minimum": 1, "title": "Max Pages", "default": 50 }, "pages": { "anyOf": [ { "items": { "type": "integer" }, "type": "array", "maxItems": 200 }, { "type": "null" } ], "title": "Pages", "description": "1-based page numbers to extract." } }, "type": "object", "required": [ "url" ], "title": "PdfTextRequest", "description": "Request body for ``POST /pdf-text``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"url\":\"https://bitcoin.org/bitcoin.pdf\",\"max_pages\":3}")r = httpx.post("https://agent-margin-router-production.up.railway.app/pdf-text", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()On-page SEO audit of any URL: title, meta description, canonical, headings, images without alt, links, Open Graph, structured data, robots.txt/sitemap, prioritized issues and a 0-100 score with grade. Price: $0.01 per paid call.
urlrequired | string (uri) | Page URL to audit. minLength: 1 maxLength: 2083 |
check_robots | boolean | Also probe robots.txt and sitemap.xml. Default: true. |
{ "url": "https://example.com"}{ "url": "https://example.com", "http_status": 200, "https": true, "title": "Example Domain", "title_length": 14, "meta_description": null, "h1": [ "Example Domain" ], "word_count": 30, "images": { "total": 0, "missing_alt": 0 }, "issues": [ { "severity": "high", "code": "missing_meta_description", "message": "No meta description." } ], "score": 62, "grade": "C", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "webtools", "cache_hit": false, "latency_ms": 720 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
urlrequired | string | Siehe veröffentlichtes Schema. |
final_urlrequired | string | Siehe veröffentlichtes Schema. |
http_statusrequired | integer | Siehe veröffentlichtes Schema. |
redirectsrequired | integer | Siehe veröffentlichtes Schema. |
httpsrequired | boolean | Siehe veröffentlichtes Schema. |
load_msrequired | integer | Siehe veröffentlichtes Schema. |
html_bytesrequired | integer | Siehe veröffentlichtes Schema. |
title | string | null | Siehe veröffentlichtes Schema. |
title_lengthrequired | integer | Siehe veröffentlichtes Schema. |
meta_description | string | null | Siehe veröffentlichtes Schema. |
meta_description_lengthrequired | integer | Siehe veröffentlichtes Schema. |
meta_robots | string | null | Siehe veröffentlichtes Schema. |
canonical | string | null | Siehe veröffentlichtes Schema. |
lang | string | null | Siehe veröffentlichtes Schema. |
viewport | string | null | Siehe veröffentlichtes Schema. |
h1required | array | Siehe veröffentlichtes Schema. |
h2_countrequired | integer | Siehe veröffentlichtes Schema. |
word_countrequired | integer | Siehe veröffentlichtes Schema. |
imagesrequired | object | Siehe veröffentlichtes Schema. |
linksrequired | object | Siehe veröffentlichtes Schema. |
open_graphrequired | object | Siehe veröffentlichtes Schema. |
twitter_card | string | null | Siehe veröffentlichtes Schema. |
structured_data_blocksrequired | integer | Siehe veröffentlichtes Schema. |
hreflang_countrequired | integer | Siehe veröffentlichtes Schema. |
robots_txt | object | null | Siehe veröffentlichtes Schema. |
sitemap | object | null | Siehe veröffentlichtes Schema. |
issuesrequired | array | Siehe veröffentlichtes Schema. |
scorerequired | integer | Siehe veröffentlichtes Schema. |
graderequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "url": { "type": "string", "maxLength": 2083, "minLength": 1, "format": "uri", "title": "Url", "description": "Page URL to audit." }, "check_robots": { "type": "boolean", "title": "Check Robots", "description": "Also probe robots.txt and sitemap.xml.", "default": true } }, "type": "object", "required": [ "url" ], "title": "SeoCheckRequest", "description": "Request body for ``POST /seo-check``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"url\":\"https://example.com\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/seo-check", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Live DeFi pool yields (APY, TVL, stablecoin flag) across 100+ chains and protocols from DefiLlama. Filter by chain, asset, project, minimum TVL; sorted by APY. Price: $0.02 per paid call.
Read-only analysis, not trading execution or a guaranteed return. Historical yields and modelled fees/slippage do not guarantee an executable opportunity.
chain | string | null | Chain filter, e.g. Base, Ethereum, Arbitrum. |
asset | string | null | Asset symbol contained in the pool, e.g. USDC. |
project | string | null | Protocol filter, e.g. aave-v3, morpho. |
min_tvl_usd | number | Minimum pool TVL in USD. Default: 100000. minimum: 0 |
stablecoins_only | boolean | Default: false. |
limit | integer | Default: 10. minimum: 1 maximum: 50 |
max_age_seconds | integer | Default: 600. minimum: 0 maximum: 3600 |
{ "chain": "Base", "asset": "USDC", "limit": 3}{ "filters": { "chain": "Base", "asset": "USDC", "project": null, "min_tvl_usd": 100000, "stablecoins_only": false }, "pools": [ { "project": "aave-v3", "chain": "Base", "symbol": "USDC", "tvl_usd": 250000000, "apy": 4.12, "apy_base": 4.12, "apy_reward": null, "stablecoin": true, "il_risk": "no", "pool_id": "..." } ], "pool_count": 1, "total_matching": 27, "source": "defillama", "freshness_seconds": 0, "cost_usdc": 0.02, "routing": { "provider": "datatools", "cache_hit": false, "latency_ms": 640 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
filtersrequired | object | Siehe veröffentlichtes Schema. |
poolsrequired | array | Siehe veröffentlichtes Schema. |
pool_countrequired | integer | Siehe veröffentlichtes Schema. |
total_matchingrequired | integer | Siehe veröffentlichtes Schema. |
filtered_outliers | integer | Default: 0. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "chain": { "anyOf": [ { "type": "string", "maxLength": 40 }, { "type": "null" } ], "title": "Chain", "description": "Chain filter, e.g. Base, Ethereum, Arbitrum." }, "asset": { "anyOf": [ { "type": "string", "maxLength": 40 }, { "type": "null" } ], "title": "Asset", "description": "Asset symbol contained in the pool, e.g. USDC." }, "project": { "anyOf": [ { "type": "string", "maxLength": 60 }, { "type": "null" } ], "title": "Project", "description": "Protocol filter, e.g. aave-v3, morpho." }, "min_tvl_usd": { "type": "number", "minimum": 0, "title": "Min Tvl Usd", "description": "Minimum pool TVL in USD.", "default": 100000 }, "stablecoins_only": { "type": "boolean", "title": "Stablecoins Only", "default": false }, "limit": { "type": "integer", "maximum": 50, "minimum": 1, "title": "Limit", "default": 10 }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 600 } }, "type": "object", "title": "DefiYieldsRequest", "description": "Request body for ``POST /defi-yields``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"chain\":\"Base\",\"asset\":\"USDC\",\"limit\":3}")r = httpx.post("https://agent-margin-router-production.up.railway.app/defi-yields", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Fiat currency conversion with ECB reference rates (30+ currencies): amount, source currency, one or many targets. Returns rates, converted amounts and rate date. Price: $0.005 per paid call.
amount | number | Amount in the source currency. Default: 1. exclusiveMinimum: 0 |
fromrequired | string | ISO-4217 source currency, e.g. EUR. minLength: 3 maxLength: 3 |
torequired | array | Target currencies, e.g. ["USD", "GBP"]. minItems: 1 maxItems: 10 |
{ "amount": 100, "from": "EUR", "to": [ "USD", "GBP" ]}{ "amount": 100, "from_currency": "EUR", "rates": { "USD": 1.0842, "GBP": 0.8391 }, "converted": { "USD": 108.42, "GBP": 83.91 }, "rate_date": "2026-09-11", "source": "frankfurter_ecb", "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "datatools", "cache_hit": false, "latency_ms": 210 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
amountrequired | number | Siehe veröffentlichtes Schema. |
from_currencyrequired | string | Siehe veröffentlichtes Schema. |
ratesrequired | object | Siehe veröffentlichtes Schema. |
convertedrequired | object | Siehe veröffentlichtes Schema. |
rate_date | string | null | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "amount": { "type": "number", "exclusiveMinimum": 0, "title": "Amount", "description": "Amount in the source currency.", "default": 1 }, "from": { "type": "string", "maxLength": 3, "minLength": 3, "title": "From", "description": "ISO-4217 source currency, e.g. EUR." }, "to": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "minItems": 1, "title": "To", "description": "Target currencies, e.g. [\"USD\", \"GBP\"]." } }, "type": "object", "required": [ "from", "to" ], "title": "CurrencyConvertRequest", "description": "Request body for ``POST /currency-convert``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"amount\":100,\"from\":\"EUR\",\"to\":[\"USD\",\"GBP\"]}")r = httpx.post("https://agent-margin-router-production.up.railway.app/currency-convert", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()IP geolocation for IPv4/IPv6: country, region, city, coordinates, timezone, ASN, ISP/org, EU flag, private-range detection. Price: $0.005 per paid call.
iprequired | string | IPv4 or IPv6 address. minLength: 3 maxLength: 45 |
max_age_seconds | integer | Default: 86400. minimum: 0 maximum: 604800 |
{ "ip": "8.8.8.8"}{ "ip": "8.8.8.8", "version": 4, "is_private": false, "country": "United States", "country_code": "US", "region": "California", "city": "Mountain View", "latitude": 37.386, "longitude": -122.0838, "timezone": "America/Los_Angeles", "asn": 15169, "org": "Google LLC", "source": "ipwho.is", "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "datatools", "cache_hit": false, "latency_ms": 180 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
iprequired | string | Siehe veröffentlichtes Schema. |
versionrequired | integer | Siehe veröffentlichtes Schema. |
is_privaterequired | boolean | Siehe veröffentlichtes Schema. |
country | string | null | Siehe veröffentlichtes Schema. |
country_code | string | null | Siehe veröffentlichtes Schema. |
region | string | null | Siehe veröffentlichtes Schema. |
city | string | null | Siehe veröffentlichtes Schema. |
postal | string | null | Siehe veröffentlichtes Schema. |
latitude | number | null | Siehe veröffentlichtes Schema. |
longitude | number | null | Siehe veröffentlichtes Schema. |
timezone | string | null | Siehe veröffentlichtes Schema. |
utc_offset | string | null | Siehe veröffentlichtes Schema. |
asn | string | integer | null | Siehe veröffentlichtes Schema. |
org | string | null | Siehe veröffentlichtes Schema. |
isp | string | null | Siehe veröffentlichtes Schema. |
is_eu | boolean | null | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "ip": { "type": "string", "maxLength": 45, "minLength": 3, "title": "Ip", "description": "IPv4 or IPv6 address." }, "max_age_seconds": { "type": "integer", "maximum": 604800, "minimum": 0, "title": "Max Age Seconds", "default": 86400 } }, "type": "object", "required": [ "ip" ], "title": "GeoIpRequest", "description": "Request body for ``POST /geo-ip``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"ip\":\"8.8.8.8\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/geo-ip", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Fetch and parse any RSS 2.0 or Atom feed into clean JSON: title, link, published date, author, summary, optional full text content and categories per item. Price: $0.01 per paid call.
urlrequired | string (uri) | RSS 2.0 or Atom feed URL. minLength: 1 maxLength: 2083 |
max_items | integer | Default: 20. minimum: 1 maximum: 100 |
include_content | boolean | Include full item content (text-only, truncated). Default: false. |
max_age_seconds | integer | Default: 300. minimum: 0 maximum: 3600 |
{ "url": "https://hnrss.org/frontpage", "max_items": 5}{ "url": "https://hnrss.org/frontpage", "format": "rss", "feed_title": "Hacker News: Front Page", "feed_link": "https://news.ycombinator.com/", "items": [ { "title": "Example story", "link": "https://example.com", "published": "2026-09-11T08:00:00Z", "author": "user", "summary": "...", "categories": [] } ], "item_count": 5, "total_items": 30, "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "datatools", "cache_hit": false, "latency_ms": 400 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
urlrequired | string | Siehe veröffentlichtes Schema. |
formatrequired | string | Siehe veröffentlichtes Schema. |
feed_title | string | null | Siehe veröffentlichtes Schema. |
feed_link | string | null | Siehe veröffentlichtes Schema. |
itemsrequired | array | Siehe veröffentlichtes Schema. |
item_countrequired | integer | Siehe veröffentlichtes Schema. |
total_itemsrequired | integer | Siehe veröffentlichtes Schema. |
{ "properties": { "url": { "type": "string", "maxLength": 2083, "minLength": 1, "format": "uri", "title": "Url", "description": "RSS 2.0 or Atom feed URL." }, "max_items": { "type": "integer", "maximum": 100, "minimum": 1, "title": "Max Items", "default": 20 }, "include_content": { "type": "boolean", "title": "Include Content", "description": "Include full item content (text-only, truncated).", "default": false }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 300 } }, "type": "object", "required": [ "url" ], "title": "RssFeedRequest", "description": "Request body for ``POST /rss-feed``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"url\":\"https://hnrss.org/frontpage\",\"max_items\":5}")r = httpx.post("https://agent-margin-router-production.up.railway.app/rss-feed", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Historical OHLCV candles for any major crypto pair (Binance, Coinbase fallback): intervals 1m-1w, up to 500 candles, with period summary (high, low, volume, change %). Price: $0.005 per paid call.
symbolrequired | string | Base asset, e.g. BTC, ETH, SOL. minLength: 2 maxLength: 12 |
quote | string | Quote asset (USD is mapped to USDT on Binance). Default: "USDT". minLength: 3 maxLength: 6 |
interval | string | 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. Default: "1h". |
limit | integer | Default: 100. minimum: 1 maximum: 500 |
{ "symbol": "BTC", "interval": "1h", "limit": 3}{ "symbol": "BTC", "quote": "USDT", "interval": "1h", "candles": [ { "time": "2026-09-11T06:00:00Z", "open": 64000.1, "high": 64210, "low": 63950.5, "close": 64100.2, "volume": 812.4 } ], "candle_count": 3, "summary": { "first_open": 64000.1, "last_close": 64100.2, "period_high": 64210, "period_low": 63950.5, "period_volume": 2400.1, "change_pct": 0.1564 }, "source": "binance", "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "datatools", "cache_hit": false, "latency_ms": 260 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
symbolrequired | string | Siehe veröffentlichtes Schema. |
quoterequired | string | Siehe veröffentlichtes Schema. |
intervalrequired | string | Siehe veröffentlichtes Schema. |
candlesrequired | array | Siehe veröffentlichtes Schema. |
candle_countrequired | integer | Siehe veröffentlichtes Schema. |
summaryrequired | object | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "symbol": { "type": "string", "maxLength": 12, "minLength": 2, "title": "Symbol", "description": "Base asset, e.g. BTC, ETH, SOL." }, "quote": { "type": "string", "maxLength": 6, "minLength": 3, "title": "Quote", "description": "Quote asset (USD is mapped to USDT on Binance).", "default": "USDT" }, "interval": { "type": "string", "title": "Interval", "description": "1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w.", "default": "1h" }, "limit": { "type": "integer", "maximum": 500, "minimum": 1, "title": "Limit", "default": 100 } }, "type": "object", "required": [ "symbol" ], "title": "CryptoOhlcvRequest", "description": "Request body for ``POST /crypto-ohlcv``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"symbol\":\"BTC\",\"interval\":\"1h\",\"limit\":3}")r = httpx.post("https://agent-margin-router-production.up.railway.app/crypto-ohlcv", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Resolve an ENS name to its Ethereum address plus text records (url, com.twitter, avatar, ...) via on-chain calls. Price: $0.01 per paid call.
namerequired | string | ENS name, e.g. vitalik.eth. minLength: 3 maxLength: 255 |
text_keys | array | ENS text records to read. maxItems: 8 |
max_age_seconds | integer | Default: 3600. minimum: 0 maximum: 86400 |
{ "name": "vitalik.eth"}{ "name": "vitalik.eth", "namehash": "0xee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835", "resolver": "0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41", "address": "0xd8dA6BF26964aF9D7eEd9e03E46415D37aA96045", "texts": { "url": "https://vitalik.ca", "com.twitter": "VitalikButerin", "avatar": null }, "chain": "ethereum", "resolved": true, "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "datatools", "cache_hit": false, "latency_ms": 900 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
namerequired | string | Siehe veröffentlichtes Schema. |
namehashrequired | string | Siehe veröffentlichtes Schema. |
resolver | string | null | Siehe veröffentlichtes Schema. |
address | string | null | Siehe veröffentlichtes Schema. |
texts | object | Siehe veröffentlichtes Schema. |
chainrequired | string | Siehe veröffentlichtes Schema. |
resolvedrequired | boolean | Siehe veröffentlichtes Schema. |
{ "properties": { "name": { "type": "string", "maxLength": 255, "minLength": 3, "title": "Name", "description": "ENS name, e.g. vitalik.eth." }, "text_keys": { "items": { "type": "string" }, "type": "array", "maxItems": 8, "title": "Text Keys", "description": "ENS text records to read." }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 3600 } }, "type": "object", "required": [ "name" ], "title": "EnsResolveRequest", "description": "Request body for ``POST /ens-resolve``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"name\":\"vitalik.eth\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/ens-resolve", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Convert any public web page into clean, LLM-ready Markdown: main content only (boilerplate, nav and ads removed), headings, lists, tables and optional links/images preserved. Trafilatura extraction with markdownify fallback, SSRF-guarded fetch, up to 3 MB HTML. Price: $0.01 per paid call.
urlrequired | string (uri) | Public page URL to convert into LLM-ready Markdown. minLength: 1 maxLength: 2083 |
include_links | boolean | Keep hyperlinks as [text](url). Default: true. |
include_images | boolean | Keep images as . Default: false. |
max_age_seconds | integer | Default: 300. minimum: 0 maximum: 86400 |
{ "url": "https://en.wikipedia.org/wiki/Markdown", "include_links": false}{ "url": "https://en.wikipedia.org/wiki/Markdown", "final_url": "https://en.wikipedia.org/wiki/Markdown", "title": "Markdown - Wikipedia", "markdown": "# Markdown\n\nMarkdown is a lightweight markup language...", "word_count": 2140, "char_count": 14210, "truncated": false, "extraction_method": "trafilatura", "include_links": false, "include_images": false, "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "trafilatura", "cache_hit": false, "latency_ms": 650 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
urlrequired | string | Siehe veröffentlichtes Schema. |
final_urlrequired | string | Siehe veröffentlichtes Schema. |
title | string | null | Siehe veröffentlichtes Schema. |
markdownrequired | string | Siehe veröffentlichtes Schema. |
word_countrequired | integer | Siehe veröffentlichtes Schema. |
char_countrequired | integer | Siehe veröffentlichtes Schema. |
truncated | boolean | Default: false. |
extraction_methodrequired | string | Siehe veröffentlichtes Schema. |
include_linksrequired | boolean | Siehe veröffentlichtes Schema. |
include_imagesrequired | boolean | Siehe veröffentlichtes Schema. |
{ "properties": { "url": { "type": "string", "maxLength": 2083, "minLength": 1, "format": "uri", "title": "Url", "description": "Public page URL to convert into LLM-ready Markdown." }, "include_links": { "type": "boolean", "title": "Include Links", "description": "Keep hyperlinks as [text](url).", "default": true }, "include_images": { "type": "boolean", "title": "Include Images", "description": "Keep images as .", "default": false }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 300 } }, "type": "object", "required": [ "url" ], "title": "HtmlToMarkdownRequest", "description": "Request body for ``POST /html-to-markdown``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"url\":\"https://en.wikipedia.org/wiki/Markdown\",\"include_links\":false}")r = httpx.post("https://agent-margin-router-production.up.railway.app/html-to-markdown", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Fetch the transcript of a YouTube video (manual or auto-generated captions) as timestamped segments plus full text, with language preference and English fallback. Accepts a video id or any YouTube URL. No API key, no download. Price: $0.02 per paid call.
video_idrequired | string | 11-char YouTube video id or any YouTube URL. minLength: 11 maxLength: 300 |
language | string | Preferred caption language (BCP-47, e.g. en, de, pt-BR). Default: "en". minLength: 2 maxLength: 10 |
include_segments | boolean | Return timestamped segments in addition to full_text. Default: true. |
max_age_seconds | integer | Default: 86400. minimum: 0 maximum: 604800 |
{ "video_id": "dQw4w9WgXcQ", "language": "en"}{ "video_id": "dQw4w9WgXcQ", "title": "Rick Astley - Never Gonna Give You Up", "language": "en", "is_generated": false, "duration_seconds": 212, "segment_count": 61, "segments": [ { "start": 18.6, "end": 21.4, "text": "We're no strangers to love" } ], "full_text": "We're no strangers to love You know the rules and so do I ...", "word_count": 380, "freshness_seconds": 0, "cost_usdc": 0.02, "routing": { "provider": "youtube_captions", "cache_hit": false, "latency_ms": 1200 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
video_idrequired | string | Siehe veröffentlichtes Schema. |
title | string | null | Siehe veröffentlichtes Schema. |
languagerequired | string | Siehe veröffentlichtes Schema. |
is_generated | boolean | Default: false. |
duration_secondsrequired | integer | Siehe veröffentlichtes Schema. |
segment_countrequired | integer | Siehe veröffentlichtes Schema. |
segments | array | Siehe veröffentlichtes Schema. |
full_textrequired | string | Siehe veröffentlichtes Schema. |
word_countrequired | integer | Siehe veröffentlichtes Schema. |
{ "properties": { "video_id": { "type": "string", "maxLength": 300, "minLength": 11, "title": "Video Id", "description": "11-char YouTube video id or any YouTube URL." }, "language": { "type": "string", "maxLength": 10, "minLength": 2, "title": "Language", "description": "Preferred caption language (BCP-47, e.g. en, de, pt-BR).", "default": "en" }, "include_segments": { "type": "boolean", "title": "Include Segments", "description": "Return timestamped segments in addition to full_text.", "default": true }, "max_age_seconds": { "type": "integer", "maximum": 604800, "minimum": 0, "title": "Max Age Seconds", "default": 86400 } }, "type": "object", "required": [ "video_id" ], "title": "YoutubeTranscriptRequest", "description": "Request body for ``POST /youtube-transcript``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"video_id\":\"dQw4w9WgXcQ\",\"language\":\"en\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/youtube-transcript", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()One-call overview of any public GitHub repository: description, stars, forks, open issues, primary language and language split (%), topics, license, default branch, README excerpt and the 5 most recent commits. Price: $0.01 per paid call.
reporequired | string | owner/name or a github.com repository URL. minLength: 3 maxLength: 200 |
include_readme | boolean | Include the first 500 characters of the README. Default: true. |
include_commits | boolean | Include the 5 most recent commits. Default: true. |
max_age_seconds | integer | Default: 600. minimum: 0 maximum: 86400 |
{ "repo": "langchain-ai/langchain"}{ "repo": "langchain-ai/langchain", "url": "https://github.com/langchain-ai/langchain", "description": "Build context-aware reasoning applications", "homepage": "https://python.langchain.com", "stars": 112000, "forks": 18300, "watchers": 800, "open_issues": 420, "language": "Python", "languages": { "Python": 97.4, "Jupyter Notebook": 2.1, "Shell": 0.5 }, "topics": [ "ai", "llm", "python" ], "license": "MIT", "default_branch": "master", "archived": false, "fork": false, "created_at": "2022-10-17T02:58:36Z", "last_push": "2026-09-12T18:04:11Z", "readme_excerpt": "LangChain is a framework for building LLM-powered applications...", "recent_commits": [ { "sha": "a1b2c3d4e5f6", "message": "core: fix streaming", "author": "dev", "date": "2026-09-12T18:04:11Z" } ], "source": "github", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "github", "cache_hit": false, "latency_ms": 700 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
reporequired | string | Siehe veröffentlichtes Schema. |
urlrequired | string | Siehe veröffentlichtes Schema. |
description | string | null | Siehe veröffentlichtes Schema. |
homepage | string | null | Siehe veröffentlichtes Schema. |
starsrequired | integer | Siehe veröffentlichtes Schema. |
forksrequired | integer | Siehe veröffentlichtes Schema. |
watchers | integer | Default: 0. |
open_issuesrequired | integer | Siehe veröffentlichtes Schema. |
language | string | null | Siehe veröffentlichtes Schema. |
languages | object | Siehe veröffentlichtes Schema. |
topics | array | Siehe veröffentlichtes Schema. |
license | string | null | Siehe veröffentlichtes Schema. |
default_branch | string | null | Siehe veröffentlichtes Schema. |
archived | boolean | Default: false. |
fork | boolean | Default: false. |
created_at | string | null | Siehe veröffentlichtes Schema. |
last_push | string | null | Siehe veröffentlichtes Schema. |
readme_excerpt | string | null | Siehe veröffentlichtes Schema. |
recent_commits | array | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "repo": { "type": "string", "maxLength": 200, "minLength": 3, "title": "Repo", "description": "owner/name or a github.com repository URL." }, "include_readme": { "type": "boolean", "title": "Include Readme", "description": "Include the first 500 characters of the README.", "default": true }, "include_commits": { "type": "boolean", "title": "Include Commits", "description": "Include the 5 most recent commits.", "default": true }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 600 } }, "type": "object", "required": [ "repo" ], "title": "GithubRepoSummaryRequest", "description": "Request body for ``POST /github-repo-summary``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"repo\":\"langchain-ai/langchain\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/github-repo-summary", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Live DEX price, 24h change, volume and liquidity for any on-chain token (long-tail tokens not listed on CEXs) by contract address or symbol on Base, Ethereum, Arbitrum, Optimism, Polygon, BSC, Avalanche or Solana, with the top liquidity pairs per DEX (DexScreener). Price: $0.01 per paid call.
token_address | string | null | Token contract address (0x…, 40 hex chars). Preferred over symbol. |
symbol | string | null | Token symbol, e.g. AERO (ambiguous – prefer token_address). |
chain | string | base, ethereum, arbitrum, optimism, polygon, bsc, avalanche, solana. Default: "base". |
max_pairs | integer | Default: 5. minimum: 1 maximum: 20 |
max_age_seconds | integer | Default: 30. minimum: 0 maximum: 3600 |
{ "token_address": "0x940181a94A35A4569E4529A3CDfB74e38FD98631", "chain": "base"}{ "asset": { "address": "0x940181a94A35A4569E4529A3CDfB74e38FD98631", "symbol": "AERO", "name": "Aerodrome" }, "chain": "base", "price_usd": 1.23, "price_change_24h": -2.5, "volume_24h": 18234567, "liquidity_usd": 56789000, "market_cap": 980000000, "fdv": 2100000000, "pair_count": 12, "pairs": [ { "dex": "Aerodrome", "pair": "AERO/USDC", "pair_address": "0x...", "price_usd": 1.23, "price_native": 1.23, "volume_24h": 5000000, "liquidity_usd": 20000000, "price_change_24h": -2.4, "url": "https://dexscreener.com/base/0x..." } ], "source": "dexscreener", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "dexscreener", "cache_hit": false, "latency_ms": 350 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
assetrequired | DexToken | Siehe veröffentlichtes Schema. |
chainrequired | string | Siehe veröffentlichtes Schema. |
price_usd | number | null | Siehe veröffentlichtes Schema. |
price_change_24h | number | null | Siehe veröffentlichtes Schema. |
volume_24hrequired | number | Siehe veröffentlichtes Schema. |
liquidity_usdrequired | number | Siehe veröffentlichtes Schema. |
market_cap | number | null | Siehe veröffentlichtes Schema. |
fdv | number | null | Siehe veröffentlichtes Schema. |
pair_countrequired | integer | Siehe veröffentlichtes Schema. |
pairsrequired | array | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "token_address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Token Address", "description": "Token contract address (0x…, 40 hex chars). Preferred over symbol." }, "symbol": { "anyOf": [ { "type": "string", "maxLength": 20, "minLength": 1 }, { "type": "null" } ], "title": "Symbol", "description": "Token symbol, e.g. AERO (ambiguous – prefer token_address)." }, "chain": { "type": "string", "title": "Chain", "description": "base, ethereum, arbitrum, optimism, polygon, bsc, avalanche, solana.", "default": "base" }, "max_pairs": { "type": "integer", "maximum": 20, "minimum": 1, "title": "Max Pairs", "default": 5 }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 30 } }, "type": "object", "title": "DexPriceRequest", "description": "Request body for ``POST /dex-price``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"token_address\":\"0x940181a94A35A4569E4529A3CDfB74e38FD98631\",\"chain\":\"base\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/dex-price", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Status of any EVM transaction on Base, Ethereum, BSC, Polygon, Arbitrum or Optimism: success/failed/pending, block number, confirmations, gas used, effective gas price, fee, from/to/value and all ERC-20 Transfer events decoded from the receipt logs (contract, symbol, decimals, amount). Public JSON-RPC nodes with fallback. Price: $0.01 per paid call.
tx_hashrequired | string | Transaction hash (0x + 64 hex). pattern: ^0x[0-9a-fA-F]{64}$ |
chain | string | base, ethereum, bsc, polygon, arbitrum, optimism. Default: "base". minLength: 1 maxLength: 20 |
max_age_seconds | integer | Default: 0. minimum: 0 maximum: 3600 |
{ "tx_hash": "0xabababababababababababababababababababababababababababababababab", "chain": "base"}{ "tx_hash": "0xabab...", "chain": "base", "chain_id": 8453, "status": "success", "block_number": 21000000, "confirmations": 42, "from_address": "0x1111...", "to_address": "0x8335...", "value_wei": "0", "value": 0, "native_token": "ETH", "gas_used": 52000, "gas_price_gwei": 0.012, "fee_native": 6.24e-7, "nonce": 7, "input_selector": "0xa9059cbb", "transfers": [ { "contract": "0x8335...", "symbol": "USDC", "decimals": 6, "from_address": "0x1111...", "to_address": "0x2222...", "raw": "25000000", "amount": 25, "log_index": 0 } ], "log_count": 1, "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "onchain", "cache_hit": false, "latency_ms": 310 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
tx_hashrequired | string | Siehe veröffentlichtes Schema. |
chainrequired | string | Siehe veröffentlichtes Schema. |
chain_idrequired | integer | Siehe veröffentlichtes Schema. |
statusrequired | string | Values: ["success","failed","pending"]. |
block_number | integer | null | Siehe veröffentlichtes Schema. |
confirmationsrequired | integer | Siehe veröffentlichtes Schema. |
from_addressrequired | string | Siehe veröffentlichtes Schema. |
to_address | string | null | Siehe veröffentlichtes Schema. |
value_weirequired | string | Siehe veröffentlichtes Schema. |
valuerequired | number | Siehe veröffentlichtes Schema. |
native_tokenrequired | string | Siehe veröffentlichtes Schema. |
gas_used | integer | null | Siehe veröffentlichtes Schema. |
gas_price_wei | string | null | Siehe veröffentlichtes Schema. |
gas_price_gwei | number | null | Siehe veröffentlichtes Schema. |
fee_native | number | null | Siehe veröffentlichtes Schema. |
noncerequired | integer | Siehe veröffentlichtes Schema. |
input_selector | string | null | Siehe veröffentlichtes Schema. |
contract_created | string | null | Siehe veröffentlichtes Schema. |
transfersrequired | array | Siehe veröffentlichtes Schema. |
log_countrequired | integer | Siehe veröffentlichtes Schema. |
{ "properties": { "tx_hash": { "type": "string", "pattern": "^0x[0-9a-fA-F]{64}$", "title": "Tx Hash", "description": "Transaction hash (0x + 64 hex)." }, "chain": { "type": "string", "maxLength": 20, "minLength": 1, "title": "Chain", "description": "base, ethereum, bsc, polygon, arbitrum, optimism.", "default": "base" }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 0 } }, "type": "object", "required": [ "tx_hash" ], "title": "TxStatusRequest", "description": "Request body for ``POST /tx-status``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"tx_hash\":\"0xabababababababababababababababababababababababababababababababab\",\"chain\":\"base\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/tx-status", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Balances of up to 20 arbitrary ERC-20 tokens for one wallet in a single Multicall3 round-trip: raw and decimal-formatted balance, decimals and symbol per token, on Base, Ethereum, BSC, Polygon, Arbitrum or Optimism. Price: $0.01 per paid call.
wallet_addressrequired | string | EVM wallet address. pattern: ^0x[0-9a-fA-F]{40}$ |
contract_addressesrequired | array | Up to 20 ERC-20 contract addresses. minItems: 1 maxItems: 20 |
chain | string | Default: "base". minLength: 1 maxLength: 20 |
max_age_seconds | integer | Default: 0. minimum: 0 maximum: 3600 |
{ "wallet_address": "0x1111111111111111111111111111111111111111", "contract_addresses": [ "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913" ], "chain": "base"}{ "wallet_address": "0x1111...", "chain": "base", "chain_id": 8453, "block_number": 21000000, "tokens": [ { "contract": "0x8335...", "symbol": "USDC", "decimals": 6, "raw": "125000000", "balance": 125, "error": null } ], "token_count": 1, "source": "multicall3", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "onchain", "cache_hit": false, "latency_ms": 280 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
wallet_addressrequired | string | Siehe veröffentlichtes Schema. |
chainrequired | string | Siehe veröffentlichtes Schema. |
chain_idrequired | integer | Siehe veröffentlichtes Schema. |
block_numberrequired | integer | Siehe veröffentlichtes Schema. |
tokensrequired | array | Siehe veröffentlichtes Schema. |
token_countrequired | integer | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "wallet_address": { "type": "string", "pattern": "^0x[0-9a-fA-F]{40}$", "title": "Wallet Address", "description": "EVM wallet address." }, "contract_addresses": { "items": { "type": "string" }, "type": "array", "maxItems": 20, "minItems": 1, "title": "Contract Addresses", "description": "Up to 20 ERC-20 contract addresses." }, "chain": { "type": "string", "maxLength": 20, "minLength": 1, "title": "Chain", "default": "base" }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 0 } }, "type": "object", "required": [ "wallet_address", "contract_addresses" ], "title": "Erc20BalanceRequest", "description": "Request body for ``POST /erc20-balance``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"wallet_address\":\"0x1111111111111111111111111111111111111111\",\"contract_addresses\":[\"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"],\"chain\":\"base\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/erc20-balance", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Global news article search across 65+ languages via the GDELT DOC 2.0 API: title, URL, source domain, publication time, language and country per article, with look-back window (e.g. 24h, 7d) and language filter. Price: $0.02 per paid call.
queryrequired | string | Search phrase (GDELT syntax allowed). minLength: 2 maxLength: 200 |
max_results | integer | Default: 10. minimum: 1 maximum: 50 |
language | string | Article language (ISO-639-1, e.g. en, de, fr). Default: "en". minLength: 2 maxLength: 10 |
timespan | string | Look-back window, e.g. 24h, 7d, 4w. Default: "7d". pattern: ^\d{1,3}(min|h|d|w)$ |
max_age_seconds | integer | Default: 300. minimum: 0 maximum: 3600 |
{ "query": "stablecoin regulation", "max_results": 5, "language": "en", "timespan": "3d"}{ "query": "stablecoin regulation", "language": "en", "timespan": "3d", "articles": [ { "title": "…", "url": "https://…", "source": "reuters.com", "domain": "reuters.com", "published_at": "2026-09-12T14:30:00Z", "language": "English", "country": "United States", "image_url": null } ], "article_count": 5, "source": "gdelt", "freshness_seconds": 0, "cost_usdc": 0.02, "routing": { "provider": "gdelt", "cache_hit": false, "latency_ms": 900 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
queryrequired | string | Siehe veröffentlichtes Schema. |
languagerequired | string | Siehe veröffentlichtes Schema. |
timespanrequired | string | Siehe veröffentlichtes Schema. |
articlesrequired | array | Siehe veröffentlichtes Schema. |
article_countrequired | integer | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "query": { "type": "string", "maxLength": 200, "minLength": 2, "title": "Query", "description": "Search phrase (GDELT syntax allowed)." }, "max_results": { "type": "integer", "maximum": 50, "minimum": 1, "title": "Max Results", "default": 10 }, "language": { "type": "string", "maxLength": 10, "minLength": 2, "title": "Language", "description": "Article language (ISO-639-1, e.g. en, de, fr).", "default": "en" }, "timespan": { "type": "string", "pattern": "^\\d{1,3}(min|h|d|w)$", "title": "Timespan", "description": "Look-back window, e.g. 24h, 7d, 4w.", "default": "7d" }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 300 } }, "type": "object", "required": [ "query" ], "title": "NewsSearchRequest", "description": "Request body for ``POST /news-search``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"query\":\"stablecoin regulation\",\"max_results\":5,\"language\":\"en\",\"timespan\":\"3d\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/news-search", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Search Hacker News stories and comments via the Algolia HN API: title, URL, author, points, comment count, timestamp and HN discussion link; sort by relevance or date, optional tag filter (story, comment, ask_hn, show_hn). Price: $0.01 per paid call.
queryrequired | string | minLength: 1 maxLength: 200 |
max_results | integer | Default: 10. minimum: 1 maximum: 50 |
sort_by | string | Default: "relevance". pattern: ^(relevance|date)$ |
tags | string | null | Algolia tags filter, e.g. story, comment, ask_hn, show_hn. |
max_age_seconds | integer | Default: 300. minimum: 0 maximum: 3600 |
{ "query": "x402 payments", "max_results": 5, "sort_by": "date"}{ "query": "x402 payments", "sort_by": "date", "hits": [ { "object_id": "41234567", "type": "story", "title": "…", "url": "https://…", "author": "pg", "points": 312, "num_comments": 140, "created_at": "2026-09-10T08:00:00Z", "story_url": "https://news.ycombinator.com/item?id=41234567", "story_text": null } ], "hit_count": 5, "total_hits": 87, "source": "algolia_hn", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "algolia_hn", "cache_hit": false, "latency_ms": 240 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
queryrequired | string | Siehe veröffentlichtes Schema. |
sort_byrequired | string | Siehe veröffentlichtes Schema. |
hitsrequired | array | Siehe veröffentlichtes Schema. |
hit_countrequired | integer | Siehe veröffentlichtes Schema. |
total_hitsrequired | integer | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "query": { "type": "string", "maxLength": 200, "minLength": 1, "title": "Query" }, "max_results": { "type": "integer", "maximum": 50, "minimum": 1, "title": "Max Results", "default": 10 }, "sort_by": { "type": "string", "pattern": "^(relevance|date)$", "title": "Sort By", "default": "relevance" }, "tags": { "anyOf": [ { "type": "string", "maxLength": 40 }, { "type": "null" } ], "title": "Tags", "description": "Algolia tags filter, e.g. story, comment, ask_hn, show_hn." }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 300 } }, "type": "object", "required": [ "query" ], "title": "HnSearchRequest", "description": "Request body for ``POST /hn-search``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"query\":\"x402 payments\",\"max_results\":5,\"sort_by\":\"date\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/hn-search", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Search Reddit posts site-wide or within one subreddit: title, URL, subreddit, author, score, upvote ratio, comment count, timestamp and the first 500 characters of the post text; sort by relevance, hot, new, top or comments with a time filter. Price: $0.01 per paid call.
queryrequired | string | minLength: 1 maxLength: 200 |
subreddit | string | null | Restrict to one subreddit (without r/). |
max_results | integer | Default: 10. minimum: 1 maximum: 50 |
sort | string | Default: "relevance". pattern: ^(relevance|hot|new|top|comments)$ |
time_filter | string | Default: "all". pattern: ^(hour|day|week|month|year|all)$ |
max_age_seconds | integer | Default: 300. minimum: 0 maximum: 3600 |
{ "query": "base chain gas fees", "subreddit": "ethereum", "max_results": 5, "sort": "top", "time_filter": "month"}{ "query": "base chain gas fees", "subreddit": "ethereum", "sort": "top", "posts": [ { "id": "1abc2d", "title": "…", "url": "https://…", "permalink": "https://www.reddit.com/r/ethereum/comments/1abc2d/…", "subreddit": "ethereum", "author": "user", "score": 512, "upvote_ratio": 0.94, "num_comments": 88, "created_utc": 1757500000, "created_at": "2026-09-10T10:26:40Z", "selftext": "…", "is_self": true, "flair": null, "over_18": false } ], "post_count": 5, "source": "reddit", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "reddit", "cache_hit": false, "latency_ms": 600 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
queryrequired | string | Siehe veröffentlichtes Schema. |
subreddit | string | null | Siehe veröffentlichtes Schema. |
sortrequired | string | Siehe veröffentlichtes Schema. |
postsrequired | array | Siehe veröffentlichtes Schema. |
post_countrequired | integer | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "query": { "type": "string", "maxLength": 200, "minLength": 1, "title": "Query" }, "subreddit": { "anyOf": [ { "type": "string", "maxLength": 50 }, { "type": "null" } ], "title": "Subreddit", "description": "Restrict to one subreddit (without r/)." }, "max_results": { "type": "integer", "maximum": 50, "minimum": 1, "title": "Max Results", "default": 10 }, "sort": { "type": "string", "pattern": "^(relevance|hot|new|top|comments)$", "title": "Sort", "default": "relevance" }, "time_filter": { "type": "string", "pattern": "^(hour|day|week|month|year|all)$", "title": "Time Filter", "default": "all" }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 300 } }, "type": "object", "required": [ "query" ], "title": "RedditSearchRequest", "description": "Request body for ``POST /reddit-search``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"query\":\"base chain gas fees\",\"subreddit\":\"ethereum\",\"max_results\":5,\"sort\":\"top\",\"time_filter\":\"month\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/reddit-search", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Total value locked of a DeFi protocol (by DefiLlama slug: TVL, 1d/7d change, market cap, mcap/TVL ratio, TVL per chain, category) or of a whole chain (TVL, native token, protocol count, top-10 protocols). Price: $0.005 per paid call.
protocol | string | null | DefiLlama protocol slug, e.g. aave, uniswap, aerodrome. |
chain | string | null | Chain name, e.g. base, ethereum, arbitrum. |
max_age_seconds | integer | Default: 300. minimum: 0 maximum: 3600 |
{ "protocol": "aerodrome"}{ "kind": "protocol", "slug": "aerodrome", "name": "Aerodrome", "symbol": "AERO", "category": "Dexes", "url": "https://aerodrome.finance", "tvl_usd": 1234567890, "change_1d_pct": 1.2, "change_7d_pct": -3.4, "mcap_usd": 980000000, "mcap_tvl_ratio": 0.79, "chains": [ "Base" ], "chain_tvls": { "Base": 1234567890 }, "source": "defillama", "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "defillama", "cache_hit": false, "latency_ms": 700 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
kindrequired | string | Values: ["protocol","chain"]. |
slugrequired | string | Siehe veröffentlichtes Schema. |
namerequired | string | Siehe veröffentlichtes Schema. |
symbol | string | null | Siehe veröffentlichtes Schema. |
category | string | null | Siehe veröffentlichtes Schema. |
url | string | null | Siehe veröffentlichtes Schema. |
tvl_usdrequired | number | Siehe veröffentlichtes Schema. |
change_1d_pct | number | null | Siehe veröffentlichtes Schema. |
change_7d_pct | number | null | Siehe veröffentlichtes Schema. |
mcap_usd | number | null | Siehe veröffentlichtes Schema. |
mcap_tvl_ratio | number | null | Siehe veröffentlichtes Schema. |
chainsrequired | array | Siehe veröffentlichtes Schema. |
chain_tvlsrequired | object | Siehe veröffentlichtes Schema. |
chain_id | integer | null | Siehe veröffentlichtes Schema. |
native_token | string | null | Siehe veröffentlichtes Schema. |
protocol_count | integer | null | Siehe veröffentlichtes Schema. |
top_protocols | array | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "protocol": { "anyOf": [ { "type": "string", "maxLength": 60 }, { "type": "null" } ], "title": "Protocol", "description": "DefiLlama protocol slug, e.g. aave, uniswap, aerodrome." }, "chain": { "anyOf": [ { "type": "string", "maxLength": 40 }, { "type": "null" } ], "title": "Chain", "description": "Chain name, e.g. base, ethereum, arbitrum." }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 300 } }, "type": "object", "title": "DefiTvlRequest", "description": "Request body for ``POST /defi-tvl`` – either ``protocol`` or ``chain``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"protocol\":\"aerodrome\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/defi-tvl", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Crypto market sentiment: the daily Fear & Greed index (0-100) with classification, 1d/7d change and up to 90 days of history from alternative.me. Price: $0.005 per paid call.
limit | integer | Number of daily data points (1 = latest only). Default: 1. minimum: 1 maximum: 90 |
max_age_seconds | integer | Default: 600. minimum: 0 maximum: 3600 |
{ "limit": 7}{ "value": 62, "value_classification": "Greed", "timestamp": 1757721600, "date": "2026-09-13", "time_until_update_seconds": 43000, "change_1d": 3, "change_7d": -5, "history": [ { "value": 62, "classification": "Greed", "timestamp": 1757721600, "date": "2026-09-13" } ], "source": "alternative.me", "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "alternative.me", "cache_hit": false, "latency_ms": 180 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
valuerequired | integer | Siehe veröffentlichtes Schema. |
value_classificationrequired | string | Siehe veröffentlichtes Schema. |
timestamprequired | integer | Siehe veröffentlichtes Schema. |
daterequired | string | Siehe veröffentlichtes Schema. |
time_until_update_seconds | integer | null | Siehe veröffentlichtes Schema. |
change_1d | integer | null | Siehe veröffentlichtes Schema. |
change_7d | integer | null | Siehe veröffentlichtes Schema. |
historyrequired | array | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "limit": { "type": "integer", "maximum": 90, "minimum": 1, "title": "Limit", "description": "Number of daily data points (1 = latest only).", "default": 1 }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 600 } }, "type": "object", "title": "FearGreedRequest", "description": "Request body for ``POST /fear-greed``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"limit\":7}")r = httpx.post("https://agent-margin-router-production.up.railway.app/fear-greed", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()One-call wallet overview for autonomous agents: native balance, ERC-20 balances (default stablecoins + WETH, or any contracts you pass), current gas price, tx count, contract check and USD values incl. total – bundles what would otherwise be 5+ RPC calls. Base, Ethereum, BSC, Polygon, Arbitrum, Optimism. Price: $0.02 per paid call.
wallet_addressrequired | string | EVM wallet address. pattern: ^0x[0-9a-fA-F]{40}$ |
chain | string | Default: "base". minLength: 1 maxLength: 20 |
token_contracts | array | null | ERC-20 contracts to include. Default: well-known stablecoins + WETH on the chain. |
max_age_seconds | integer | Default: 0. minimum: 0 maximum: 600 |
{ "wallet_address": "0x1111111111111111111111111111111111111111", "chain": "base"}{ "wallet_address": "0x1111...", "chain": "base", "chain_id": 8453, "block_number": 21000000, "native_token": "ETH", "native_balance": { "raw": "50000000000000000", "balance": 0.05, "usd": 125, "decimals": 18 }, "token_balances": [ { "contract": "0x8335...", "symbol": "USDC", "decimals": 6, "raw": "125000000", "balance": 125, "error": null, "usd": 125, "price_usd": 1 } ], "gas_price_gwei": 0.012, "gas_price_wei": "12000000", "native_price_usd": 2500, "total_usd_value": 250, "tx_count": 42, "is_contract": false, "freshness_seconds": 0, "cost_usdc": 0.02, "routing": { "provider": "onchain", "cache_hit": false, "latency_ms": 420 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
wallet_addressrequired | string | Siehe veröffentlichtes Schema. |
chainrequired | string | Siehe veröffentlichtes Schema. |
chain_idrequired | integer | Siehe veröffentlichtes Schema. |
block_numberrequired | integer | Siehe veröffentlichtes Schema. |
native_tokenrequired | string | Siehe veröffentlichtes Schema. |
native_balancerequired | object | Siehe veröffentlichtes Schema. |
token_balancesrequired | array | Siehe veröffentlichtes Schema. |
gas_price_gweirequired | number | Siehe veröffentlichtes Schema. |
gas_price_weirequired | string | Siehe veröffentlichtes Schema. |
native_price_usd | number | null | Siehe veröffentlichtes Schema. |
total_usd_valuerequired | number | Siehe veröffentlichtes Schema. |
tx_countrequired | integer | Siehe veröffentlichtes Schema. |
is_contractrequired | boolean | Siehe veröffentlichtes Schema. |
calls_bundledrequired | array | Siehe veröffentlichtes Schema. |
{ "properties": { "wallet_address": { "type": "string", "pattern": "^0x[0-9a-fA-F]{40}$", "title": "Wallet Address", "description": "EVM wallet address." }, "chain": { "type": "string", "maxLength": 20, "minLength": 1, "title": "Chain", "default": "base" }, "token_contracts": { "anyOf": [ { "items": { "type": "string" }, "type": "array", "maxItems": 20 }, { "type": "null" } ], "title": "Token Contracts", "description": "ERC-20 contracts to include. Default: well-known stablecoins + WETH on the chain." }, "max_age_seconds": { "type": "integer", "maximum": 600, "minimum": 0, "title": "Max Age Seconds", "default": 0 } }, "type": "object", "required": [ "wallet_address" ], "title": "AgentWalletSnapshotRequest", "description": "Request body for ``POST /agent-wallet-snapshot``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"wallet_address\":\"0x1111111111111111111111111111111111111111\",\"chain\":\"base\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/agent-wallet-snapshot", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Health check for any public URL: HTTP status, full redirect chain, response time, content type, SSL certificate validity/expiry/issuer and a security-header audit (HSTS, CSP, X-Frame-Options, …) with score. SSRF-guarded (private/internal targets are rejected). Price: $0.005 per paid call.
urlrequired | string (uri) | Public URL to probe. minLength: 1 maxLength: 2083 |
max_age_seconds | integer | Default: 0. minimum: 0 maximum: 3600 |
{ "url": "https://example.com"}{ "url": "https://example.com", "final_url": "https://example.com/", "reachable": true, "status_code": 200, "ok": true, "method_used": "HEAD", "response_time_ms": 120, "redirect_count": 0, "redirect_chain": [], "content_type": "text/html; charset=UTF-8", "content_length": 1256, "server": "ECS", "ssl": { "checked": true, "valid": true, "expires_at": "2027-01-15T23:59:59Z", "days_until_expiry": 124, "issuer": "DigiCert Inc", "subject": "example.com", "error": null }, "security_headers": { "strict-transport-security": null, "content-security-policy": null, "x-frame-options": null, "x-content-type-options": null, "referrer-policy": null, "permissions-policy": null, "x-xss-protection": null }, "security_score": 0, "missing_security_headers": [ "strict-transport-security", "content-security-policy", "x-frame-options", "x-content-type-options", "referrer-policy", "permissions-policy" ], "error": null, "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "direct_fetch", "cache_hit": false, "latency_ms": 130 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
urlrequired | string | Siehe veröffentlichtes Schema. |
final_urlrequired | string | Siehe veröffentlichtes Schema. |
reachablerequired | boolean | Siehe veröffentlichtes Schema. |
status_code | integer | null | Siehe veröffentlichtes Schema. |
okrequired | boolean | Siehe veröffentlichtes Schema. |
method_usedrequired | string | Siehe veröffentlichtes Schema. |
response_time_msrequired | integer | Siehe veröffentlichtes Schema. |
redirect_countrequired | integer | Siehe veröffentlichtes Schema. |
redirect_chainrequired | array | Siehe veröffentlichtes Schema. |
content_type | string | null | Siehe veröffentlichtes Schema. |
content_length | integer | null | Siehe veröffentlichtes Schema. |
server | string | null | Siehe veröffentlichtes Schema. |
sslrequired | SslInfo | Siehe veröffentlichtes Schema. |
security_headersrequired | object | Siehe veröffentlichtes Schema. |
security_scorerequired | integer | Siehe veröffentlichtes Schema. |
missing_security_headersrequired | array | Siehe veröffentlichtes Schema. |
error | string | null | Siehe veröffentlichtes Schema. |
{ "properties": { "url": { "type": "string", "maxLength": 2083, "minLength": 1, "format": "uri", "title": "Url", "description": "Public URL to probe." }, "max_age_seconds": { "type": "integer", "maximum": 3600, "minimum": 0, "title": "Max Age Seconds", "default": 0 } }, "type": "object", "required": [ "url" ], "title": "UrlStatusRequest", "description": "Request body for ``POST /url-status``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"url\":\"https://example.com\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/url-status", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Mini crawler: fetches a start page and follows same-domain links breadth-first (max 10 pages), returning clean LLM-ready Markdown, title, word count and discovered links per page; honours robots.txt by default. SSRF-guarded. Price: $0.05 per paid call.
start_urlrequired | string (uri) | Public page to start from. minLength: 1 maxLength: 2083 |
max_pages | integer | Hard cap on fetched pages (max 10). Default: 5. minimum: 1 maximum: 10 |
follow_links | boolean | Follow same-domain links found on crawled pages. Default: true. |
include_links | boolean | Default: true. |
respect_robots | boolean | Honour robots.txt Disallow rules for '*'. Default: true. |
max_age_seconds | integer | Default: 600. minimum: 0 maximum: 86400 |
{ "start_url": "https://docs.example.com", "max_pages": 3}{ "start_url": "https://docs.example.com", "domain": "docs.example.com", "pages": [ { "url": "https://docs.example.com/", "final_url": "https://docs.example.com/", "title": "Docs", "status_code": 200, "markdown": "# Docs\n…", "word_count": 850, "links_found": 24, "internal_links": [ "https://docs.example.com/getting-started" ], "depth": 0, "error": null } ], "page_count": 3, "pages_failed": 0, "max_pages": 3, "follow_links": true, "robots_blocked": 0, "queued_not_fetched": 12, "total_words": 2400, "freshness_seconds": 0, "cost_usdc": 0.05, "routing": { "provider": "direct_fetch", "cache_hit": false, "latency_ms": 2400 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
start_urlrequired | string | Siehe veröffentlichtes Schema. |
domainrequired | string | Siehe veröffentlichtes Schema. |
pagesrequired | array | Siehe veröffentlichtes Schema. |
page_countrequired | integer | Siehe veröffentlichtes Schema. |
pages_failedrequired | integer | Siehe veröffentlichtes Schema. |
max_pagesrequired | integer | Siehe veröffentlichtes Schema. |
follow_linksrequired | boolean | Siehe veröffentlichtes Schema. |
robots_blockedrequired | integer | Siehe veröffentlichtes Schema. |
queued_not_fetchedrequired | integer | Siehe veröffentlichtes Schema. |
total_wordsrequired | integer | Siehe veröffentlichtes Schema. |
{ "properties": { "start_url": { "type": "string", "maxLength": 2083, "minLength": 1, "format": "uri", "title": "Start Url", "description": "Public page to start from." }, "max_pages": { "type": "integer", "maximum": 10, "minimum": 1, "title": "Max Pages", "description": "Hard cap on fetched pages (max 10).", "default": 5 }, "follow_links": { "type": "boolean", "title": "Follow Links", "description": "Follow same-domain links found on crawled pages.", "default": true }, "include_links": { "type": "boolean", "title": "Include Links", "default": true }, "respect_robots": { "type": "boolean", "title": "Respect Robots", "description": "Honour robots.txt Disallow rules for '*'.", "default": true }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 600 } }, "type": "object", "required": [ "start_url" ], "title": "WebCrawlRequest", "description": "Request body for ``POST /web-crawl``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"start_url\":\"https://docs.example.com\",\"max_pages\":3}")r = httpx.post("https://agent-margin-router-production.up.railway.app/web-crawl", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Clean article summary from Wikipedia in any language: title, short description, extract (capped), canonical URL, thumbnail and coordinates; falls back to search when the title is fuzzy. Content CC BY-SA 4.0. Price: $0.005 per paid call.
titlerequired | string | Article title or search phrase. minLength: 1 maxLength: 300 |
language | string | Wikipedia language code (default en). Default: "en". pattern: ^[a-z]{2,3}(-[a-z]{2,8})?$ |
max_chars | integer | Max characters of the extract (default 1200). Default: 1200. minimum: 100 maximum: 5000 |
max_age_seconds | integer | Default: 3600. minimum: 0 maximum: 86400 |
{ "title": "x402", "language": "en"}{ "query": "x402", "language": "en", "title": "HTTP 402", "description": "HTTP status code", "extract": "HTTP 402 Payment Required is ...", "page_url": "https://en.wikipedia.org/wiki/HTTP_402", "thumbnail_url": null, "coordinates": null, "page_type": "standard", "last_modified": "2026-01-10T12:00:00Z", "resolved_from_search": true, "source": "wikipedia", "license": "CC BY-SA 4.0", "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "wikipedia", "cache_hit": false, "latency_ms": 210 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
queryrequired | string | Siehe veröffentlichtes Schema. |
languagerequired | string | Siehe veröffentlichtes Schema. |
title | string | null | Siehe veröffentlichtes Schema. |
description | string | null | Siehe veröffentlichtes Schema. |
extract | string | null | Siehe veröffentlichtes Schema. |
page_url | string | null | Siehe veröffentlichtes Schema. |
thumbnail_url | string | null | Siehe veröffentlichtes Schema. |
coordinates | object | null | Siehe veröffentlichtes Schema. |
page_type | string | null | Siehe veröffentlichtes Schema. |
last_modified | string | null | Siehe veröffentlichtes Schema. |
resolved_from_search | boolean | Default: false. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
license | string | null | Siehe veröffentlichtes Schema. |
{ "properties": { "title": { "type": "string", "maxLength": 300, "minLength": 1, "title": "Title", "description": "Article title or search phrase." }, "language": { "type": "string", "pattern": "^[a-z]{2,3}(-[a-z]{2,8})?$", "title": "Language", "description": "Wikipedia language code (default en).", "default": "en" }, "max_chars": { "type": "integer", "maximum": 5000, "minimum": 100, "title": "Max Chars", "description": "Max characters of the extract (default 1200).", "default": 1200 }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 3600 } }, "type": "object", "required": [ "title" ], "title": "WikipediaSummaryRequest", "description": "Request body for ``POST /wikipedia-summary``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"title\":\"x402\",\"language\":\"en\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/wikipedia-summary", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Search arXiv preprints: returns id, title, authors, abstract, categories, published/updated dates and PDF links, sortable by relevance or date, optionally filtered by category (e.g. cs.AI). Price: $0.01 per paid call.
queryrequired | string | Free-text search query. minLength: 1 maxLength: 300 |
max_results | integer | Default: 10. minimum: 1 maximum: 50 |
sort_by | string | Default: "relevance". pattern: ^(relevance|date|updated)$ |
category | string | null | Optional arXiv category, e.g. cs.AI. |
max_age_seconds | integer | Default: 3600. minimum: 0 maximum: 86400 |
{ "query": "agent micropayments", "max_results": 5, "sort_by": "date"}{ "query": "agent micropayments", "sort_by": "date", "category": null, "papers": [ { "id": "2501.01234", "title": "Autonomous Agents and Micropayments", "authors": [ "A. Author" ], "summary": "We study ...", "categories": [ "cs.AI" ], "published": "2025-01-03T00:00:00Z", "updated": "2025-01-03T00:00:00Z", "pdf_url": "https://arxiv.org/pdf/2501.01234", "url": "https://arxiv.org/abs/2501.01234" } ], "paper_count": 5, "total_results": 128, "source": "arxiv", "attribution": "Thank you to arXiv for use of its open access interoperability.", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "arxiv", "cache_hit": false, "latency_ms": 640 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
queryrequired | string | Siehe veröffentlichtes Schema. |
sort_byrequired | string | Siehe veröffentlichtes Schema. |
category | string | null | Siehe veröffentlichtes Schema. |
papersrequired | array | Siehe veröffentlichtes Schema. |
paper_countrequired | integer | Siehe veröffentlichtes Schema. |
total_results | integer | null | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
attribution | string | null | Siehe veröffentlichtes Schema. |
{ "properties": { "query": { "type": "string", "maxLength": 300, "minLength": 1, "title": "Query", "description": "Free-text search query." }, "max_results": { "type": "integer", "maximum": 50, "minimum": 1, "title": "Max Results", "default": 10 }, "sort_by": { "type": "string", "pattern": "^(relevance|date|updated)$", "title": "Sort By", "default": "relevance" }, "category": { "anyOf": [ { "type": "string", "maxLength": 40, "pattern": "^[A-Za-z\\-]+(\\.[A-Za-z\\-]+)?$" }, { "type": "null" } ], "title": "Category", "description": "Optional arXiv category, e.g. cs.AI." }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 3600 } }, "type": "object", "required": [ "query" ], "title": "ArxivSearchRequest", "description": "Request body for ``POST /arxiv-search``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"query\":\"agent micropayments\",\"max_results\":5,\"sort_by\":\"date\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/arxiv-search", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()npm package intelligence: latest version, license, repository, maintainers, dependency count, publish dates and weekly downloads – ideal for dependency vetting by coding agents. Price: $0.005 per paid call.
namerequired | string | npm package name, scoped allowed. minLength: 1 maxLength: 214 pattern: ^(@[a-z0-9\-_.]+/)?[a-z0-9\-_.]+$ |
max_age_seconds | integer | Default: 3600. minimum: 0 maximum: 86400 |
{ "name": "express"}{ "name": "express", "latest_version": "5.1.0", "description": "Fast, unopinionated, minimalist web framework", "license": "MIT", "homepage": "https://expressjs.com/", "repository_url": "https://github.com/expressjs/express", "npm_url": "https://www.npmjs.com/package/express", "keywords": [ "express", "framework", "web" ], "maintainers": [ "wesleytodd" ], "created_at": "2010-12-29T19:38:25.450Z", "latest_published_at": "2025-03-31T00:00:00Z", "version_count": 280, "dependency_count": 27, "dependencies": { "accepts": "^2.0.0" }, "weekly_downloads": 40000000, "deprecated": null, "source": "npm_registry", "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "npm", "cache_hit": false, "latency_ms": 380 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
namerequired | string | Siehe veröffentlichtes Schema. |
latest_version | string | null | Siehe veröffentlichtes Schema. |
description | string | null | Siehe veröffentlichtes Schema. |
license | string | null | Siehe veröffentlichtes Schema. |
homepage | string | null | Siehe veröffentlichtes Schema. |
repository_url | string | null | Siehe veröffentlichtes Schema. |
npm_urlrequired | string | Siehe veröffentlichtes Schema. |
keywords | array | Siehe veröffentlichtes Schema. |
maintainers | array | Siehe veröffentlichtes Schema. |
created_at | string | null | Siehe veröffentlichtes Schema. |
latest_published_at | string | null | Siehe veröffentlichtes Schema. |
version_count | integer | Default: 0. |
dependency_count | integer | Default: 0. |
dependencies | object | Siehe veröffentlichtes Schema. |
weekly_downloads | integer | null | Siehe veröffentlichtes Schema. |
deprecated | string | null | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "name": { "type": "string", "maxLength": 214, "minLength": 1, "pattern": "^(@[a-z0-9\\-_.]+/)?[a-z0-9\\-_.]+$", "title": "Name", "description": "npm package name, scoped allowed." }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 3600 } }, "type": "object", "required": [ "name" ], "title": "NpmPackageRequest", "description": "Request body for ``POST /npm-package``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"name\":\"express\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/npm-package", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()PyPI project intelligence: latest version, summary, license, author, project URLs, Python requirement, declared dependencies, release count and last release date. Price: $0.005 per paid call.
namerequired | string | PyPI project name. minLength: 1 maxLength: 214 pattern: ^[A-Za-z0-9][A-Za-z0-9._\-]*$ |
max_age_seconds | integer | Default: 3600. minimum: 0 maximum: 86400 |
{ "name": "httpx"}{ "name": "httpx", "latest_version": "0.28.1", "summary": "The next generation HTTP client.", "license": "BSD-3-Clause", "author": "Tom Christie", "homepage": "https://github.com/encode/httpx", "project_urls": { "Homepage": "https://github.com/encode/httpx" }, "pypi_url": "https://pypi.org/project/httpx/", "requires_python": ">=3.8", "requires_dist": [ "anyio", "certifi", "httpcore==1.*", "idna" ], "dependency_count": 4, "keywords": null, "classifiers": [ "Programming Language :: Python :: 3" ], "release_count": 70, "latest_released_at": "2024-12-06T15:37:21Z", "yanked": false, "source": "pypi", "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "pypi", "cache_hit": false, "latency_ms": 260 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
namerequired | string | Siehe veröffentlichtes Schema. |
latest_version | string | null | Siehe veröffentlichtes Schema. |
summary | string | null | Siehe veröffentlichtes Schema. |
license | string | null | Siehe veröffentlichtes Schema. |
author | string | null | Siehe veröffentlichtes Schema. |
homepage | string | null | Siehe veröffentlichtes Schema. |
project_urls | object | Siehe veröffentlichtes Schema. |
pypi_urlrequired | string | Siehe veröffentlichtes Schema. |
requires_python | string | null | Siehe veröffentlichtes Schema. |
requires_dist | array | Siehe veröffentlichtes Schema. |
dependency_count | integer | Default: 0. |
keywords | string | null | Siehe veröffentlichtes Schema. |
classifiers | array | Siehe veröffentlichtes Schema. |
release_count | integer | Default: 0. |
latest_released_at | string | null | Siehe veröffentlichtes Schema. |
yanked | boolean | Default: false. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "name": { "type": "string", "maxLength": 214, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._\\-]*$", "title": "Name", "description": "PyPI project name." }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 3600 } }, "type": "object", "required": [ "name" ], "title": "PypiPackageRequest", "description": "Request body for ``POST /pypi-package``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"name\":\"httpx\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/pypi-package", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Turn a place name or address into coordinates, bounding box, address parts and OSM type using OpenStreetMap Nominatim (ODbL); cached 24h. Price: $0.01 per paid call.
queryrequired | string | Place name or address. minLength: 2 maxLength: 300 |
max_results | integer | Default: 5. minimum: 1 maximum: 10 |
country_codes | string | null | Comma-separated ISO country codes, e.g. de,at. |
language | string | Default: "en". pattern: ^[a-z]{2,3}(-[a-zA-Z]{2,8})?$ |
max_age_seconds | integer | Default: 86400. minimum: 0 maximum: 86400 |
{ "query": "Brandenburger Tor, Berlin", "max_results": 1}{ "query": "Brandenburger Tor, Berlin", "results": [ { "display_name": "Brandenburger Tor, Pariser Platz, Mitte, Berlin, 10117, Deutschland", "lat": 52.5162746, "lon": 13.3777041, "type": "attraction", "category": "tourism", "importance": 0.72, "bounding_box": [ 52.516, 52.5165, 13.3774, 13.378 ], "address": { "city": "Berlin", "country_code": "de" }, "osm_id": 518071791, "osm_type": "way" } ], "result_count": 1, "source": "nominatim", "attribution": "Data (c) OpenStreetMap contributors, ODbL 1.0", "domain": "nominatim.openstreetmap.org", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "nominatim", "cache_hit": false, "latency_ms": 420 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
queryrequired | string | Siehe veröffentlichtes Schema. |
resultsrequired | array | Siehe veröffentlichtes Schema. |
result_countrequired | integer | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
attribution | string | null | Siehe veröffentlichtes Schema. |
domain | string | null | Siehe veröffentlichtes Schema. |
{ "properties": { "query": { "type": "string", "maxLength": 300, "minLength": 2, "title": "Query", "description": "Place name or address." }, "max_results": { "type": "integer", "maximum": 10, "minimum": 1, "title": "Max Results", "default": 5 }, "country_codes": { "anyOf": [ { "type": "string", "maxLength": 60, "pattern": "^[a-zA-Z]{2}(,[a-zA-Z]{2})*$" }, { "type": "null" } ], "title": "Country Codes", "description": "Comma-separated ISO country codes, e.g. de,at." }, "language": { "type": "string", "pattern": "^[a-z]{2,3}(-[a-zA-Z]{2,8})?$", "title": "Language", "default": "en" }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 86400 } }, "type": "object", "required": [ "query" ], "title": "GeocodeRequest", "description": "Request body for ``POST /geocode``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"query\":\"Brandenburger Tor, Berlin\",\"max_results\":1}")r = httpx.post("https://agent-margin-router-production.up.railway.app/geocode", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Domain registration data via RDAP (the WHOIS successor): registered flag, registrar, status, registration/expiry events, nameservers and DNSSEC – for availability checks and due diligence. Price: $0.01 per paid call.
domainrequired | string | Registrable domain, e.g. example.com. minLength: 3 maxLength: 253 pattern: ^([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,}$ |
max_age_seconds | integer | Default: 86400. minimum: 0 maximum: 86400 |
{ "domain": "agentmarginrouter.com"}{ "domain": "agentmarginrouter.com", "registered": true, "status": [ "client transfer prohibited" ], "events": { "registration": "2026-02-01T10:00:00Z", "expiration": "2027-02-01T10:00:00Z", "last changed": "2026-02-01T10:00:00Z" }, "registrar": "Example Registrar, Inc.", "registrar_iana_id": "1234", "nameservers": [ "ns1.example.net", "ns2.example.net" ], "dnssec_signed": false, "rdap_url": "https://rdap.org/domain/agentmarginrouter.com", "note": null, "source": "rdap", "freshness_seconds": 0, "cost_usdc": 0.01, "routing": { "provider": "rdap", "cache_hit": false, "latency_ms": 510 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
domainrequired | string | Siehe veröffentlichtes Schema. |
registeredrequired | boolean | Siehe veröffentlichtes Schema. |
status | array | Siehe veröffentlichtes Schema. |
events | object | Siehe veröffentlichtes Schema. |
registrar | string | null | Siehe veröffentlichtes Schema. |
registrar_iana_id | string | null | Siehe veröffentlichtes Schema. |
nameservers | array | Siehe veröffentlichtes Schema. |
dnssec_signed | boolean | null | Siehe veröffentlichtes Schema. |
rdap_url | string | null | Siehe veröffentlichtes Schema. |
note | string | null | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "domain": { "type": "string", "maxLength": 253, "minLength": 3, "pattern": "^([a-zA-Z0-9\\-]+\\.)+[a-zA-Z]{2,}$", "title": "Domain", "description": "Registrable domain, e.g. example.com." }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 86400 } }, "type": "object", "required": [ "domain" ], "title": "DomainRdapRequest", "description": "Request body for ``POST /domain-rdap``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"domain\":\"agentmarginrouter.com\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/domain-rdap", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Resolve any DNS record type (A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR) over DNS-over-HTTPS with TTLs and DNSSEC validation flag. Price: $0.005 per paid call.
namerequired | string | Host name to resolve. minLength: 1 maxLength: 253 pattern: ^([a-zA-Z0-9_\-]+\.)*[a-zA-Z0-9\-]+\.?$ |
record_type | string | Default: "A". pattern: ^(A|AAAA|CNAME|MX|NS|TXT|SOA|SRV|CAA|PTR)$ |
max_age_seconds | integer | Default: 300. minimum: 0 maximum: 86400 |
{ "name": "agentmarginrouter.com", "record_type": "A"}{ "name": "agentmarginrouter.com", "record_type": "A", "status": "NOERROR", "answers": [ { "name": "agentmarginrouter.com.", "type": "A", "ttl": 300, "data": "203.0.113.10" } ], "answer_count": 1, "authority": [], "dnssec_validated": false, "resolver": "dns.google", "source": "google_doh", "freshness_seconds": 0, "cost_usdc": 0.005, "routing": { "provider": "google_doh", "cache_hit": false, "latency_ms": 90 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
namerequired | string | Siehe veröffentlichtes Schema. |
record_typerequired | string | Siehe veröffentlichtes Schema. |
status | string | integer | null | Siehe veröffentlichtes Schema. |
answersrequired | array | Siehe veröffentlichtes Schema. |
answer_countrequired | integer | Siehe veröffentlichtes Schema. |
authority | array | Siehe veröffentlichtes Schema. |
dnssec_validated | boolean | null | Siehe veröffentlichtes Schema. |
resolver | string | null | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "name": { "type": "string", "maxLength": 253, "minLength": 1, "pattern": "^([a-zA-Z0-9_\\-]+\\.)*[a-zA-Z0-9\\-]+\\.?$", "title": "Name", "description": "Host name to resolve." }, "record_type": { "type": "string", "pattern": "^(A|AAAA|CNAME|MX|NS|TXT|SOA|SRV|CAA|PTR)$", "title": "Record Type", "default": "A" }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 300 } }, "type": "object", "required": [ "name" ], "title": "DnsLookupRequest", "description": "Request body for ``POST /dns-lookup``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"name\":\"agentmarginrouter.com\",\"record_type\":\"A\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/dns-lookup", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Smart-contract metadata from Blockscout for Base, Ethereum, Optimism or Arbitrum: verification status, name, compiler, proxy/implementation, creator, creation tx, token details and function/event names. Price: $0.02 per paid call.
addressrequired | string | EVM contract or wallet address. pattern: ^0x[a-fA-F0-9]{40}$ |
chain | string | Default: "base". pattern: ^(base|ethereum|optimism|arbitrum)$ |
max_age_seconds | integer | Default: 3600. minimum: 0 maximum: 86400 |
{ "address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", "chain": "base"}{ "address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", "chain": "base", "is_contract": true, "is_verified": true, "contract_name": "FiatTokenProxy", "compiler_version": "v0.6.12+commit.27d51765", "language": "solidity", "optimization_enabled": true, "license_type": "mit", "is_proxy": true, "proxy_type": "eip1967", "implementations": [ { "address": "0x2Ce6311ddAE708829bc0784C967b7d77D19FD779", "name": "FiatTokenV2_2" } ], "creator_address": "0x...", "creation_tx_hash": "0x...", "verified_at": "2023-08-01T00:00:00Z", "token_info": { "name": "USD Coin", "symbol": "USDC", "type": "ERC-20", "decimals": "6", "holders": 1200000, "total_supply": "4000000000000000" }, "function_names": [ "admin", "changeAdmin", "implementation", "upgradeTo" ], "event_names": [ "AdminChanged", "Upgraded" ], "abi_available": true, "source_code_available": true, "explorer_url": "https://base.blockscout.com/address/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", "source": "blockscout", "freshness_seconds": 0, "cost_usdc": 0.02, "routing": { "provider": "blockscout", "cache_hit": false, "latency_ms": 700 }}freshness_secondsrequired | integer | Age of the underlying data in seconds (0 = fetched live). |
cost_usdcrequired | number | Price charged in stablecoin units (USDC/USDT 1:1); 0 on the free tier. |
token | string | Token actually used for payment (USDC, USDT or FREE). Default: "USDC". |
fetched_at | string (date-time) | UTC timestamp when the data was fetched. |
routingrequired | RoutingMeta | How the request was routed (provider, fallback, cache, latency). |
addressrequired | string | Siehe veröffentlichtes Schema. |
chainrequired | string | Siehe veröffentlichtes Schema. |
is_contractrequired | boolean | Siehe veröffentlichtes Schema. |
is_verified | boolean | Default: false. |
contract_name | string | null | Siehe veröffentlichtes Schema. |
compiler_version | string | null | Siehe veröffentlichtes Schema. |
language | string | null | Siehe veröffentlichtes Schema. |
optimization_enabled | boolean | null | Siehe veröffentlichtes Schema. |
license_type | string | null | Siehe veröffentlichtes Schema. |
is_proxy | boolean | Default: false. |
proxy_type | string | null | Siehe veröffentlichtes Schema. |
implementations | array | Siehe veröffentlichtes Schema. |
creator_address | string | null | Siehe veröffentlichtes Schema. |
creation_tx_hash | string | null | Siehe veröffentlichtes Schema. |
verified_at | string | null | Siehe veröffentlichtes Schema. |
token_info | object | null | Siehe veröffentlichtes Schema. |
function_names | array | Siehe veröffentlichtes Schema. |
event_names | array | Siehe veröffentlichtes Schema. |
abi_available | boolean | Default: false. |
source_code_available | boolean | Default: false. |
explorer_url | string | null | Siehe veröffentlichtes Schema. |
sourcerequired | string | Siehe veröffentlichtes Schema. |
{ "properties": { "address": { "type": "string", "pattern": "^0x[a-fA-F0-9]{40}$", "title": "Address", "description": "EVM contract or wallet address." }, "chain": { "type": "string", "pattern": "^(base|ethereum|optimism|arbitrum)$", "title": "Chain", "default": "base" }, "max_age_seconds": { "type": "integer", "maximum": 86400, "minimum": 0, "title": "Max Age Seconds", "default": 3600 } }, "type": "object", "required": [ "address" ], "title": "ContractInfoRequest", "description": "Request body for ``POST /contract-info``."}import json, os, httpx # Optionale Werte aus deiner Umgebung; keine privaten Schlüssel im Code.headers = {}if os.getenv("AGENT_WALLET"): headers["X-WALLET"] = os.environ["AGENT_WALLET"]if os.getenv("X402_PAYMENT_SIGNATURE"): headers["PAYMENT-SIGNATURE"] = os.environ["X402_PAYMENT_SIGNATURE"] body = json.loads("{\"address\":\"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\",\"chain\":\"base\"}")r = httpx.post("https://agent-margin-router-production.up.railway.app/contract-info", json=body, headers=headers, timeout=60)print(r.status_code, r.json())if r.status_code == 402: print("Keine Zahlung ausgeführt. Anforderungen prüfen und mit x402-Wallet/SDK signieren.")elif r.is_success: print("Settlement:", r.headers.get("PAYMENT-RESPONSE"))else: r.raise_for_status()Every endpoint is also exposed as an MCP tool over Streamable HTTP at POST /mcp — no SDK, no session state. Connect using a client that supports remote Streamable HTTP. Client configuration syntax varies; the JSON below is an example, not a universal installation file. Router 0.6.0: 40 tools — extract_clean, market_spread, gas_fees, token_price, wallet_balance, web_search, email_validate, dns_whois, pdf_text, seo_check, defi_yields, currency_convert, geo_ip, rss_feed, crypto_ohlcv, ens_resolve, html_to_markdown, youtube_transcript, github_repo_summary, dex_price, tx_status, erc20_balance, news_search, hn_search, reddit_search, defi_tvl, fear_greed, agent_wallet_snapshot, url_status, web_crawl, wikipedia_summary, arxiv_search, npm_package, pypi_package, geocode, domain_rdap, dns_lookup, contract_info, health, payment_info. Payment works exactly like HTTP: pass wallet (free tier) or x_payment as tool arguments; a 402 is returned as a structured result with the payment requirements.
{ "mcpServers": { "agent-margin-router": { "url": "https://agent-margin-router-production.up.railway.app/mcp" } }}# Streamable HTTP: Verbindung initialisieren, danach Werkzeuge auflisten.curl -s -X POST https://agent-margin-router-production.up.railway.app/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}' curl -s -X POST https://agent-margin-router-production.up.railway.app/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | jqFor crawlers and marketplaces, AMR publishes discovery metadata, an llms.txt and the full OpenAPI schema. All 40 MCP tools advertised an outputSchema in the 15 September 2026 check. Coinbase Bazaar requires a separate payment-challenge extension and indexing flow; the current DNS endpoint did not pass that validation.
curl -s https://agent-margin-router-production.up.railway.app/.well-known/x402 | jqcurl -s https://agent-margin-router-production.up.railway.app/discovery/resources | jqcurl -s https://agent-margin-router-production.up.railway.app/llms.txtcurl -s https://agent-margin-router-production.up.railway.app/openapi.json | jq '.paths | keys'Inspect the returned error body; input-validation errors can use a detail array. If a paid request times out, check its settlement receipt and transaction status before creating another payment authorization. An HTTP error alone is not proof that no transfer occurred.
| Status | Meaning | What to do |
|---|---|---|
| 200 OK | Anfrage erfolgreich; Gratisantwort oder bezahlter Aufruf. | Daten und routing prüfen; für bezahlte Aufrufe PAYMENT-RESPONSE auswerten. |
| 400 Bad Request | Ungültige Anfrage. | Fehlerdetails und Request-Schema prüfen. |
| 402 Payment Required | Zahlung erforderlich oder nicht akzeptiert. | Betrag, Netzwerk, Token, Empfänger und Ablauf der Zahlungsanforderung prüfen; mit kompatiblem x402-Wallet signieren. |
| 403 Forbidden | Anfrage abgelehnt. | Fehlerdetails prüfen; keine blinden Zahlungswiederholungen. |
| 422 Validation Error | Eingabedaten entsprechen nicht dem Request-Schema. | Pflichtfelder, Typen, Grenzen und unterstützte Werte prüfen. |
| 429 Rate Limited | Anfragelimit erreicht. | Retry-After beachten, falls vorhanden; mit Backoff wiederholen. |
| 502 Provider Error | Fehler bei der vorgelagerten Datenquelle. | Fehlerdetails prüfen; nicht blind dieselbe Zahlungsautorisierung wiederverwenden. |
| 503 Unavailable | Dienst vorübergehend nicht verfügbar. | /health prüfen und Backoff verwenden. |
Every request is routed to the healthiest provider based on live health checks, latency and cost. Fallbacks are automatic and transparent — the response always tells you which source served it.
Jede Anfrage wird automatisch an den gesündesten Provider geroutet — Fallbacks inklusive.
apifyHeadless-browser web scraping at scale. Handles JavaScript-rendered pages, infinite scroll and anti-bot friction.
coingeckoBroad coverage of 15k+ assets and 1k+ venues with per-exchange tickers. Used as the primary price source for spread analysis.
coinmarketcapIndependent second price feed. Activated automatically when CoinGecko is rate-limited, stale or unhealthy; also used for confidence cross-checks.
httpx_directZero-cost direct HTTP fetch with HTML parsing. Serves static pages instantly and guarantees availability if Apify is degraded.
/token-price · /crypto-ohlcv/gas-fees · /wallet-balance · /ens-resolve/defi-yields/currency-convert/web-search/email-validate · /dns-whois/geo-ip/pdf-text · /seo-check · /rss-feedLicensing & provenance. Provider terms are respected: outputs are derived, not raw redistributions; every response carries provider and fetched_at. Provider health is monitored 24/7 and exposed at /health.
Drei kostenlose x402-Aufrufe pro Wallet, flexible Einzelzahlungen oder ein monatliches Abo in US-Dollar.
$0
Einmalig pro Wallet
$9 / Monat
Monatlich abgerechnet · USD
$49 / Monat
Monatlich abgerechnet · USD
$199 / Monat
Monatlich abgerechnet · USD
Einrichtungsstatus: Abo-Schlüssel werden nach bestätigter Zahlung verschlüsselt gespeichert. E-Mail-Zustellung und Router-Freischaltung sind noch nicht automatisch angebunden. Die Abo-Kontingente gelten nicht automatisch für bestehende x402-Aufrufe.
Abo-Verwaltung ist im Checkout-Browser verfügbar. Bei verlorenem Browserzugang wende dich an den Anbieter über die Kontaktdaten auf deinem Stripe-Beleg.
Ohne Abo: $0.005 – $0.05 pro Aufruf, bezahlt in USDC oder USDT auf Base. Die folgende Tabelle zeigt ausschließlich die x402-Einzelpreise, nicht die Stripe-Abo-Kontingente.
| Feature | Free Tier | Pay-per-use |
|---|---|---|
| Requests included | 3 total per wallet | Each successful call billed separately |
| Price per request | $0.00 | $0.005 – $0.05 |
| Payment | X-WALLET header only | x402 · USDC or USDT on Base |
| /extract-clean | $0.02 | |
| /market-spread | $0.05 | |
| /gas-fees | $0.005 | |
| /token-price | $0.01 | |
| /wallet-balance | $0.01 | |
| /web-search | $0.02 | |
| /email-validate | $0.01 | |
| /dns-whois | $0.005 | |
| /pdf-text | $0.02 | |
| /seo-check | $0.01 | |
| /defi-yields | $0.02 | |
| /currency-convert | $0.005 | |
| /geo-ip | $0.005 | |
| /rss-feed | $0.01 | |
| /crypto-ohlcv | $0.005 | |
| /ens-resolve | $0.01 | |
| /html-to-markdown | $0.01 | |
| /youtube-transcript | $0.02 | |
| /github-repo-summary | $0.01 | |
| /dex-price | $0.01 | |
| /tx-status | $0.01 | |
| /erc20-balance | $0.01 | |
| /news-search | $0.02 | |
| /hn-search | $0.01 | |
| /reddit-search | $0.01 | |
| /defi-tvl | $0.005 | |
| /fear-greed | $0.005 | |
| /agent-wallet-snapshot | $0.02 | |
| /url-status | $0.005 | |
| /web-crawl | $0.05 | |
| /wikipedia-summary | $0.005 | |
| /arxiv-search | $0.01 | |
| /npm-package | $0.005 | |
| /pypi-package | $0.005 | |
| /geocode | $0.01 | |
| /domain-rdap | $0.01 | |
| /dns-lookup | $0.005 | |
| /contract-info | $0.02 | |
| Multi-provider fallback | ||
| Provenance & billing metadata | ||
| Failed requests charged | ||
| Account / API key required | ||
| Settlement | — | On-chain; verify settlement receipt |
Wir glauben, dass Software-Agenten in den nächsten Jahren zu den größten API-Kunden werden — und dass sie dafür Bezahlwege brauchen, die so maschinennah sind wie HTTP selbst.
English summary: NovaNest builds pay-per-request data infrastructure for autonomous agents, settled natively via x402.
Der Agent Margin Router ist ein Daten-Broker für autonome KI-Agenten: Er bündelt mehrere Datenquellen, routet jede Anfrage an den gesündesten Provider und liefert striktes JSON — bezahlt pro Anfrage, ohne Vertrag.
Keine erfundenen Kennzahlen, keine verschleierten Lizenzen. Jede Antwort trägt Herkunft und Zeitstempel. Providerbedingungen werden maschinenlesbar eingehalten — abgeleitete Ergebnisse statt Rohdaten-Weiterverkauf.
NovaNest entwickelt Infrastruktur für die Agent Economy aus Deutschland heraus. Der Router ist unser erster Baustein: kleine, klar bepreiste Datenservices, die Agenten ohne menschliche Onboarding-Schleife nutzen können.