{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/fiatdock-com/json-schema/fiatdock-com-x402-top-services-schema.json",
  "title": "X402TopServices",
  "description": "Paid. x402 market leaderboard (who earns, from how many payers).",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/fiatdock-com-x402-api-openapi.yml#/components/schemas/X402TopServices",
  "type": "object",
  "properties": {
    "sort": {
      "type": "string",
      "description": "The ranking applied"
    },
    "q": {
      "type": [
        "string",
        "null"
      ],
      "description": "The keyword filter, or null"
    },
    "network": {
      "type": [
        "string",
        "null"
      ],
      "description": "The network filter, or null"
    },
    "minPayers": {
      "type": "number",
      "description": "The paying-wallet floor applied"
    },
    "services": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string"
          },
          "resources": {
            "type": "number"
          },
          "calls30d": {
            "type": "number"
          },
          "payers30dMax": {
            "type": "number"
          },
          "callsPerPayer": {
            "type": [
              "number",
              "null"
            ]
          },
          "estRevenue30dUsd": {
            "type": "number"
          },
          "unpricedResources": {
            "type": "number"
          },
          "medianPriceUsd": {
            "type": [
              "number",
              "null"
            ]
          },
          "networks": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lastCalledAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "topResource": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "priceUsd": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "calls30d": {
                "type": "number"
              },
              "payers30d": {
                "type": "number"
              }
            },
            "required": [
              "url",
              "name",
              "description",
              "priceUsd",
              "calls30d",
              "payers30d"
            ]
          }
        },
        "required": [
          "host",
          "resources",
          "calls30d",
          "payers30dMax",
          "callsPerPayer",
          "estRevenue30dUsd",
          "unpricedResources",
          "medianPriceUsd",
          "networks",
          "lastCalledAt",
          "topResource"
        ]
      },
      "description": "Sellers (hosts), ranked"
    },
    "count": {
      "type": "number",
      "description": "Sellers returned"
    },
    "totals": {
      "type": "object",
      "properties": {
        "hosts": {
          "type": "number"
        },
        "resources": {
          "type": "number"
        },
        "calls30d": {
          "type": "number"
        },
        "estRevenue30dUsd": {
          "type": "number"
        }
      },
      "required": [
        "hosts",
        "resources",
        "calls30d",
        "estRevenue30dUsd"
      ],
      "description": "Totals over every seller that passed the filters"
    },
    "indexedAt": {
      "type": [
        "string",
        "null"
      ],
      "description": "ISO time the public index was last read"
    },
    "stale": {
      "type": "boolean",
      "description": "True when that read is more than 3 hours old"
    },
    "source": {
      "type": "string",
      "description": "The index the data comes from"
    },
    "note": {
      "type": "string",
      "description": "How the revenue and payer figures are built, and their limits"
    }
  },
  "required": [
    "sort",
    "q",
    "network",
    "minPayers",
    "services",
    "count",
    "totals",
    "indexedAt",
    "stale",
    "source",
    "note"
  ]
}