{
  "manifest_version": "1.0.0",
  "template": {
    "id": "82d51d38-354c-4e09-b39e-c310311cabc9",
    "slug": "starter-stopper-1",
    "name": "Starter Stopper",
    "description": "Start and Stop services on a schedule",
    "url": "https://railway.com/deploy/starter-stopper-1"
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "Stop",
      "source": {
        "image": "ghcr.io/railwayapp/function-bun:1.4.0"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Start",
      "source": {
        "image": "ghcr.io/railwayapp/function-bun:1.4.0"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "TARGET_SERVICE_ID",
      "service": "Stop",
      "description": "Ref to the service to stop",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "RAILWAY_PROJECT_TOKEN",
      "service": "Stop",
      "description": "Railway token for the project you run this on",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "TARGET_ENVIRONMENT_ID",
      "service": "Stop",
      "description": "Ref to the service's environment ID",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "TARGET_SERVICE_ID",
      "service": "Start",
      "description": "Ref to the service to stop",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "RAILWAY_PROJECT_TOKEN",
      "service": "Start",
      "description": "Railway token for the project you run this on",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "TARGET_ENVIRONMENT_ID",
      "service": "Start",
      "description": "Ref to the service's environment ID",
      "secret": false,
      "strategy": "ask_user"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "starter-stopper-1"
      }
    },
    "cli": "railway deploy --template starter-stopper-1",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "82d51d38-354c-4e09-b39e-c310311cabc9",
            "serializedConfig": {
              "services": {
                "5245682f-516d-49c1-8a12-7a180a931f4c": {
                  "icon": "https://api.iconify.design/lucide/power-off.svg?color=white",
                  "name": "Stop",
                  "deploy": {
                    "cronSchedule": "0 21 * * *",
                    "startCommand": "./run.sh Ly8gUmFpbHdheSBGdW5jdGlvbjogc3RvcCBhbiBleGlzdGluZyBzZXJ2aWNlLCB0aGVuIGV4aXQuIE5vIGJ1aWxkIG9yIGRlcGVuZGVuY2llcy4KdHlwZSBEZXBsb3ltZW50ID0geyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgZGVwbG95bWVudFN0b3BwZWQ6IGJvb2xlYW4gfTsKCnRyeSB7CiAgY29uc3Qgc2VydmljZUlkID0gQnVuLmVudi5UQVJHRVRfU0VSVklDRV9JRDsKICBjb25zdCBlbnZpcm9ubWVudElkID0gQnVuLmVudi5UQVJHRVRfRU5WSVJPTk1FTlRfSUQ7CiAgY29uc3QgdG9rZW4gPSBCdW4uZW52LlJBSUxXQVlfUFJPSkVDVF9UT0tFTjsKICBmb3IgKGNvbnN0IGtleSBvZiBbIlRBUkdFVF9TRVJWSUNFX0lEIiwgIlRBUkdFVF9FTlZJUk9OTUVOVF9JRCIsICJSQUlMV0FZX1BST0pFQ1RfVE9LRU4iXSkgewogICAgaWYgKCFCdW4uZW52W2tleV0/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICR7a2V5fWApOwogIH0KICBjb25zdCB1dWlkID0gL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2k7CiAgaWYgKCF1dWlkLnRlc3Qoc2VydmljZUlkISkgfHwgIXV1aWQudGVzdChlbnZpcm9ubWVudElkISkpIHRocm93IG5ldyBFcnJvcigiVGFyZ2V0IHNlcnZpY2UvZW52aXJvbm1lbnQgSURzIG11c3QgYmUgVVVJRHMiKTsKICBpZiAoc2VydmljZUlkID09PSBCdW4uZW52LlJBSUxXQVlfU0VSVklDRV9JRCkgdGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiBjYW5ub3QgdGFyZ2V0IGl0c2VsZiIpOwoKICBhc3luYyBmdW5jdGlvbiByZXF1ZXN0PFQ+KHF1ZXJ5OiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8VD4gewogICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZTsKICAgIHRyeSB7CiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goImh0dHBzOi8vYmFja2JvYXJkLnJhaWx3YXkuY29tL2dyYXBocWwvdjIiLCB7CiAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgaGVhZGVyczogeyAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLCAiUHJvamVjdC1BY2Nlc3MtVG9rZW4iOiB0b2tlbiEgfSwKICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXMgfSksCiAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDMwXzAwMCksCiAgICAgIH0pOwogICAgfSBjYXRjaCB7IHRocm93IG5ldyBFcnJvcigiUmFpbHdheSBBUEkgcmVxdWVzdCBmYWlsZWQgb3IgdGltZWQgb3V0Iik7IH0KICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihgUmFpbHdheSBBUEkgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgIGxldCBib2R5OiB7IGRhdGE/OiBUOyBlcnJvcnM/OiB1bmtub3duW10gfTsKICAgIHRyeSB7IGJvZHkgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7IH0KICAgIGNhdGNoIHsgdGhyb3cgbmV3IEVycm9yKCJSYWlsd2F5IEFQSSByZXR1cm5lZCBpbnZhbGlkIEpTT04iKTsgfQogICAgLy8gRG8gbm90IGxvZyByYXcgcmVzcG9uc2VzOiB1cHN0cmVhbSBlcnJvcnMgY291bGQgY29udGFpbiBjcmVkZW50aWFscy4KICAgIGlmICghYm9keSB8fCBib2R5LmVycm9ycz8ubGVuZ3RoIHx8ICFib2R5LmRhdGEpIHRocm93IG5ldyBFcnJvcigiUmFpbHdheSBBUEkgcmVqZWN0ZWQgdGhlIG9wZXJhdGlvbiBvciByZXR1cm5lZCBubyBkYXRhIik7CiAgICByZXR1cm4gYm9keS5kYXRhOwogIH0KCiAgY29uc3QgeyBzZXJ2aWNlSW5zdGFuY2UgfSA9IGF3YWl0IHJlcXVlc3Q8eyBzZXJ2aWNlSW5zdGFuY2U6IHsKICAgIGFjdGl2ZURlcGxveW1lbnRzOiBEZXBsb3ltZW50W107IGxhdGVzdERlcGxveW1lbnQ6IERlcGxveW1lbnQgfCBudWxsOwogIH0gfT4oYHF1ZXJ5IFRhcmdldCgkc2VydmljZUlkOiBTdHJpbmchLCAkZW52aXJvbm1lbnRJZDogU3RyaW5nISkgewogICAgc2VydmljZUluc3RhbmNlKHNlcnZpY2VJZDogJHNlcnZpY2VJZCwgZW52aXJvbm1lbnRJZDogJGVudmlyb25tZW50SWQpIHsKICAgICAgYWN0aXZlRGVwbG95bWVudHMgeyBpZCBzdGF0dXMgZGVwbG95bWVudFN0b3BwZWQgfQogICAgICBsYXRlc3REZXBsb3ltZW50IHsgaWQgc3RhdHVzIGRlcGxveW1lbnRTdG9wcGVkIH0KICAgIH0KICB9YCwgeyBzZXJ2aWNlSWQ6IHNlcnZpY2VJZCEsIGVudmlyb25tZW50SWQ6IGVudmlyb25tZW50SWQhIH0pOwoKICBpZiAoc2VydmljZUluc3RhbmNlLmxhdGVzdERlcGxveW1lbnQgJiYgWyJRVUVVRUQiLCAiSU5JVElBTElaSU5HIiwgIkJVSUxESU5HIiwgIkRFUExPWUlORyIsICJXQUlUSU5HIl0uaW5jbHVkZXMoc2VydmljZUluc3RhbmNlLmxhdGVzdERlcGxveW1lbnQuc3RhdHVzKSkgewogICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3RvcCB3aGlsZSBhIGRlcGxveW1lbnQgaXMgaW4gcHJvZ3Jlc3M7IHJldHJ5IGFmdGVyIGl0IGZpbmlzaGVzIik7CiAgfQogIGNvbnN0IHJ1bm5pbmcgPSBzZXJ2aWNlSW5zdGFuY2UuYWN0aXZlRGVwbG95bWVudHMuZmlsdGVyKGRlcGxveW1lbnQgPT4gIWRlcGxveW1lbnQuZGVwbG95bWVudFN0b3BwZWQpOwogIGZvciAoY29uc3QgZGVwbG95bWVudCBvZiBydW5uaW5nKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0PHsgZGVwbG95bWVudFN0b3A6IGJvb2xlYW4gfT4oCiAgICAgIGBtdXRhdGlvbiBTdG9wKCRpZDogU3RyaW5nISkgeyBkZXBsb3ltZW50U3RvcChpZDogJGlkKSB9YCwgeyBpZDogZGVwbG95bWVudC5pZCB9LAogICAgKTsKICAgIGlmIChyZXN1bHQuZGVwbG95bWVudFN0b3AgIT09IHRydWUpIHRocm93IG5ldyBFcnJvcigiU3RvcCByZXF1ZXN0IHdhcyByZWplY3RlZCIpOwogIH0KICBjb25zb2xlLmxvZyhydW5uaW5nLmxlbmd0aCA/IGBTZXJ2aWNlIHN0b3AgcmVxdWVzdGVkIGZvciAke3J1bm5pbmcubGVuZ3RofSBkZXBsb3ltZW50KHMpYCA6ICJTZXJ2aWNlIGFscmVhZHkgc3RvcHBlZDsgbm90aGluZyB0byBzdG9wIik7Cn0gY2F0Y2ggKGVycm9yKSB7CiAgY29uc29sZS5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICJTdG9wIEZ1bmN0aW9uIGZhaWxlZCIpOwogIHByb2Nlc3MuZXhpdENvZGUgPSAxOwp9CgpleHBvcnQge307"
                  },
                  "source": {
                    "image": "ghcr.io/railwayapp/function-bun:1.4.0"
                  },
                  "variables": {
                    "TARGET_SERVICE_ID": {
                      "description": "Ref to the service to stop",
                      "defaultValue": "{{TARGET_SERVICE_ID}}"
                    },
                    "RAILWAY_PROJECT_TOKEN": {
                      "description": "Railway token for the project you run this on",
                      "defaultValue": "{{RAILWAY_PROJECT_TOKEN}}"
                    },
                    "TARGET_ENVIRONMENT_ID": {
                      "description": "Ref to the service's environment ID",
                      "defaultValue": "{{TARGET_ENVIRONMENT_ID}}"
                    }
                  }
                },
                "58038e19-d440-447b-b07d-597e496333b0": {
                  "icon": "https://api.iconify.design/lucide/power.svg?color=white",
                  "name": "Start",
                  "deploy": {
                    "cronSchedule": "0 6 * * *",
                    "startCommand": "./run.sh Ly8gUmFpbHdheSBGdW5jdGlvbjogc3RhcnQgYW4gZXhpc3Rpbmcgc2VydmljZSwgdGhlbiBleGl0LiBObyBidWlsZCBvciBkZXBlbmRlbmNpZXMuCnR5cGUgRGVwbG95bWVudCA9IHsgaWQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IGRlcGxveW1lbnRTdG9wcGVkOiBib29sZWFuIH07Cgp0cnkgewogIGNvbnN0IHNlcnZpY2VJZCA9IEJ1bi5lbnYuVEFSR0VUX1NFUlZJQ0VfSUQ7CiAgY29uc3QgZW52aXJvbm1lbnRJZCA9IEJ1bi5lbnYuVEFSR0VUX0VOVklST05NRU5UX0lEOwogIGNvbnN0IHRva2VuID0gQnVuLmVudi5SQUlMV0FZX1BST0pFQ1RfVE9LRU47CiAgZm9yIChjb25zdCBrZXkgb2YgWyJUQVJHRVRfU0VSVklDRV9JRCIsICJUQVJHRVRfRU5WSVJPTk1FTlRfSUQiLCAiUkFJTFdBWV9QUk9KRUNUX1RPS0VOIl0pIHsKICAgIGlmICghQnVuLmVudltrZXldPy50cmltKCkpIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAke2tleX1gKTsKICB9CiAgY29uc3QgdXVpZCA9IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC9pOwogIGlmICghdXVpZC50ZXN0KHNlcnZpY2VJZCEpIHx8ICF1dWlkLnRlc3QoZW52aXJvbm1lbnRJZCEpKSB0aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzZXJ2aWNlL2Vudmlyb25tZW50IElEcyBtdXN0IGJlIFVVSURzIik7CiAgaWYgKHNlcnZpY2VJZCA9PT0gQnVuLmVudi5SQUlMV0FZX1NFUlZJQ0VfSUQpIHRocm93IG5ldyBFcnJvcigiRnVuY3Rpb24gY2Fubm90IHRhcmdldCBpdHNlbGYiKTsKCiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdDxUPihxdWVyeTogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHsKICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7CiAgICB0cnkgewogICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKCJodHRwczovL2JhY2tib2FyZC5yYWlsd2F5LmNvbS9ncmFwaHFsL3YyIiwgewogICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgIGhlYWRlcnM6IHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiwgIlByb2plY3QtQWNjZXNzLVRva2VuIjogdG9rZW4hIH0sCiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBxdWVyeSwgdmFyaWFibGVzIH0pLAogICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgzMF8wMDApLAogICAgICB9KTsKICAgIH0gY2F0Y2ggeyB0aHJvdyBuZXcgRXJyb3IoIlJhaWx3YXkgQVBJIHJlcXVlc3QgZmFpbGVkIG9yIHRpbWVkIG91dCIpOyB9CiAgICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoYFJhaWx3YXkgQVBJIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7CiAgICBsZXQgYm9keTogeyBkYXRhPzogVDsgZXJyb3JzPzogdW5rbm93bltdIH07CiAgICB0cnkgeyBib2R5ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOyB9CiAgICBjYXRjaCB7IHRocm93IG5ldyBFcnJvcigiUmFpbHdheSBBUEkgcmV0dXJuZWQgaW52YWxpZCBKU09OIik7IH0KICAgIC8vIERvIG5vdCBsb2cgcmF3IHJlc3BvbnNlczogdXBzdHJlYW0gZXJyb3JzIGNvdWxkIGNvbnRhaW4gY3JlZGVudGlhbHMuCiAgICBpZiAoIWJvZHkgfHwgYm9keS5lcnJvcnM/Lmxlbmd0aCB8fCAhYm9keS5kYXRhKSB0aHJvdyBuZXcgRXJyb3IoIlJhaWx3YXkgQVBJIHJlamVjdGVkIHRoZSBvcGVyYXRpb24gb3IgcmV0dXJuZWQgbm8gZGF0YSIpOwogICAgcmV0dXJuIGJvZHkuZGF0YTsKICB9CgogIGNvbnN0IHZhcmlhYmxlcyA9IHsgc2VydmljZUlkOiBzZXJ2aWNlSWQhLCBlbnZpcm9ubWVudElkOiBlbnZpcm9ubWVudElkISB9OwogIGNvbnN0IHsgc2VydmljZUluc3RhbmNlIH0gPSBhd2FpdCByZXF1ZXN0PHsgc2VydmljZUluc3RhbmNlOiB7CiAgICBhY3RpdmVEZXBsb3ltZW50czogRGVwbG95bWVudFtdOyBsYXRlc3REZXBsb3ltZW50OiBEZXBsb3ltZW50IHwgbnVsbDsKICB9IH0+KGBxdWVyeSBUYXJnZXQoJHNlcnZpY2VJZDogU3RyaW5nISwgJGVudmlyb25tZW50SWQ6IFN0cmluZyEpIHsKICAgIHNlcnZpY2VJbnN0YW5jZShzZXJ2aWNlSWQ6ICRzZXJ2aWNlSWQsIGVudmlyb25tZW50SWQ6ICRlbnZpcm9ubWVudElkKSB7CiAgICAgIGFjdGl2ZURlcGxveW1lbnRzIHsgaWQgc3RhdHVzIGRlcGxveW1lbnRTdG9wcGVkIH0KICAgICAgbGF0ZXN0RGVwbG95bWVudCB7IGlkIHN0YXR1cyBkZXBsb3ltZW50U3RvcHBlZCB9CiAgICB9CiAgfWAsIHZhcmlhYmxlcyk7CgogIGlmIChzZXJ2aWNlSW5zdGFuY2UubGF0ZXN0RGVwbG95bWVudCAmJiBbIlFVRVVFRCIsICJJTklUSUFMSVpJTkciLCAiQlVJTERJTkciLCAiREVQTE9ZSU5HIiwgIldBSVRJTkciXS5pbmNsdWRlcyhzZXJ2aWNlSW5zdGFuY2UubGF0ZXN0RGVwbG95bWVudC5zdGF0dXMpKSB7CiAgICBjb25zb2xlLmxvZygiRGVwbG95bWVudCBhbHJlYWR5IGluIHByb2dyZXNzOyBub3RoaW5nIHRvIHN0YXJ0Iik7CiAgfSBlbHNlIGlmIChzZXJ2aWNlSW5zdGFuY2UuYWN0aXZlRGVwbG95bWVudHMuc29tZShkZXBsb3ltZW50ID0+ICFkZXBsb3ltZW50LmRlcGxveW1lbnRTdG9wcGVkKSkgewogICAgY29uc29sZS5sb2coIlNlcnZpY2UgYWxyZWFkeSBydW5uaW5nOyBub3RoaW5nIHRvIHN0YXJ0Iik7CiAgfSBlbHNlIHsKICAgIC8vIENyZWF0ZSBmcm9tIGN1cnJlbnQgc2VydmljZSBjb25maWd1cmF0aW9uLCBldmVuIGlmIHRoZSBvbGQgZGVwbG95bWVudCB3YXMgcmVtb3ZlZC4KICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3Q8eyBzZXJ2aWNlSW5zdGFuY2VEZXBsb3lWMjogc3RyaW5nIH0+KAogICAgICBgbXV0YXRpb24gU3RhcnQoJHNlcnZpY2VJZDogU3RyaW5nISwgJGVudmlyb25tZW50SWQ6IFN0cmluZyEpIHsKICAgICAgICBzZXJ2aWNlSW5zdGFuY2VEZXBsb3lWMihzZXJ2aWNlSWQ6ICRzZXJ2aWNlSWQsIGVudmlyb25tZW50SWQ6ICRlbnZpcm9ubWVudElkKQogICAgICB9YCwgdmFyaWFibGVzLAogICAgKTsKICAgIGlmICh0eXBlb2YgcmVzdWx0LnNlcnZpY2VJbnN0YW5jZURlcGxveVYyICE9PSAic3RyaW5nIiB8fCAhcmVzdWx0LnNlcnZpY2VJbnN0YW5jZURlcGxveVYyKSB0aHJvdyBuZXcgRXJyb3IoIlN0YXJ0IHJlcXVlc3Qgd2FzIHJlamVjdGVkIik7CiAgICBjb25zb2xlLmxvZygiU2VydmljZSBzdGFydCByZXF1ZXN0ZWQiKTsKICB9Cn0gY2F0Y2ggKGVycm9yKSB7CiAgY29uc29sZS5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICJTdGFydCBGdW5jdGlvbiBmYWlsZWQiKTsKICBwcm9jZXNzLmV4aXRDb2RlID0gMTsKfQoKZXhwb3J0IHt9Ow=="
                  },
                  "source": {
                    "image": "ghcr.io/railwayapp/function-bun:1.4.0"
                  },
                  "variables": {
                    "TARGET_SERVICE_ID": {
                      "isOptional": false,
                      "description": "Ref to the service to stop",
                      "defaultValue": "{{TARGET_SERVICE_ID}}"
                    },
                    "RAILWAY_PROJECT_TOKEN": {
                      "isOptional": false,
                      "description": "Railway token for the project you run this on",
                      "defaultValue": "{{RAILWAY_PROJECT_TOKEN}}"
                    },
                    "TARGET_ENVIRONMENT_ID": {
                      "isOptional": false,
                      "description": "Ref to the service's environment ID",
                      "defaultValue": "{{TARGET_ENVIRONMENT_ID}}"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 2,
    "needs_volume": false
  },
  "generated_at": "2026-10-08T22:14:43.517Z",
  "generator_version": "0.1.0"
}
