{
  "openapi": "3.1.0",
  "info": {
    "title": "web3 validator public data API",
    "version": "1.0.0",
    "summary": "Read-only validator, network, and publication data for automated clients.",
    "description": "Public, unauthenticated JSON endpoints describing the web3 validator (web34ever) operation: Solana validator identity and metrics, the networks validated, and published staking guides. All responses are static, generated at build time, and free to use. No authentication or registration is required; see https://web34ever.com/auth.md.",
    "contact": {
      "name": "web3 validator operator",
      "email": "info@web34ever.com",
      "url": "https://web34ever.com/#contacts"
    },
    "license": {
      "name": "CC-BY-4.0",
      "identifier": "CC-BY-4.0"
    },
    "termsOfService": "https://web34ever.com/terms-of-use"
  },
  "externalDocs": {
    "description": "API documentation",
    "url": "https://web34ever.com/api"
  },
  "servers": [
    {
      "url": "https://web34ever.com/api",
      "description": "Production"
    }
  ],
  "security": [],
  "paths": {
    "/validator.json": {
      "get": {
        "operationId": "getValidator",
        "summary": "Solana validator identity and latest published metrics",
        "description": "Vote account, identity, public profiles, delegation links, and a build-time metrics snapshot. `metrics.as_of` states when the snapshot was taken and `metrics.live_source` points at the upstream Stakewiz endpoint for current values.",
        "tags": [
          "validator"
        ],
        "responses": {
          "200": {
            "description": "Validator record",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Validator"
                }
              }
            }
          }
        }
      }
    },
    "/networks.json": {
      "get": {
        "operationId": "listNetworks",
        "summary": "Networks validated by the operator",
        "description": "Active mainnet and Cosmos-ecosystem networks plus testnet participation, each with a public explorer or validator profile URL.",
        "tags": [
          "networks"
        ],
        "responses": {
          "200": {
            "description": "Network directory",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkList"
                }
              }
            }
          }
        }
      }
    },
    "/mcp": {
      "servers": [
        {
          "url": "https://web34ever.com",
          "description": "Site root"
        }
      ],
      "post": {
        "operationId": "mcpRpc",
        "summary": "MCP server (Streamable HTTP, JSON-RPC 2.0)",
        "description": "Stateless Model Context Protocol endpoint, revision 2026-07-28 (the 2025-11-25 handshake era is also accepted). Tools: get_validator_metrics, list_networks, list_guides, get_guide. Requires the MCP-Protocol-Version, Mcp-Method and, for tools/call, Mcp-Name headers. Server card: /.well-known/mcp/server-card.json",
        "tags": [
          "agents"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JsonRpcRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Header mismatch (-32020) or unsupported protocol version (-32022)"
          },
          "404": {
            "description": "Unknown method (-32601)"
          },
          "405": {
            "description": "Method not allowed — this endpoint is POST only"
          }
        }
      }
    },
    "/a2a": {
      "servers": [
        {
          "url": "https://web34ever.com",
          "description": "Site root"
        }
      ],
      "post": {
        "operationId": "a2aRpc",
        "summary": "A2A agent (JSON-RPC 2.0)",
        "description": "Agent2Agent endpoint. Send the A2A-Version header; per spec its absence is interpreted as v0.3, which uses the older method names. Skills: validator-metrics, network-directory, staking-guides. Agent card: /.well-known/agent-card.json",
        "tags": [
          "agents"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JsonRpcRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC response containing a Message",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Unknown method, or no such task (-32001)"
          },
          "405": {
            "description": "Method not allowed — this endpoint is POST only"
          }
        }
      }
    },
    "/posts.json": {
      "get": {
        "operationId": "listPosts",
        "summary": "Published staking guides",
        "description": "Index of blog posts with canonical URLs, dates, and keywords.",
        "tags": [
          "content"
        ],
        "responses": {
          "200": {
            "description": "Post index",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostList"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "JsonRpcRequest": {
        "type": "object",
        "required": [
          "jsonrpc",
          "method"
        ],
        "properties": {
          "jsonrpc": {
            "type": "string",
            "const": "2.0"
          },
          "id": {
            "type": [
              "string",
              "integer",
              "null"
            ]
          },
          "method": {
            "type": "string"
          },
          "params": {
            "type": "object"
          }
        }
      },
      "Validator": {
        "type": "object",
        "required": [
          "operator",
          "website",
          "validator",
          "metrics"
        ],
        "properties": {
          "operator": {
            "type": "string"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "version": {
            "type": "string"
          },
          "custody": {
            "type": "string",
            "const": "non-custodial"
          },
          "validator": {
            "type": "object",
            "required": [
              "network",
              "vote_account",
              "identity"
            ],
            "properties": {
              "network": {
                "type": "string",
                "examples": [
                  "solana-mainnet"
                ]
              },
              "vote_account": {
                "type": "string"
              },
              "identity": {
                "type": "string"
              },
              "profiles": {
                "type": "object",
                "additionalProperties": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "delegation": {
                "type": "object",
                "additionalProperties": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "metrics": {
            "type": "object",
            "required": [
              "as_of",
              "live_source"
            ],
            "description": "Build-time snapshot; not a live feed.",
            "properties": {
              "as_of": {
                "type": "string",
                "format": "date"
              },
              "live_source": {
                "type": "string",
                "format": "uri"
              },
              "epoch": {
                "type": "integer"
              },
              "activated_stake_sol": {
                "type": "number"
              },
              "commission_percent": {
                "type": "number"
              },
              "mev_commission_bps": {
                "type": "integer"
              },
              "total_apy_percent": {
                "type": "number"
              },
              "staking_apy_percent": {
                "type": "number"
              },
              "jito_apy_percent": {
                "type": "number"
              },
              "uptime_percent": {
                "type": "number"
              },
              "skip_rate_percent": {
                "type": "number"
              },
              "version": {
                "type": "string"
              },
              "jito_enabled": {
                "type": "boolean"
              },
              "network_average": {
                "type": "object",
                "properties": {
                  "apy_percent": {
                    "type": "number"
                  },
                  "commission_percent": {
                    "type": "number"
                  },
                  "skip_rate_percent": {
                    "type": "number"
                  }
                }
              }
            }
          }
        }
      },
      "Network": {
        "type": "object",
        "required": [
          "name",
          "category",
          "description",
          "public_profile"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "mainnet",
              "cosmos",
              "testnet",
              "archived"
            ]
          },
          "role": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": "string"
          },
          "public_profile": {
            "type": "string",
            "format": "uri"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "NetworkList": {
        "type": "object",
        "required": [
          "active",
          "testnets"
        ],
        "properties": {
          "operator": {
            "type": "string"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "version": {
            "type": "string"
          },
          "counts": {
            "type": "object",
            "properties": {
              "active": {
                "type": "integer"
              },
              "testnet": {
                "type": "integer"
              }
            }
          },
          "active": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Network"
            }
          },
          "testnets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Network"
            }
          }
        }
      },
      "Post": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "url",
          "published"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "published": {
            "type": "string",
            "format": "date"
          },
          "updated": {
            "type": "string",
            "format": "date"
          },
          "reading_time_minutes": {
            "type": "integer"
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PostList": {
        "type": "object",
        "required": [
          "posts"
        ],
        "properties": {
          "operator": {
            "type": "string"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "version": {
            "type": "string"
          },
          "feed": {
            "type": "string",
            "format": "uri"
          },
          "count": {
            "type": "integer"
          },
          "posts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Post"
            }
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "validator",
      "description": "Validator identity and performance data"
    },
    {
      "name": "networks",
      "description": "Networks the operator validates"
    },
    {
      "name": "content",
      "description": "Published guides"
    },
    {
      "name": "agents",
      "description": "Agent-interop endpoints (MCP, A2A)"
    }
  ]
}
