{"openapi":"3.1.0","info":{"title":"ToolVet API","version":"1.0.0","description":"The vetted directory of paid APIs and MCP servers for AI agents. Paid operations use x402 (USDC on Base). Agent docs: https://toolvet.app/agents","contact":{"email":"hello@toolvet.app"}},"servers":[{"url":"https://toolvet.app"}],"paths":{"/api/v1/search":{"get":{"operationId":"search","summary":"Search vetted agent services","description":"Ranked search over live-monitored x402 APIs and MCP servers: trust score, 30-day uptime, latency, real price and how to call each result.","tags":["Agents (paid)"],"parameters":[{"name":"q","in":"query","required":true,"description":"What the service should do","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"description":"x402 or mcp","schema":{"type":"string","enum":["x402","mcp"]}},{"name":"category","in":"query","required":false,"description":"Category slug from /api/v1/categories","schema":{"type":"string"}},{"name":"max_price","in":"query","required":false,"description":"Maximum price per call in USD","schema":{"type":"string"}},{"name":"network","in":"query","required":false,"description":"CAIP-2 network, e.g. eip155:8453","schema":{"type":"string"}},{"name":"min_score","in":"query","required":false,"description":"Minimum trust score 0-100","schema":{"type":"string"}},{"name":"live_only","in":"query","required":false,"description":"true to only return services passing their latest check","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"1-50 (default 10)","schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"Pagination offset","schema":{"type":"string"}}],"x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"network":"eip155:8453","payTo":"0x1a967eB4a35565D0F856dbf8A5E6245723bc6E80"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (nothing is charged)"},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 challenge (price, network, pay-to)."},"404":{"description":"Unknown service id (nothing is charged)"}}}},"/api/v1/recommend":{"get":{"operationId":"recommend","summary":"Recommend the best service for a task","description":"Describe a task in plain language and get the 3 best live, trustworthy services with the reason for each, call instructions and fallbacks.","tags":["Agents (paid)"],"parameters":[{"name":"task","in":"query","required":true,"description":"The task in plain language","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"description":"x402 or mcp","schema":{"type":"string","enum":["x402","mcp"]}},{"name":"max_price","in":"query","required":false,"description":"Maximum price per call in USD","schema":{"type":"string"}},{"name":"network","in":"query","required":false,"description":"CAIP-2 network","schema":{"type":"string"}}],"x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"network":"eip155:8453","payTo":"0x1a967eB4a35565D0F856dbf8A5E6245723bc6E80"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (nothing is charged)"},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 challenge (price, network, pay-to)."},"404":{"description":"Unknown service id (nothing is charged)"}}}},"/api/v1/services/{id}/report":{"get":{"operationId":"report","summary":"Full vetting report","description":"Complete vetting report for one service: trust score breakdown, daily uptime for 30 days, latency p50/p95, probe history, price and pay-to changes, security findings.","tags":["Agents (paid)"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Service id (slug)"}],"x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"network":"eip155:8453","payTo":"0x1a967eB4a35565D0F856dbf8A5E6245723bc6E80"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (nothing is charged)"},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 challenge (price, network, pay-to)."},"404":{"description":"Unknown service id (nothing is charged)"}}}},"/api/v1/check":{"get":{"operationId":"check","summary":"Preflight check before paying an x402 endpoint","description":"Live-probe any x402 URL before your agent pays it: is the 402 challenge valid, what does it really cost, which token and network, does the pay-to match the listing, and is it known to be trustworthy.","tags":["Agents (paid)"],"parameters":[{"name":"url","in":"query","required":true,"description":"The x402 endpoint you are about to pay","schema":{"type":"string"}},{"name":"method","in":"query","required":false,"description":"GET or POST (default GET)","schema":{"type":"string"}}],"x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"network":"eip155:8453","payTo":"0x1a967eB4a35565D0F856dbf8A5E6245723bc6E80"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (nothing is charged)"},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 challenge (price, network, pay-to)."},"404":{"description":"Unknown service id (nothing is charged)"}}}},"/api/v1/services/{id}/verify":{"post":{"operationId":"verifyPost","summary":"Verified owner badge (365 days)","description":"Prove you run this service and get the Verified badge plus +10 trust points. Pay from the listing's pay-to wallet, or host the claim token on your domain first.","tags":["Vendors (paid)"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Service id (slug)"}],"x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"19"},"network":"eip155:8453","payTo":"0x1a967eB4a35565D0F856dbf8A5E6245723bc6E80"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (nothing is charged)"},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 challenge (price, network, pay-to)."},"403":{"description":"Ownership not proven (nothing is charged)"},"404":{"description":"Unknown service id (nothing is charged)"},"409":{"description":"Not eligible (nothing is charged)"}}}},"/api/v1/services/{id}/feature":{"post":{"operationId":"featurePost","summary":"Featured placement (7 days)","description":"Show a verified, healthy listing in the clearly labelled Sponsored slots of matching searches and its category page. Organic ranking is never affected.","tags":["Vendors (paid)"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Service id (slug)"}],"x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"15"},"network":"eip155:8453","payTo":"0x1a967eB4a35565D0F856dbf8A5E6245723bc6E80"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (nothing is charged)"},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 challenge (price, network, pay-to)."},"403":{"description":"Ownership not proven (nothing is charged)"},"404":{"description":"Unknown service id (nothing is charged)"},"409":{"description":"Not eligible (nothing is charged)"}}}},"/api/v1/categories":{"get":{"operationId":"categories","summary":"List categories (free)","tags":["Free"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/services":{"get":{"operationId":"listServices","summary":"Browse listings (free, 50 per page)","tags":["Free"],"parameters":[{"name":"category","in":"query","schema":{"type":"string"}},{"name":"kind","in":"query","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"string"}},{"name":"min_score","in":"query","schema":{"type":"string"}},{"name":"live_only","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"Free tier rate limit"}}},"post":{"operationId":"submitService","summary":"Submit a listing (free)","tags":["Free"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","enum":["x402","mcp"]},"name":{"type":"string"},"description":{"type":"string"},"contact_email":{"type":"string","format":"email"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"422":{"description":"No x402 challenge or MCP server found"}}}},"/api/v1/services/{id}":{"get":{"operationId":"getService","summary":"Basic facts about one listing (free)","tags":["Free"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found"}}}},"/api/v1/services/{id}/claim":{"post":{"operationId":"claimService","summary":"Get ownership-claim instructions (free)","tags":["Free"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}