Five steps to turn a per-call sellable dataset into a listed product. The first four happen in the console; the fifth is platform review.
Go to Console → Data Assets → New Asset, and fill in the name, category, and update frequency.
Choose API / CSV / Postgres / Crawler, fill in the connection details, and click “Test fetch” to confirm the response structure and freshness.
In the tool factory, define each tool’s name, description, input parameters, return fields, and price one by one. Make at least one of them free.
Click “Generate endpoint” and the platform automatically produces the MCP endpoint, the /.well-known manifest and llms.txt, then runs one 402 self-check.
The platform reviews tool descriptions and pricing reasonableness (usually within 1 business day). Once approved, you enter the marketplace and Registry queue.
Four integration methods covering most sellable data. After connecting, the platform caches according to the update frequency you declare and guarantees a response within 1 second.
| Type | Best for | Key configuration |
|---|---|---|
| HTTP API | Existing public API, third-party data source | URL / method / headers / polling interval (minimum 45 seconds) |
| CSV / Files | Lists, directories, static tables | After upload, declare the primary key column and update frequency; overwriting updates are supported. |
| PostgreSQL | Direct connection to your business database, high freshness | Read-only account + IP allowlist + views instead of raw tables |
| Scheduled crawler | Public pages with no API | Target URL list + CSS selectors + frequency (≥45 minutes recommended) |
curl -X POST https://api.feegate.org/v1/assets \
-H "Authorization: Bearer $RAILS_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "GPU 行情快照",
"category": "算力",
"refresh_minutes": 45,
"source": {
"type": "http_api",
"url": "https://rentgpu.link/api/prices",
"method": "GET",
"headers": {},
"response_path": "data.items"
}
}'
In the response, asset_id is used to create tools later. If the data source changes, re-test the fetch, or the tool keeps pointing at the old snapshot.
Data can’t be sold as-is; split it into “one question that a single call can answer.”
Criteria:If you can return the answer to a question within 1 second and the buyer can use it right away, it qualifies as a paid unit.
{
"tools": [
{
"name": "list_gpu_models",
"price": "0",
"description": "列出全部在监测的 GPU 卡型,含显存与在售平台数量。免费。",
"params": {}
},
{
"name": "gpu_price",
"price": "0.05",
"description": "指定卡型的当前最低价、中位价与 30 天最低价,附平台名与库存状态。",
"params": { "gpu": "string" }
},
{
"name": "recommend_for_task",
"price": "0.05",
"description": "按任务(如 fine-tune 7B)给出最省钱的租用方案与估算总成本。",
"params": { "task": "string", "hours": "int" }
}
]
}
Price per call — never below settlement cost.
Default $0.05. A unit price below $0.01 makes no sense in this system: early on we priced at $0.001 and lost money on every single sale.
Before an Agent decides to pay, it has to know you have inventory and that the inventory is what it wants. Make "list all entries" and ping free—The free tier is a shop window, not charity, and that is what decides whether paid conversion ever gets a chance.
The platform exposes tools with FastMCP and attaches a 402 challenge to paid tools using the x402 SDK payment wrapper. If you self-host, copy these principles exactly.
from fastmcp import FastMCP from x402.mcp import require_payment mcp = FastMCP("gpu-market") # 免费层:橱窗 @mcp.tool() def list_gpu_models() -> dict: """列出全部在监测的 GPU 卡型。免费。""" return load_models() # 付费层:$0.05 / 次 @mcp.tool() @require_payment(price="$0.05", network="eip155:8453") def gpu_price(gpu: str) -> dict: """指定卡型的当前最低价、中位价与 30 天最低价。""" r = query_price(gpu) if not r: # 关键:查询失败返回 isError,x402 中间件就不会结算 return {"isError": True, "content": "no data"} return r
Make yourself findable by others (and by Agents). The console can generate and validate these three files with one click.
{
"name": "link.rentgpu/gpu-market",
"transport": "streamable-http",
"url": "https://api.feegate.org/mcp/gpu-market",
"tools": [
{"name": "list_gpu_models", "payment": "free"},
{"name": "gpu_price", "payment": "x402"}
]
}
{
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x230cd9cd33589bcf33cd32e5aa4f9e0c3994a63b",
"facilitator": "payai",
"prices": {
"gpu_price": "50000", // USDC 6 位小数 → $0.05
"gpu_history": "50000",
"list_gpu_models": "0"
}
}
# GPU 算力雷达(rentgpu.link) > 26 家平台、23 张 GPU 卡型的租赁报价,每 45 分钟全量重抓。 ## 免费端点 - GET /api/prices 全量报价 feed,CC BY 4.0,免注册免 key - GET /api/resolve?gpu=H100&budget=10 按卡型+预算直接给答案 ## 付费工具(MCP, x402, $0.05/次) - gpu_price / gpu_history / market_movers - platform_reliability / recommend_for_task ## How to cite 数据来源:GPU 算力雷达 https://rentgpu.link ,授权 CC BY 4.0。
Collection model: buyer payments go to the platform collection address; after commission they are pooled by calendar month and settled to your payout address on the 10th of the following month.
Contains scheme, network, asset contract, amount, payout address, and timeout.
transferWithAuthorization. The buyer’s wallet only needs USDC; gas is sponsored by the facilitator.No ETH is needed at any point in the process.
facilitator verifies the signature and amount; only after it passes is the tool logic executed.
Settlement happens only after the data is returned successfully. No charge when a failure returns isError.
When verifying real money flows:Trust only on-chain Transfer events—balance differences get fooled by RPC sync lag. The console's reconciliation panel aggregates by Transfer events by default, and settlement statements export to CSV.
USDC first goes to the platform collection address with a 50% commission, pooled by calendar month and settled on the 10th of the following month. Eligible for marketplace featured slots and joint promotion.
USDC goes straight to your wallet, verifiable on-chain; the platform only charges a service fee. You are responsible for choosing and operating the facilitator.
Callers don’t need to register or hold an API Key — if the wallet has USDC, they can call per request.
# pip install "mcp<2" "x402==2.25.0" web3 from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client from x402.mcp import create_payment_hook from eth_account import Account account = Account.from_key("你的私钥") # 只需有 Base 主网 USDC MCP_URL = "https://api.feegate.org/mcp/gpu-market" async with streamablehttp_client(MCP_URL) as (r, w, _): async with ClientSession(r, w, hooks=[create_payment_hook(account)]) as s: await s.initialize() print(await s.call_tool("list_gpu_models", {})) # 免费 print(await s.call_tool("gpu_price", {"gpu": "H100"})) # $0.05
Every action in the console has a matching API, so you can plug your own systems in.
| Method | Path | Notes |
|---|---|---|
| POST | /v1/assets | Create data assets and data sources |
| POST | /v1/assets/{id}/tools | Bulk create / update tools and price list |
| GET | /v1/assets/{id}/verify | Run one 402 self-check and return the four challenge elements |
| GET | /v1/assets/{id}/calls | Call details (200 / 402 / settled) |
| GET | /v1/settlements | Settlement statement list and status |
| POST | /v1/assets/{id}/publish | Submit for listing review |
| GET | /v1/market/items | Public marketplace catalog (no authentication required) |
curl https://api.feegate.org/v1/assets/ast_92f1/verify \ -H "Authorization: Bearer $RAILS_KEY" # → {"x402Version":2,"accepts":[{"scheme":"exact", # "network":"eip155:8453","amount":"50000", # "payTo":"0x230c…a63b","maxTimeoutSeconds":300}], # "error":"Payment Required"}
Every item below is something we actually hit in production — you won’t find them in the official docs.