{
  "manifest_version": "1.0.0",
  "template": {
    "id": "67822704-c61a-4ab5-a00d-a060d20c99d3",
    "slug": "polymarket-bot-v2",
    "name": "Polymarket Bot Copy-Trading V2",
    "description": "Simple bot polymarket copy-trading (buy & sell) with auto cashout",
    "url": "https://railway.com/deploy/polymarket-bot-v2",
    "upstream": {
      "repo_url": "https://github.com/XavTo/Bot-Polymarket"
    }
  },
  "services": [
    {
      "name": "Polymarket Bot V2",
      "source": {
        "repo": "https://github.com/XavTo/Bot-Polymarket"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "DEBUG",
      "service": "Polymarket Bot V2",
      "description": "verbose logs",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DRY_RUN",
      "service": "Polymarket Bot V2",
      "description": "simulate orders without sending them",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "RPC_URL",
      "service": "Polymarket Bot V2",
      "description": "Polygon RPC endpoint",
      "secret": false,
      "strategy": "default",
      "default": "https://xxx"
    },
    {
      "key": "COPY_SIDE",
      "service": "Polymarket Bot V2",
      "description": "BUY | SELL | BOTH",
      "secret": false,
      "strategy": "default",
      "default": "BOTH"
    },
    {
      "key": "COPY_RATIO",
      "service": "Polymarket Bot V2",
      "description": "percent multiplier (0.1 = 10%)",
      "secret": false,
      "strategy": "default",
      "default": "0.1"
    },
    {
      "key": "AUTO_REDEEM",
      "service": "Polymarket Bot V2",
      "description": "auto cashout when a market resolves",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PRIVATE_KEY",
      "service": "Polymarket Bot V2",
      "description": "Magic EOA private key used to sign orders",
      "secret": true,
      "strategy": "default",
      "default": "0x..."
    },
    {
      "key": "RELAYER_URL",
      "service": "Polymarket Bot V2",
      "description": "Polymarket relayer endpoint",
      "secret": false,
      "strategy": "default",
      "default": "https://relayer-v2.polymarket.com"
    },
    {
      "key": "COPY_TRADERS",
      "service": "Polymarket Bot V2",
      "description": "comma-separated trader addresses to copy",
      "secret": false,
      "strategy": "default",
      "default": "0xabc...,0xdef..."
    },
    {
      "key": "COPY_STRATEGY",
      "service": "Polymarket Bot V2",
      "description": "PERCENT_USD | PERCENT_SHARES | FIXED_USD | FIXED_SHARES",
      "secret": false,
      "strategy": "default",
      "default": "PERCENT_USD"
    },
    {
      "key": "MAX_TRADE_USD",
      "service": "Polymarket Bot V2",
      "description": "maximum USD per trade",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MIN_TRADE_USD",
      "service": "Polymarket Bot V2",
      "description": "minimum USD per trade",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "SIGNATURE_TYPE",
      "service": "Polymarket Bot V2",
      "description": "1=Polymarket proxy (Magic), 0=EOA, 2=Gnosis Safe",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "BUILDER_API_KEY",
      "service": "Polymarket Bot V2",
      "description": "Builder API key from polymarket.com/settings?tab=builder",
      "secret": true,
      "strategy": "default",
      "default": "..."
    },
    {
      "key": "FIXED_TRADE_USD",
      "service": "Polymarket Bot V2",
      "description": "fixed USD per trade when COPY_STRATEGY=FIXED_USD",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "PROFILE_ADDRESS",
      "service": "Polymarket Bot V2",
      "description": "Polymarket profile/proxy address (visible in your account)",
      "secret": false,
      "strategy": "default",
      "default": "0x..."
    },
    {
      "key": "RELAYER_TX_TYPE",
      "service": "Polymarket Bot V2",
      "description": "PROXY (default) or SAFE",
      "secret": false,
      "strategy": "default",
      "default": "PROXY"
    },
    {
      "key": "BUILDER_API_SECRET",
      "service": "Polymarket Bot V2",
      "description": "Builder API secret",
      "secret": true,
      "strategy": "default",
      "default": "..."
    },
    {
      "key": "NPM_CONFIG_LOGLEVEL",
      "service": "Polymarket Bot V2",
      "description": "avoid fake railway crash at deploy",
      "secret": false,
      "strategy": "default",
      "default": "error"
    },
    {
      "key": "MAX_DAILY_VOLUME_USD",
      "service": "Polymarket Bot V2",
      "description": "daily USD cap for buys",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MAX_POSITION_SIZE_USD",
      "service": "Polymarket Bot V2",
      "description": "per-position USD cap for buys",
      "secret": false,
      "strategy": "default",
      "default": "20"
    },
    {
      "key": "RAILPACK_NODE_VERSION",
      "service": "Polymarket Bot V2",
      "description": "force Node 22 on Railway",
      "secret": false,
      "strategy": "default",
      "default": "22"
    },
    {
      "key": "BUILDER_API_PASSPHRASE",
      "service": "Polymarket Bot V2",
      "description": "Builder API passphrase",
      "secret": false,
      "strategy": "default",
      "default": "..."
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "polymarket-bot-v2"
      }
    },
    "cli": "railway deploy --template polymarket-bot-v2",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "67822704-c61a-4ab5-a00d-a060d20c99d3",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "ac87fe8d-192b-46cb-ad52-b2ca77840b72": {
                  "icon": "https://www.ingame.com/wp-content/uploads/2026/04/icon-blue.png",
                  "name": "Polymarket Bot V2",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "https://github.com/XavTo/Bot-Polymarket",
                    "rootDirectory": null
                  },
                  "variables": {
                    "DEBUG": {
                      "isOptional": false,
                      "description": "verbose logs",
                      "defaultValue": "true"
                    },
                    "DRY_RUN": {
                      "isOptional": false,
                      "description": "simulate orders without sending them",
                      "defaultValue": "true"
                    },
                    "RPC_URL": {
                      "isOptional": false,
                      "description": "Polygon RPC endpoint",
                      "defaultValue": "https://xxx"
                    },
                    "COPY_SIDE": {
                      "isOptional": false,
                      "description": "BUY | SELL | BOTH",
                      "defaultValue": "BOTH"
                    },
                    "COPY_RATIO": {
                      "isOptional": false,
                      "description": "percent multiplier (0.1 = 10%)",
                      "defaultValue": "0.1"
                    },
                    "AUTO_REDEEM": {
                      "isOptional": false,
                      "description": "auto cashout when a market resolves",
                      "defaultValue": "true"
                    },
                    "PRIVATE_KEY": {
                      "isOptional": false,
                      "description": "Magic EOA private key used to sign orders",
                      "defaultValue": "0x..."
                    },
                    "RELAYER_URL": {
                      "isOptional": false,
                      "description": "Polymarket relayer endpoint",
                      "defaultValue": "https://relayer-v2.polymarket.com"
                    },
                    "COPY_TRADERS": {
                      "isOptional": false,
                      "description": "comma-separated trader addresses to copy",
                      "defaultValue": "0xabc...,0xdef..."
                    },
                    "COPY_STRATEGY": {
                      "isOptional": false,
                      "description": "PERCENT_USD | PERCENT_SHARES | FIXED_USD | FIXED_SHARES",
                      "defaultValue": "PERCENT_USD"
                    },
                    "MAX_TRADE_USD": {
                      "isOptional": false,
                      "description": "maximum USD per trade",
                      "defaultValue": "10"
                    },
                    "MIN_TRADE_USD": {
                      "isOptional": false,
                      "description": "minimum USD per trade",
                      "defaultValue": "1"
                    },
                    "SIGNATURE_TYPE": {
                      "isOptional": false,
                      "description": "1=Polymarket proxy (Magic), 0=EOA, 2=Gnosis Safe",
                      "defaultValue": "1"
                    },
                    "BUILDER_API_KEY": {
                      "isOptional": false,
                      "description": "Builder API key from polymarket.com/settings?tab=builder",
                      "defaultValue": "..."
                    },
                    "FIXED_TRADE_USD": {
                      "isOptional": false,
                      "description": "fixed USD per trade when COPY_STRATEGY=FIXED_USD",
                      "defaultValue": "10"
                    },
                    "PROFILE_ADDRESS": {
                      "isOptional": false,
                      "description": "Polymarket profile/proxy address (visible in your account)",
                      "defaultValue": "0x..."
                    },
                    "RELAYER_TX_TYPE": {
                      "isOptional": false,
                      "description": "PROXY (default) or SAFE",
                      "defaultValue": "PROXY"
                    },
                    "BUILDER_API_SECRET": {
                      "isOptional": false,
                      "description": "Builder API secret",
                      "defaultValue": "..."
                    },
                    "NPM_CONFIG_LOGLEVEL": {
                      "isOptional": false,
                      "description": "avoid fake railway crash at deploy",
                      "defaultValue": "error"
                    },
                    "MAX_DAILY_VOLUME_USD": {
                      "isOptional": false,
                      "description": "daily USD cap for buys",
                      "defaultValue": "10"
                    },
                    "MAX_POSITION_SIZE_USD": {
                      "isOptional": false,
                      "description": "per-position USD cap for buys",
                      "defaultValue": "20"
                    },
                    "RAILPACK_NODE_VERSION": {
                      "isOptional": false,
                      "description": "force Node 22 on Railway",
                      "defaultValue": "22"
                    },
                    "BUILDER_API_PASSPHRASE": {
                      "isOptional": false,
                      "description": "Builder API passphrase",
                      "defaultValue": "..."
                    }
                  },
                  "volumeMounts": {
                    "ac87fe8d-192b-46cb-ad52-b2ca77840b72": {
                      "mountPath": "/data"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 1,
    "needs_volume": true
  },
  "generated_at": "2026-09-21T22:14:44.200Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-20T21:35:26.462Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_869cee7ce68a497598b0",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 100,
    "typical_build_seconds": 46,
    "typical_start_seconds": 5,
    "slowest_service": "Polymarket Bot V2"
  }
}
