{
  "manifest_version": "1.0.0",
  "template": {
    "id": "2371ea0f-d2cf-49ee-901d-06d9ea31744a",
    "slug": "qDKd-1",
    "name": "status-express",
    "description": "A webhook that converts railway events into a readable discord message",
    "url": "https://railway.com/deploy/qDKd-1",
    "upstream": {
      "image": "ghcr.io/railwayapp/function-bun:1.2.2"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "Status Express",
      "source": {
        "image": "ghcr.io/railwayapp/function-bun:1.2.2"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "DISCORD_WEBHOOK_URL",
      "service": "Status Express",
      "description": "Provide a value for DISCORD_WEBHOOK_URL.",
      "secret": false,
      "strategy": "ask_user"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "qDKd-1"
      }
    },
    "cli": "railway deploy --template qDKd-1",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "2371ea0f-d2cf-49ee-901d-06d9ea31744a",
            "serializedConfig": {
              "services": {
                "97bda8f8-5a18-4e12-a051-4d0f752b3b23": {
                  "name": "Status Express",
                  "deploy": {
                    "startCommand": "./run.sh Ly8gaW5kZXgudHN4IChCdW4gcnVudGltZSkKLy8gaW5kZXgudHN4IChCdW4gdjEuMiBydW50aW1lKQppbXBvcnQgeyBIb25vIH0gZnJvbSAiaG9ub0A0IjsKaW1wb3J0IHsgY29ycyB9IGZyb20gImhvbm8vY29ycyI7CgppbnRlcmZhY2UgUmFpbHdheUV2ZW50IHsKICBpZD86IHN0cmluZzsKICB0eXBlOiBzdHJpbmc7CiAgdGltZXN0YW1wOiBzdHJpbmc7CiAgZW52aXJvbm1lbnQ6IHsKICAgIGlkOiBzdHJpbmc7CiAgICBuYW1lOiBzdHJpbmc7CiAgfTsKICBwcm9qZWN0OiB7CiAgICBpZDogc3RyaW5nOwogICAgbmFtZTogc3RyaW5nOwogICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7CiAgICBjcmVhdGVkQXQ/OiBzdHJpbmc7CiAgfTsKICBzdGF0dXM/OiBzdHJpbmc7CiAgZGVwbG95bWVudD86IHsKICAgIGlkOiBzdHJpbmc7CiAgICBtZXRhOiB7CiAgICAgIFtrZXk6IHN0cmluZ106IGFueTsgLy8gQ2hhbmdlZCB0byBhbnkgdG8gaGFuZGxlIG5lc3RlZCBvYmplY3RzCiAgICB9OwogICAgY3JlYXRvcj86IHsKICAgICAgaWQ6IHN0cmluZzsKICAgICAgbmFtZTogc3RyaW5nOwogICAgICBhdmF0YXI/OiBzdHJpbmc7CiAgICB9OwogIH07CiAgc2VydmljZT86IHsKICAgIGlkOiBzdHJpbmc7CiAgICBuYW1lOiBzdHJpbmc7CiAgfTsKICB1c2VyPzogewogICAgaWQ6IHN0cmluZzsKICAgIG5hbWU6IHN0cmluZzsKICAgIGVtYWlsOiBzdHJpbmc7CiAgfTsKfQoKY29uc3QgRElTQ09SRF9XRUJIT09LX1VSTCA9IGltcG9ydC5tZXRhLmVudi5ESVNDT1JEX1dFQkhPT0tfVVJMOwoKY29uc3QgYXBwID0gbmV3IEhvbm8oKTsKCmFwcC51c2UoIi8qIiwgY29ycygpKTsKYXBwLmdldCgiLyIsIChjKSA9PiBjLnRleHQoIkhlbGxvIHdvcmxkISIpKTsKYXBwLmdldCgiL2FwaS9oZWFsdGgiLCAoYykgPT4gYy5qc29uKHsgc3RhdHVzOiAib2siIH0pKTsKYXBwLnBvc3QoIi9yYWlsd2F5LXdlYmhvb2siLCBhc3luYyAoYykgPT4gewogIHRyeSB7CiAgICAvLyBQYXJzZSB0aGUgUmFpbHdheSBldmVudCBwYXlsb2FkCiAgICBjb25zdCBwYXlsb2FkID0gKGF3YWl0IGMucmVxLmpzb24oKSkgYXMgUmFpbHdheUV2ZW50OwoKICAgIGNvbnNvbGUubG9nKHBheWxvYWQpOwoKICAgIC8vIEdldCBlbW9qaSBiYXNlZCBvbiBldmVudCB0eXBlCiAgICBjb25zdCBnZXRFdmVudEVtb2ppID0gKHR5cGU6IHN0cmluZykgPT4gewogICAgICBzd2l0Y2ggKHR5cGUudG9VcHBlckNhc2UoKSkgewogICAgICAgIGNhc2UgIkRFUExPWSI6CiAgICAgICAgICByZXR1cm4gIvCfmoAiOwogICAgICAgIGNhc2UgIkJVSUxEIjoKICAgICAgICAgIHJldHVybiAi8J+UqCI7CiAgICAgICAgY2FzZSAiRVJST1IiOgogICAgICAgICAgcmV0dXJuICLwn5qoIjsKICAgICAgICBjYXNlICJXQVJOSU5HIjoKICAgICAgICAgIHJldHVybiAi4pqg77iPIjsKICAgICAgICBjYXNlICJJTkZPIjoKICAgICAgICAgIHJldHVybiAi4oS577iPIjsKICAgICAgICBjYXNlICJTVUNDRVNTIjoKICAgICAgICAgIHJldHVybiAi4pyFIjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuICLwn5qCIjsKICAgICAgfQogICAgfTsKCiAgICAvLyBHZXQgZW1vamkgYmFzZWQgb24gZGVwbG95bWVudCBzdGF0dXMKICAgIGNvbnN0IGdldFN0YXR1c0Vtb2ppID0gKHN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7CiAgICAgIGlmICghc3RhdHVzKSByZXR1cm4gIvCflIQiOyAvLyBSZXR1cm4gZGVmYXVsdCBlbW9qaSBpZiBzdGF0dXMgaXMgdW5kZWZpbmVkCgogICAgICBzd2l0Y2ggKHN0YXR1cy50b1VwcGVyQ2FzZSgpKSB7CiAgICAgICAgY2FzZSAiU1VDQ0VTUyI6CiAgICAgICAgY2FzZSAiQ09NUExFVEUiOgogICAgICAgIGNhc2UgIkNPTVBMRVRFRCI6CiAgICAgICAgICByZXR1cm4gIuKchSI7CiAgICAgICAgY2FzZSAiRkFJTEVEIjoKICAgICAgICBjYXNlICJGQUlMVVJFIjoKICAgICAgICAgIHJldHVybiAi8J+aqCI7CiAgICAgICAgY2FzZSAiU0xFRVBJTkciOgogICAgICAgICAgcmV0dXJuICLwn5i0IjsKICAgICAgICBjYXNlICJSRU1PVkVEIjoKICAgICAgICBjYXNlICJSRU1PVklORyI6CiAgICAgICAgICByZXR1cm4gIvCfl5HvuI8iOwogICAgICAgIGNhc2UgIkJVSUxESU5HIjoKICAgICAgICBjYXNlICJERVBMT1lJTkciOgogICAgICAgIGNhc2UgIklOX1BST0dSRVNTIjoKICAgICAgICAgIHJldHVybiAi4o+zIjsKICAgICAgICBjYXNlICJQRU5ESU5HIjoKICAgICAgICBjYXNlICJRVUVVRUQiOgogICAgICAgICAgcmV0dXJuICLij7HvuI8iOwogICAgICAgIGNhc2UgIkNBTkNFTExFRCI6CiAgICAgICAgY2FzZSAiQ0FOQ0VMRUQiOgogICAgICAgICAgcmV0dXJuICLwn5uRIjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuICLwn5SEIjsKICAgICAgfQogICAgfTsKCiAgICAvLyBGb3JtYXQgdGhlIG1lc3NhZ2UgYmFzZWQgb24gdGhlIGV2ZW50IHR5cGUgd2l0aCBlbW9qaXMKICAgIGNvbnN0IGV2ZW50RW1vamkgPSBnZXRFdmVudEVtb2ppKHBheWxvYWQudHlwZSk7CgogICAgLy8gR2V0IHN0YXR1cyAtIGNoZWNrIGJvdGggZGlyZWN0IHN0YXR1cyBmaWVsZCBhbmQgbWV0YS5zdGF0dXMKICAgIGNvbnN0IHN0YXR1cyA9IHBheWxvYWQuc3RhdHVzID8/IHVuZGVmaW5lZDsKICAgIGNvbnN0IHN0YXR1c0Vtb2ppID0gc3RhdHVzID8gZ2V0U3RhdHVzRW1vamkoc3RhdHVzKSA6ICIiOwoKICAgIC8vIENyZWF0ZSBhIHNpbXBsZSwgZGlnZXN0aWJsZSBtZXNzYWdlCiAgICBsZXQgbWVzc2FnZSA9IGAke2V2ZW50RW1vaml9ICoqJHtwYXlsb2FkLnByb2plY3QubmFtZX0qKmA7CgogICAgY29uc3QgZm9ybWF0UmFpbHdheVNlcnZpY2VMaW5rID0gKHByb2plY3RJZDogc3RyaW5nLCBzZXJ2aWNlSWQ6IHN0cmluZykgPT4gewogICAgICByZXR1cm4gYGh0dHBzOi8vcmFpbHdheS5hcHAvcHJvamVjdC8ke3Byb2plY3RJZH0vc2VydmljZS8ke3NlcnZpY2VJZH1gOwogICAgfTsKCiAgICAvLyBBZGQgc2VydmljZSBuYW1lIGlmIGF2YWlsYWJsZQogICAgaWYgKHBheWxvYWQuc2VydmljZSkgewogICAgICBjb25zdCBzZXJ2aWNlTGluayA9IGZvcm1hdFJhaWx3YXlTZXJ2aWNlTGluaygKICAgICAgICBwYXlsb2FkLnByb2plY3QuaWQsCiAgICAgICAgcGF5bG9hZC5zZXJ2aWNlLmlkCiAgICAgICk7CiAgICAgIG1lc3NhZ2UgKz0gYCAoJHtwYXlsb2FkLnNlcnZpY2UubmFtZX0pYDsKICAgIH0KCiAgICAvLyBBZGQgZW52aXJvbm1lbnQKICAgIG1lc3NhZ2UgKz0gYCBpbiAke3BheWxvYWQuZW52aXJvbm1lbnQubmFtZX1gOwoKICAgIC8vIEFkZCBzdGF0dXMgaWYgYXZhaWxhYmxlCiAgICBpZiAoc3RhdHVzKSB7CiAgICAgIG1lc3NhZ2UgKz0gYCAtICR7c3RhdHVzRW1vaml9ICoqJHtzdGF0dXN9KipgOwogICAgfQoKICAgIC8vIEFkZCB3aG8gdHJpZ2dlcmVkIGl0CiAgICBpZiAocGF5bG9hZC5kZXBsb3ltZW50Py5jcmVhdG9yKSB7CiAgICAgIG1lc3NhZ2UgKz0gYFxuVHJpZ2dlcmVkIGJ5ICR7cGF5bG9hZC5kZXBsb3ltZW50LmNyZWF0b3IubmFtZX1gOwogICAgfQoKICAgIC8vIEFkZCBjb21taXQgbWVzc2FnZSBpZiBhdmFpbGFibGUgLSBjaGVjayBpbiBkaWZmZXJlbnQgcGxhY2VzCiAgICBjb25zdCBjb21taXRNZXNzYWdlID0KICAgICAgcGF5bG9hZC5kZXBsb3ltZW50Py5tZXRhPy5tZXNzYWdlIHx8CiAgICAgIHBheWxvYWQuZGVwbG95bWVudD8ubWV0YT8uY29tbWl0Py5tZXNzYWdlIHx8CiAgICAgIHBheWxvYWQuZGVwbG95bWVudD8ubWV0YT8uY29tbWl0TWVzc2FnZTsKCiAgICBpZiAoY29tbWl0TWVzc2FnZSkgewogICAgICBtZXNzYWdlICs9IGBcbj4gJHtjb21taXRNZXNzYWdlfWA7CiAgICB9CgogICAgLy8gQWRkIGRlcGxveW1lbnQgSUQgYXMgYSByZWZlcmVuY2UKICAgIGlmIChwYXlsb2FkLmRlcGxveW1lbnQpIHsKICAgICAgbWVzc2FnZSArPSBgXG7wn5OmIElEOiAke3BheWxvYWQuZGVwbG95bWVudC5pZH1gOwogICAgfQoKICAgIGlmIChwYXlsb2FkLnNlcnZpY2UpIHsKICAgICAgY29uc3Qgc2VydmljZUxpbmsgPSBmb3JtYXRSYWlsd2F5U2VydmljZUxpbmsoCiAgICAgICAgcGF5bG9hZC5wcm9qZWN0LmlkLAogICAgICAgIHBheWxvYWQuc2VydmljZS5pZAogICAgICApOwogICAgICBtZXNzYWdlICs9IGBcbiBbU2VydmljZSBMaW5rXSg8JHtzZXJ2aWNlTGlua30+KWA7CiAgICB9CgogICAgLy8gQ2hlY2sgaWYgRGlzY29yZCB3ZWJob29rIFVSTCBpcyBjb25maWd1cmVkCiAgICBpZiAoIURJU0NPUkRfV0VCSE9PS19VUkwpIHsKICAgICAgY29uc29sZS5lcnJvcigiRGlzY29yZCB3ZWJob29rIFVSTCBub3QgY29uZmlndXJlZCIpOwogICAgICByZXR1cm4gYy50ZXh0KCJEaXNjb3JkIHdlYmhvb2sgVVJMIG5vdCBjb25maWd1cmVkIiwgNTAwKTsKICAgIH0KCiAgICAvLyBTZW5kIHRoZSBtZXNzYWdlIHRvIERpc2NvcmQgdXNpbmcgbmF0aXZlIGZldGNoIGluc3RlYWQgb2YgYXhpb3MKICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goRElTQ09SRF9XRUJIT09LX1VSTCwgewogICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgaGVhZGVyczogewogICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgIH0sCiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICBjb250ZW50OiBtZXNzYWdlLAogICAgICB9KSwKICAgIH0pOwoKICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3JkIEFQSSByZXNwb25kZWQgd2l0aCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApOwogICAgfQoKICAgIHJldHVybiBjLnRleHQoIkV2ZW50IHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkiLCAyMDApOwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICBjb25zb2xlLmVycm9yKCJFcnJvciBwcm9jZXNzaW5nIFJhaWx3YXkgd2ViaG9vazoiLCBlcnJvcik7CiAgICByZXR1cm4gYy50ZXh0KCJFcnJvciBwcm9jZXNzaW5nIHdlYmhvb2siLCA1MDApOwogIH0KfSk7CgpCdW4uc2VydmUoewogIHBvcnQ6IGltcG9ydC5tZXRhLmVudi5QT1JUID8/IDMwMDAsCiAgZmV0Y2g6IGFwcC5mZXRjaCwKfSk7Cg==",
                    "healthcheckPath": "/api/health"
                  },
                  "source": {
                    "image": "ghcr.io/railwayapp/function-bun:1.2.2"
                  },
                  "variables": {
                    "DISCORD_WEBHOOK_URL": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "{{DISCORD_WEBHOOK_URL}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "Status Express",
      "method": "GET",
      "path": "/api/health",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 1,
    "needs_volume": false
  },
  "generated_at": "2026-09-21T22:14:44.200Z",
  "generator_version": "0.1.0"
}
