{
  "openapi": "3.1.0",
  "info": {
    "title": "Numetal launch router",
    "version": "0.1.0",
    "description": "Free. User signs. No broadcast."
  },
  "servers": [
    {
      "url": "https://launch.numetal.xyz"
    }
  ],
  "paths": {
    "/api/v1/list_pads": {
      "post": {
        "operationId": "list_pads",
        "summary": "List every pad in the matrix (wired + unproven) with chains and notes. Call this first.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {},
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/api/v1/list_networks": {
      "post": {
        "operationId": "list_networks",
        "summary": "Union of chain IDs the pads actually list. We do not invent networks.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {},
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/api/v1/get_capabilities": {
      "post": {
        "operationId": "get_capabilities",
        "summary": "Knobs, forbidden fields, chains, and status for one pad. Stock pairing is Pons only.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "pad": {
                    "type": "string",
                    "description": "Pad id from list_pads (clanker, bankr, poolsfun, …)"
                  }
                },
                "required": [
                  "pad"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/api/v1/draft_intent": {
      "post": {
        "operationId": "draft_intent",
        "summary": "Validate a LaunchIntent against the matrix. Returns warnings for ignored knobs; errors for unproven pads / forbidden stock pairs.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "intent": {
                    "type": "object",
                    "description": "LaunchIntent: name, symbol, chainId, pad, creator (0x). Optional knobs per get_capabilities. Never salt. Never RH_STOCK except pad=pons."
                  }
                },
                "required": [
                  "intent"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/api/v1/simulate_launch": {
      "post": {
        "operationId": "simulate_launch",
        "summary": "Build the pad-sign payload (same as get_sign_payload). Does not broadcast. No keys.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "intent": {
                    "type": "object",
                    "description": "LaunchIntent: name, symbol, chainId, pad, creator (0x). Optional knobs per get_capabilities. Never salt. Never RH_STOCK except pad=pons."
                  }
                },
                "required": [
                  "intent"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/api/v1/get_sign_payload": {
      "post": {
        "operationId": "get_sign_payload",
        "summary": "Pad-sign payload for the user's wallet. Clanker = SDK deploy config. Bankr = simulateOnly POST body. pools.fun = PartyFactory args with mined salt. Never a REST argument the agent posts with a hot key.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "intent": {
                    "type": "object",
                    "description": "LaunchIntent: name, symbol, chainId, pad, creator (0x). Optional knobs per get_capabilities. Never salt. Never RH_STOCK except pad=pons."
                  }
                },
                "required": [
                  "intent"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    }
  }
}