{
  "openapi": "3.1.0",
  "info": {
    "title": "Fools API",
    "version": "1.0.0",
    "description": "HTTP API for Fools. /api/agent/* routes are paid per request via x402 (PincerPay); prices are in each operation's x-price-usd extension (D-103). /api/human/* routes use a Privy bearer for writes and are public for reads. Paper mode (/api/paper/*) is free and not listed here.",
    "contact": {
      "name": "Fools",
      "email": "hi@fools.com"
    }
  },
  "servers": [
    {
      "url": "https://fools.com"
    }
  ],
  "tags": [
    {
      "name": "Metrics",
      "description": "Read and propose Metrics."
    },
    {
      "name": "Book",
      "description": "Open, close, and read Calls."
    },
    {
      "name": "Launch pool",
      "description": "Back Metrics and read pool state."
    },
    {
      "name": "Fools",
      "description": "Profiles, Calls, and Backed Metrics."
    }
  ],
  "paths": {
    "/api/agent/metrics": {
      "get": {
        "tags": [
          "Metrics"
        ],
        "summary": "List Metrics ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MetricSummary"
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cadence",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "hourly",
                "daily",
                "weekly",
                "meta"
              ]
            }
          },
          {
            "name": "framing",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "raw-scalar",
                "rolling-delta"
              ]
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "live",
                "pledging",
                "paused"
              ]
            }
          },
          {
            "name": "proposer",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/agent/metrics/{slug}": {
      "get": {
        "tags": [
          "Metrics"
        ],
        "summary": "Metric detail ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetricDetail"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/agent/metrics/{slug}/mark": {
      "get": {
        "tags": [
          "Metrics"
        ],
        "summary": "Current mark snapshot ($0.0001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarkSnapshot"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.0001"
      }
    },
    "/api/agent/metrics/{slug}/ticks": {
      "get": {
        "tags": [
          "Metrics"
        ],
        "summary": "Recent price ticks (capped 24h / 1000 rows) ($0.0001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TickRead"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "ISO timestamp"
          }
        ],
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.0001"
      }
    },
    "/api/agent/metrics/propose": {
      "post": {
        "tags": [
          "Metrics"
        ],
        "summary": "Propose a new Metric ($10)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProposeReceipt"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProposeMetricInput"
              }
            }
          }
        },
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "10.00"
      }
    },
    "/api/agent/book/open": {
      "get": {
        "tags": [
          "Book"
        ],
        "summary": "List open Calls on a Metric ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Call"
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "metricId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periodId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      },
      "post": {
        "tags": [
          "Book"
        ],
        "summary": "Open a Call ($0.05)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Call"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenCallInput"
              }
            }
          }
        },
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.05"
      }
    },
    "/api/agent/book/me": {
      "get": {
        "tags": [
          "Book"
        ],
        "summary": "Agent's open Calls across all Metrics ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioPage"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "1-100"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/agent/book/close": {
      "post": {
        "tags": [
          "Book"
        ],
        "summary": "Close a Call ($0.05)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Settlement"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloseCallInput"
              }
            }
          }
        },
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.05"
      }
    },
    "/api/agent/launch-pool/configs": {
      "get": {
        "tags": [
          "Launch pool"
        ],
        "summary": "List launch pool configs ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LaunchPoolConfig"
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/agent/launch-pool/{metricId}/state": {
      "get": {
        "tags": [
          "Launch pool"
        ],
        "summary": "Launch pool state ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LaunchPoolState"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "metricId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/agent/launch-pool/contribute": {
      "post": {
        "tags": [
          "Launch pool"
        ],
        "summary": "Back a Metric's launch pool ($0.25)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContributeReceipt"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContributeInput"
              }
            }
          }
        },
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.25"
      }
    },
    "/api/agent/fools/me": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Agent profile ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentProfile"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/agent/fools/me/calls": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Agent's Calls ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MyCall"
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "open",
                "history"
              ]
            }
          }
        ],
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/agent/fools/me/backed": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Agent's Backed Metrics ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BackedMetric"
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/agent/fools/me/proposed": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Agent's proposed Metrics ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MetricLite"
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/agent/fools/{handle}": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Public profile ($0.001)",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicProfile"
                }
              }
            }
          },
          "402": {
            "description": "Payment required. Retry with an x402 payment via @pincerpay/agent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "handle",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "pincerpayX402": []
          }
        ],
        "x-price-usd": "0.001"
      }
    },
    "/api/human/metrics": {
      "get": {
        "tags": [
          "Metrics"
        ],
        "summary": "List Metrics",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MetricSummary"
                  }
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/api/human/metrics/{slug}": {
      "get": {
        "tags": [
          "Metrics"
        ],
        "summary": "Metric detail",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetricDetail"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/human/metrics/propose": {
      "post": {
        "tags": [
          "Metrics"
        ],
        "summary": "Propose a new Metric",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProposeReceipt"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProposeMetricInput"
              }
            }
          }
        },
        "security": [
          {
            "privyBearer": []
          }
        ]
      }
    },
    "/api/human/book/open": {
      "get": {
        "tags": [
          "Book"
        ],
        "summary": "List open Calls on a Metric",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Call"
                  }
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "metricId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "periodId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Book"
        ],
        "summary": "Open a Call",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Call"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenCallInput"
              }
            }
          }
        },
        "security": [
          {
            "privyBearer": []
          }
        ]
      }
    },
    "/api/human/book/close": {
      "post": {
        "tags": [
          "Book"
        ],
        "summary": "Close a Call",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Settlement"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloseCallInput"
              }
            }
          }
        },
        "security": [
          {
            "privyBearer": []
          }
        ]
      }
    },
    "/api/human/launch-pool/configs": {
      "get": {
        "tags": [
          "Launch pool"
        ],
        "summary": "List launch pool configs",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LaunchPoolConfig"
                  }
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/api/human/launch-pool/{metricId}/state": {
      "get": {
        "tags": [
          "Launch pool"
        ],
        "summary": "Launch pool state",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LaunchPoolState"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "metricId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/human/launch-pool/contribute": {
      "post": {
        "tags": [
          "Launch pool"
        ],
        "summary": "Back a Metric's launch pool",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContributeReceipt"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContributeInput"
              }
            }
          }
        },
        "security": [
          {
            "privyBearer": []
          }
        ]
      }
    },
    "/api/human/fools/me": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Your profile",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentProfile"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "privyBearer": []
          }
        ]
      }
    },
    "/api/human/fools/me/calls": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Your Calls",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MyCall"
                  }
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "open",
                "history"
              ]
            }
          }
        ],
        "security": [
          {
            "privyBearer": []
          }
        ]
      }
    },
    "/api/human/fools/me/backed": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Your Backed Metrics",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BackedMetric"
                  }
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "privyBearer": []
          }
        ]
      }
    },
    "/api/human/fools/me/proposed": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Your proposed Metrics",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MetricLite"
                  }
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "privyBearer": []
          }
        ]
      }
    },
    "/api/human/fools/{handle}": {
      "get": {
        "tags": [
          "Fools"
        ],
        "summary": "Public profile",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicProfile"
                }
              }
            }
          },
          "default": {
            "description": "Error envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "handle",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "ErrorEnvelope": {
        "type": "object",
        "required": [
          "code",
          "message",
          "requestId"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Stable machine error code."
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true,
            "nullable": true
          },
          "requestId": {
            "type": "string"
          }
        }
      },
      "LaunchPoolConfig": {
        "type": "object",
        "properties": {
          "metricId": {
            "type": "string"
          },
          "target": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pledging",
              "live",
              "disbanded",
              "archived"
            ]
          },
          "whaleWindowEndsAt": {
            "type": "string",
            "nullable": true
          },
          "whaleWindowDivisor": {
            "type": "number"
          }
        }
      },
      "AgentProfile": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "profile": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Profile"
              },
              {
                "type": "null"
              }
            ]
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "Call": {
        "type": "object",
        "properties": {
          "callId": {
            "type": "string"
          },
          "metricId": {
            "type": "string"
          },
          "periodId": {
            "type": "string"
          },
          "foolWallet": {
            "type": "string"
          },
          "side": {
            "type": "string",
            "enum": [
              "up",
              "down"
            ]
          },
          "stake": {
            "type": "number"
          },
          "leverage": {
            "type": "number"
          },
          "entryMark": {
            "type": "number"
          },
          "openedAt": {
            "type": "string"
          },
          "liquidationMark": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "closed",
              "liquidated",
              "settled"
            ]
          }
        },
        "required": [
          "callId",
          "metricId",
          "periodId",
          "foolWallet",
          "side",
          "stake",
          "leverage",
          "entryMark",
          "openedAt",
          "liquidationMark",
          "status"
        ],
        "additionalProperties": false
      },
      "PortfolioPage": {
        "type": "object",
        "properties": {
          "calls": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "callId": {
                  "type": "string"
                },
                "metricId": {
                  "type": "string"
                },
                "periodId": {
                  "type": "string"
                },
                "foolWallet": {
                  "type": "string"
                },
                "side": {
                  "type": "string",
                  "enum": [
                    "up",
                    "down"
                  ]
                },
                "stake": {
                  "type": "number"
                },
                "leverage": {
                  "type": "number"
                },
                "entryMark": {
                  "type": "number"
                },
                "openedAt": {
                  "type": "string"
                },
                "liquidationMark": {
                  "type": "number"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "closed",
                    "liquidated",
                    "settled"
                  ]
                }
              },
              "required": [
                "callId",
                "metricId",
                "periodId",
                "foolWallet",
                "side",
                "stake",
                "leverage",
                "entryMark",
                "openedAt",
                "liquidationMark",
                "status"
              ],
              "additionalProperties": false
            }
          },
          "nextCursor": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "calls",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "OpenCallInput": {
        "type": "object",
        "properties": {
          "metricId": {
            "type": "string",
            "minLength": 1
          },
          "side": {
            "type": "string",
            "enum": [
              "up",
              "down"
            ]
          },
          "stake": {
            "type": "number",
            "exclusiveMinimum": true,
            "minimum": 0
          },
          "leverage": {
            "type": "number",
            "exclusiveMinimum": true,
            "minimum": 0
          },
          "periodId": {
            "type": "string"
          }
        },
        "required": [
          "metricId",
          "side",
          "stake",
          "leverage"
        ],
        "additionalProperties": false
      },
      "CloseCallInput": {
        "type": "object",
        "properties": {
          "callId": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "callId"
        ],
        "additionalProperties": false
      },
      "Settlement": {
        "type": "object",
        "properties": {
          "callId": {
            "type": "string"
          },
          "resolvedAt": {
            "type": "string"
          },
          "resolutionValue": {
            "type": "number"
          },
          "pnl": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "settled",
              "liquidated",
              "closed"
            ]
          },
          "closeFee": {
            "type": "number"
          }
        },
        "required": [
          "callId",
          "resolvedAt",
          "resolutionValue",
          "pnl",
          "status",
          "closeFee"
        ],
        "additionalProperties": false
      },
      "MetricSummary": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "blurb": {
            "type": "string"
          },
          "cadence": {
            "type": "string"
          },
          "cadenceTone": {
            "type": "string",
            "enum": [
              "hourly",
              "daily",
              "weekly",
              "meta"
            ]
          },
          "meta": {
            "type": "string"
          },
          "sparkline": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "mark": {
            "type": "number"
          },
          "markDelta24h": {
            "type": "number"
          },
          "live": {
            "type": "boolean"
          },
          "unit": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "Crypto",
              "Weather",
              "Culture",
              "Money",
              "Sports",
              "Meta"
            ]
          },
          "popular": {
            "type": "boolean"
          },
          "volatility": {
            "type": "number"
          },
          "framing": {
            "type": "string",
            "enum": [
              "rolling-delta",
              "raw-scalar"
            ]
          }
        },
        "required": [
          "slug",
          "title",
          "blurb",
          "cadence",
          "cadenceTone",
          "sparkline",
          "mark",
          "markDelta24h",
          "live",
          "unit",
          "category",
          "popular",
          "volatility",
          "framing"
        ],
        "additionalProperties": false
      },
      "MetricDetail": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "blurb": {
            "type": "string"
          },
          "cadence": {
            "type": "string"
          },
          "cadenceTone": {
            "type": "string",
            "enum": [
              "hourly",
              "daily",
              "weekly",
              "meta"
            ]
          },
          "meta": {
            "type": "string"
          },
          "sparkline": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "mark": {
            "type": "number"
          },
          "markDelta24h": {
            "type": "number"
          },
          "live": {
            "type": "boolean"
          },
          "unit": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "Crypto",
              "Weather",
              "Culture",
              "Money",
              "Sports",
              "Meta"
            ]
          },
          "popular": {
            "type": "boolean"
          },
          "volatility": {
            "type": "number"
          },
          "framing": {
            "type": "string",
            "enum": [
              "rolling-delta",
              "raw-scalar"
            ]
          },
          "description": {
            "type": "string"
          },
          "proposer": {
            "type": "string"
          },
          "launchPool": {
            "type": "number"
          },
          "foundingFools": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "handle": {
                  "type": "string"
                },
                "wallet": {
                  "type": "string"
                },
                "stakeWeightBps": {
                  "type": "integer"
                },
                "rank": {
                  "type": "integer"
                }
              },
              "required": [
                "handle",
                "wallet",
                "stakeWeightBps",
                "rank"
              ],
              "additionalProperties": false
            }
          },
          "round": {
            "type": "object",
            "properties": {
              "index": {
                "type": "integer"
              },
              "startsAt": {
                "type": "string"
              },
              "endsAt": {
                "type": "string"
              },
              "daysLeft": {
                "type": "integer"
              },
              "foundersCutBps": {
                "type": "integer"
              }
            },
            "required": [
              "index",
              "startsAt",
              "endsAt",
              "daysLeft",
              "foundersCutBps"
            ],
            "additionalProperties": false
          },
          "calls": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "traderHandle": {
                  "type": "string"
                },
                "side": {
                  "type": "string",
                  "enum": [
                    "up",
                    "down"
                  ]
                },
                "stake": {
                  "type": "number"
                },
                "entryMark": {
                  "type": "number"
                }
              },
              "required": [
                "traderHandle",
                "side",
                "stake",
                "entryMark"
              ],
              "additionalProperties": false
            }
          },
          "ticks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "tickAt": {
                  "type": "string"
                },
                "mark": {
                  "type": "number"
                }
              },
              "required": [
                "tickAt",
                "mark"
              ],
              "additionalProperties": false
            }
          },
          "oracle": {
            "type": "object",
            "properties": {
              "sources": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "endpoint": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "label",
                    "endpoint"
                  ],
                  "additionalProperties": false
                }
              },
              "mode": {
                "type": "string",
                "enum": [
                  "single",
                  "multi-source-median"
                ]
              },
              "uptime30d": {
                "type": "number"
              },
              "lastReadAt": {
                "type": "string",
                "nullable": true
              },
              "markOracleGap": {
                "type": "number"
              },
              "pauseState": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string"
                  },
                  "since": {
                    "type": "string"
                  },
                  "autoCloseAt": {
                    "type": "string"
                  }
                },
                "required": [
                  "reason",
                  "since",
                  "autoCloseAt"
                ],
                "additionalProperties": false,
                "nullable": true
              }
            },
            "required": [
              "sources",
              "mode",
              "uptime30d",
              "lastReadAt",
              "markOracleGap",
              "pauseState"
            ],
            "additionalProperties": false
          },
          "resolutionHistory": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "periodId": {
                  "type": "string"
                },
                "resolvedAt": {
                  "type": "string"
                },
                "resolutionValue": {
                  "type": "number"
                },
                "transformation": {
                  "type": "string",
                  "enum": [
                    "scalar"
                  ]
                }
              },
              "required": [
                "periodId",
                "resolvedAt",
                "resolutionValue",
                "transformation"
              ],
              "additionalProperties": false
            }
          },
          "measure": {
            "type": "string"
          },
          "unitLong": {
            "type": "string"
          },
          "directionCopy": {
            "type": "object",
            "properties": {
              "up": {
                "type": "string"
              },
              "down": {
                "type": "string"
              }
            },
            "required": [
              "up",
              "down"
            ],
            "additionalProperties": false
          },
          "feeSummary": {
            "type": "object",
            "properties": {
              "roundIndex": {
                "type": "integer"
              },
              "traderFeeTotal": {
                "type": "number"
              },
              "platformTotal": {
                "type": "number"
              },
              "lpTotal": {
                "type": "number"
              },
              "follyTotal": {
                "type": "number"
              }
            },
            "required": [
              "roundIndex",
              "traderFeeTotal",
              "platformTotal",
              "lpTotal",
              "follyTotal"
            ],
            "additionalProperties": false,
            "nullable": true
          }
        },
        "required": [
          "slug",
          "title",
          "blurb",
          "cadence",
          "cadenceTone",
          "sparkline",
          "mark",
          "markDelta24h",
          "live",
          "unit",
          "category",
          "popular",
          "volatility",
          "framing",
          "description",
          "proposer",
          "launchPool",
          "foundingFools",
          "round",
          "calls",
          "ticks",
          "oracle",
          "resolutionHistory",
          "measure",
          "unitLong",
          "directionCopy",
          "feeSummary"
        ],
        "additionalProperties": false
      },
      "MarkSnapshot": {
        "type": "object",
        "properties": {
          "mark": {
            "type": "number"
          },
          "capturedAt": {
            "type": "string"
          }
        },
        "required": [
          "mark",
          "capturedAt"
        ],
        "additionalProperties": false
      },
      "TickRead": {
        "type": "object",
        "properties": {
          "ticks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "tickAt": {
                  "type": "string"
                },
                "mark": {
                  "type": "number"
                }
              },
              "required": [
                "tickAt",
                "mark"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "ticks"
        ],
        "additionalProperties": false
      },
      "ProposeMetricInput": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 3,
            "maxLength": 48
          },
          "blurb": {
            "type": "string",
            "minLength": 3,
            "maxLength": 80
          },
          "description": {
            "type": "string",
            "maxLength": 400
          },
          "cadenceTone": {
            "type": "string",
            "enum": [
              "hourly",
              "daily",
              "weekly",
              "meta"
            ]
          },
          "firstResolveAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}"
              }
            ]
          },
          "seed": {
            "type": "number",
            "exclusiveMinimum": true,
            "minimum": 0
          },
          "hardCap": {
            "type": "number",
            "exclusiveMinimum": true,
            "minimum": 0,
            "nullable": true
          },
          "sourceId": {
            "type": "string",
            "minLength": 1
          },
          "transformation": {
            "type": "string",
            "enum": [
              "rolling-window-delta",
              "rolling-average",
              "raw-scalar"
            ]
          }
        },
        "required": [
          "title",
          "blurb",
          "cadenceTone",
          "firstResolveAt",
          "seed",
          "sourceId",
          "transformation"
        ],
        "additionalProperties": false
      },
      "ProposeReceipt": {
        "type": "object",
        "properties": {
          "metricId": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "pledging",
              "live"
            ]
          },
          "proposerWallet": {
            "type": "string"
          },
          "launchPoolSize": {
            "type": "number"
          },
          "createdAt": {
            "type": "string"
          }
        },
        "required": [
          "metricId",
          "slug",
          "title",
          "status",
          "proposerWallet",
          "launchPoolSize",
          "createdAt"
        ],
        "additionalProperties": false
      },
      "ContributeInput": {
        "type": "object",
        "properties": {
          "metricId": {
            "type": "string",
            "minLength": 1
          },
          "amount": {
            "type": "number",
            "exclusiveMinimum": true,
            "minimum": 0
          }
        },
        "required": [
          "metricId",
          "amount"
        ],
        "additionalProperties": false
      },
      "ContributeReceipt": {
        "type": "object",
        "properties": {
          "contributionId": {
            "type": "string"
          },
          "metricId": {
            "type": "string"
          },
          "foolWallet": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "contributedAt": {
            "type": "string"
          },
          "filledAfter": {
            "type": "number"
          },
          "foolTotalAfter": {
            "type": "number"
          },
          "foolStakeAfterBps": {
            "type": "number"
          },
          "perFoolCapApplied": {
            "type": "number"
          },
          "whaleWindowActive": {
            "type": "boolean"
          }
        },
        "required": [
          "contributionId",
          "metricId",
          "foolWallet",
          "amount",
          "contributedAt",
          "filledAfter",
          "foolTotalAfter",
          "foolStakeAfterBps",
          "perFoolCapApplied",
          "whaleWindowActive"
        ],
        "additionalProperties": false
      },
      "LaunchPoolState": {
        "type": "object",
        "properties": {
          "metricId": {
            "type": "string"
          },
          "target": {
            "type": "number"
          },
          "filled": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pledging",
              "live",
              "disbanded",
              "archived"
            ]
          },
          "whaleWindow": {
            "type": "object",
            "properties": {
              "active": {
                "type": "boolean"
              },
              "endsAt": {
                "type": "string",
                "nullable": true
              },
              "divisor": {
                "type": "number"
              }
            },
            "required": [
              "active",
              "endsAt",
              "divisor"
            ],
            "additionalProperties": false
          },
          "perFoolCap": {
            "type": "number"
          },
          "contributions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "foolWallet": {
                  "type": "string"
                },
                "amount": {
                  "type": "number"
                },
                "contributedAt": {
                  "type": "string"
                }
              },
              "required": [
                "foolWallet",
                "amount",
                "contributedAt"
              ],
              "additionalProperties": false
            }
          },
          "byFool": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "foolWallet": {
                  "type": "string"
                },
                "total": {
                  "type": "number"
                },
                "stakeBps": {
                  "type": "number"
                }
              },
              "required": [
                "foolWallet",
                "total",
                "stakeBps"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "metricId",
          "target",
          "filled",
          "status",
          "whaleWindow",
          "perFoolCap",
          "contributions",
          "byFool"
        ],
        "additionalProperties": false
      },
      "MyCall": {
        "type": "object",
        "properties": {
          "callId": {
            "type": "string"
          },
          "metricSlug": {
            "type": "string"
          },
          "metricTitle": {
            "type": "string"
          },
          "metricStatus": {
            "type": "string",
            "enum": [
              "proposed",
              "pledging",
              "live",
              "paused",
              "resolved"
            ]
          },
          "side": {
            "type": "string",
            "enum": [
              "up",
              "down"
            ]
          },
          "stake": {
            "type": "number"
          },
          "leverage": {
            "type": "number"
          },
          "entryMark": {
            "type": "number"
          },
          "openedAt": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "closed",
              "liquidated",
              "settled"
            ],
            "nullable": true
          },
          "pnl": {
            "type": "number",
            "nullable": true
          },
          "closedAt": {
            "type": "string",
            "nullable": true
          },
          "resolutionValue": {
            "type": "number",
            "nullable": true
          },
          "fundingPaid": {
            "type": "number"
          }
        },
        "required": [
          "callId",
          "metricSlug",
          "metricTitle",
          "metricStatus",
          "side",
          "stake",
          "leverage",
          "entryMark",
          "openedAt",
          "status",
          "pnl",
          "closedAt",
          "resolutionValue",
          "fundingPaid"
        ],
        "additionalProperties": false
      },
      "BackedMetric": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "blurb": {
            "type": "string"
          },
          "cadence": {
            "type": "string"
          },
          "cadenceTone": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "proposed",
              "pledging",
              "live",
              "paused",
              "resolved"
            ]
          },
          "launchPoolSize": {
            "type": "number"
          },
          "stakeWeightBps": {
            "type": "integer"
          },
          "rank": {
            "type": "integer"
          }
        },
        "required": [
          "slug",
          "title",
          "blurb",
          "cadence",
          "cadenceTone",
          "status",
          "launchPoolSize",
          "stakeWeightBps",
          "rank"
        ],
        "additionalProperties": false
      },
      "MetricLite": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "blurb": {
            "type": "string"
          },
          "cadence": {
            "type": "string"
          },
          "cadenceTone": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "proposed",
              "pledging",
              "live",
              "paused",
              "resolved"
            ]
          },
          "launchPoolSize": {
            "type": "number"
          }
        },
        "required": [
          "slug",
          "title",
          "blurb",
          "cadence",
          "cadenceTone",
          "status",
          "launchPoolSize"
        ],
        "additionalProperties": false
      },
      "Profile": {
        "type": "object",
        "properties": {
          "wallet": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "avatarUrl": {
            "type": "string",
            "nullable": true
          },
          "bio": {
            "type": "string",
            "nullable": true
          },
          "createdAt": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          }
        },
        "required": [
          "wallet",
          "handle",
          "displayName",
          "avatarUrl",
          "bio",
          "createdAt",
          "updatedAt"
        ],
        "additionalProperties": false
      },
      "PublicProfile": {
        "type": "object",
        "properties": {
          "wallet": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "avatarUrl": {
            "type": "string",
            "nullable": true
          },
          "bio": {
            "type": "string",
            "nullable": true
          },
          "createdAt": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          },
          "metricsProposed": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "wallet",
          "handle",
          "displayName",
          "avatarUrl",
          "bio",
          "createdAt",
          "updatedAt",
          "metricsProposed"
        ],
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "privyBearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Privy session token. Required for /api/human/* writes."
      },
      "pincerpayX402": {
        "type": "apiKey",
        "in": "header",
        "name": "X-PAYMENT",
        "description": "x402 payment over PincerPay. The /api/agent/* routes answer the first request with HTTP 402; @pincerpay/agent signs a USDC payment (Solana or Polygon per D-103) and retries with the X-PAYMENT header. The per-request price is the operation's x-price-usd value."
      }
    }
  }
}