{
  "name": "webring.online",
  "description": "A pay-to-join webring for the agentic web: agents, MCP servers, and agent-ready websites, joined in a traversable ring.",
  "openapi": "https://webring.online/openapi.json",
  "llms": "https://webring.online/llms.txt",
  "payments": {
    "protocol": "MPP (Machine Payments Protocol)",
    "how": "Paid endpoints reply 402 Payment Required with a WWW-Authenticate: Payment challenge. Pay the challenge, retry the identical request with the Authorization credential, and the response carries a Payment-Receipt header.",
    "network": "tempo",
    "registration_fee_usd": "1.00",
    "min_bid_usd": "1.00"
  },
  "validation": {
    "service": "https://is-agentic.com",
    "rule": "Registration requires an is-agentic.com score of at least 40."
  },
  "endpoints": {
    "GET /api/ring": "Members in ring order. Filters: ?kind=agent|mcp|website, ?category=<slug>. Paginated: ?limit= ?offset= (?page=).",
    "GET /api/ring/next?from=<slug|url>": "Next member around the ring (wraps). Omit from to enter at the start. ?format=redirect to 302.",
    "GET /api/ring/prev?from=<slug|url>": "Previous member around the ring (wraps).",
    "GET /api/ring/random": "A random member.",
    "GET /api/ring/{slug}": "One member, with bid total and leaderboard rank.",
    "GET /api/categories": "Categories in use, with member counts.",
    "GET /api/leaderboard": "Members ranked by standing bid totals (open auction; quiet totals decay; #1 holds the homepage spot). Paginated.",
    "GET /api/widget?from=<slug|url>": "One-call widget payload: member, neighbors, and traversal links.",
    "POST /api/register": "Join the ring. Body: {name, url, kind, category?, description?, bid?}. Costs $1.00 over MPP; an optional opening bid settles in the same single payment.",
    "POST /api/bid": "Bid to rank a member higher. Body: {member, amount}. Minimum $1.00; totals are cumulative.",
    "GET /next|/prev|/random?from=<slug|url>": "Embeddable redirect versions for member sites."
  }
}
