{
  "manifest_version": "1.0.0",
  "template": {
    "id": "daa33751-12d1-4fbc-9fda-11331c8e1d25",
    "slug": "pipecat",
    "name": "Pipecat",
    "description": "Browser voice AI with OpenAI, Gemini, Grok, OpenRouter, or Ollama.",
    "url": "https://railway.com/deploy/pipecat",
    "upstream": {
      "repo_url": "https://github.com/RockinPaul/pipecat-railway-template"
    }
  },
  "services": [
    {
      "name": "pipecat",
      "source": {
        "repo": "https://github.com/RockinPaul/pipecat-railway-template"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "pipecat",
      "description": "HTTP and healthcheck port. Keep it aligned with the public domain target port.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "BOT_VOICE",
      "service": "pipecat",
      "description": "Voice for OpenAI Realtime or OpenAI text-to-speech only.",
      "secret": false,
      "strategy": "default",
      "default": "alloy"
    },
    {
      "key": "GROK_MODEL",
      "service": "pipecat",
      "description": "xAI Voice Agent model for AI_PROVIDER=grok.",
      "secret": false,
      "strategy": "default",
      "default": "grok-voice-latest"
    },
    {
      "key": "GROK_VOICE",
      "service": "pipecat",
      "description": "A supported xAI Voice Agent voice.",
      "secret": false,
      "strategy": "default",
      "default": "eve"
    },
    {
      "key": "AI_PROVIDER",
      "service": "pipecat",
      "description": "Choose openai, gemini, grok, openrouter, or ollama. Supply only the keys required by your choice.",
      "secret": false,
      "strategy": "default",
      "default": "openai"
    },
    {
      "key": "GEMINI_MODEL",
      "service": "pipecat",
      "description": "Gemini Live audio model for AI_PROVIDER=gemini.",
      "secret": false,
      "strategy": "default",
      "default": "gemini-2.5-flash-native-audio-preview-12-2025"
    },
    {
      "key": "GEMINI_VOICE",
      "service": "pipecat",
      "description": "Gemini Live voice, independent of BOT_VOICE.",
      "secret": false,
      "strategy": "default",
      "default": "Charon"
    },
    {
      "key": "DAILY_API_KEY",
      "service": "pipecat",
      "description": "Required in every mode. Your Daily WebRTC API key; no whitespace.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ACCESS_PASSWORD",
      "service": "pipecat",
      "description": "Generated private access password. Copy it from service Variables to connect in the browser.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "OPENAI_STT_MODEL",
      "service": "pipecat",
      "description": "Speech recognition model when using OpenAI speech.",
      "secret": false,
      "strategy": "default",
      "default": "gpt-4o-mini-transcribe"
    },
    {
      "key": "OPENAI_TTS_MODEL",
      "service": "pipecat",
      "description": "Speech synthesis model when using OpenAI speech.",
      "secret": false,
      "strategy": "default",
      "default": "gpt-4o-mini-tts"
    },
    {
      "key": "OPENROUTER_MODEL",
      "service": "pipecat",
      "description": "OpenRouter text model in provider/model format.",
      "secret": false,
      "strategy": "default",
      "default": "google/gemini-2.5-flash-lite"
    },
    {
      "key": "MAX_SESSION_SECONDS",
      "service": "pipecat",
      "description": "Maximum conversation lifetime, from 30 to 1800 seconds. Providers bill separately.",
      "secret": false,
      "strategy": "default",
      "default": "600"
    },
    {
      "key": "OPENROUTER_STT_MODEL",
      "service": "pipecat",
      "description": "OpenRouter transcription model; must support its audio/transcriptions endpoint.",
      "secret": false,
      "strategy": "default",
      "default": "openai/whisper-large-v3-turbo"
    },
    {
      "key": "OPENROUTER_TTS_MODEL",
      "service": "pipecat",
      "description": "OpenRouter synthesis model that supports mono signed 16-bit PCM output.",
      "secret": false,
      "strategy": "default",
      "default": "hexgrad/kokoro-82m"
    },
    {
      "key": "OPENROUTER_TTS_VOICE",
      "service": "pipecat",
      "description": "Voice supported by the selected OpenRouter TTS model.",
      "secret": false,
      "strategy": "default",
      "default": "af_heart"
    },
    {
      "key": "OPENAI_REALTIME_MODEL",
      "service": "pipecat",
      "description": "OpenAI Realtime model for AI_PROVIDER=openai.",
      "secret": false,
      "strategy": "default",
      "default": "gpt-realtime-2.1-mini"
    },
    {
      "key": "OPENROUTER_TTS_SAMPLE_RATE",
      "service": "pipecat",
      "description": "Native sample rate of the returned PCM audio. Kokoro uses 24000. Must match the selected model.",
      "secret": false,
      "strategy": "default",
      "default": "24000"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "pipecat"
      }
    },
    "cli": "railway deploy --template pipecat",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "daa33751-12d1-4fbc-9fda-11331c8e1d25",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "c04d6f96-c87c-49f8-8641-cd2bda16d7cc": {
                  "icon": null,
                  "name": "pipecat",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 3
                  },
                  "source": {
                    "repo": "https://github.com/RockinPaul/pipecat-railway-template",
                    "rootDirectory": null
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP and healthcheck port. Keep it aligned with the public domain target port.",
                      "defaultValue": "8080"
                    },
                    "BOT_VOICE": {
                      "isOptional": false,
                      "description": "Voice for OpenAI Realtime or OpenAI text-to-speech only.",
                      "defaultValue": "alloy"
                    },
                    "BOT_PROMPT": {
                      "isOptional": true,
                      "description": "Optional assistant instructions. Empty uses a concise, helpful AI assistant. Never put credentials in the prompt.",
                      "defaultValue": ""
                    },
                    "GROK_MODEL": {
                      "isOptional": false,
                      "description": "xAI Voice Agent model for AI_PROVIDER=grok.",
                      "defaultValue": "grok-voice-latest"
                    },
                    "GROK_VOICE": {
                      "isOptional": false,
                      "description": "A supported xAI Voice Agent voice.",
                      "defaultValue": "eve"
                    },
                    "AI_PROVIDER": {
                      "isOptional": false,
                      "description": "Choose openai, gemini, grok, openrouter, or ollama. Supply only the keys required by your choice.",
                      "defaultValue": "openai"
                    },
                    "XAI_API_KEY": {
                      "isOptional": true,
                      "description": "Required for AI_PROVIDER=grok. Your xAI API key with Voice Agent access.",
                      "defaultValue": ""
                    },
                    "GEMINI_MODEL": {
                      "isOptional": false,
                      "description": "Gemini Live audio model for AI_PROVIDER=gemini.",
                      "defaultValue": "gemini-2.5-flash-native-audio-preview-12-2025"
                    },
                    "GEMINI_VOICE": {
                      "isOptional": false,
                      "description": "Gemini Live voice, independent of BOT_VOICE.",
                      "defaultValue": "Charon"
                    },
                    "OLLAMA_MODEL": {
                      "isOptional": true,
                      "description": "Required for ollama. Name of a model already installed on your Ollama server; the template does not download models.",
                      "defaultValue": ""
                    },
                    "DAILY_API_KEY": {
                      "isOptional": false,
                      "description": "Required in every mode. Your Daily WebRTC API key; no whitespace.",
                      "defaultValue": "{{DAILY_API_KEY}}"
                    },
                    "GOOGLE_API_KEY": {
                      "isOptional": true,
                      "description": "Required for AI_PROVIDER=gemini. Get a Gemini API key from Google AI Studio.",
                      "defaultValue": ""
                    },
                    "OLLAMA_API_KEY": {
                      "isOptional": true,
                      "description": "Optional API key for a protected Ollama endpoint. Do not embed it in OLLAMA_BASE_URL.",
                      "defaultValue": ""
                    },
                    "OPENAI_API_KEY": {
                      "isOptional": true,
                      "description": "Required for AI_PROVIDER=openai or when OpenAI handles speech. Leave empty otherwise.",
                      "defaultValue": ""
                    },
                    "ACCESS_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated private access password. Copy it from service Variables to connect in the browser.",
                      "defaultValue": "{{ACCESS_PASSWORD}}"
                    },
                    "OLLAMA_BASE_URL": {
                      "isOptional": true,
                      "description": "Required for ollama. A reachable HTTP(S) endpoint, such as http://ollama.railway.internal:11434/v1. Railway localhost is not your laptop.",
                      "defaultValue": ""
                    },
                    "SPEECH_PROVIDER": {
                      "isOptional": true,
                      "description": "leave empty for automatic selection. For OpenRouter/Ollama only: openai or openrouter. Empty defaults to   OpenRouter speech for OpenRouter, and OpenAI speech for Ollama.",
                      "defaultValue": ""
                    },
                    "OPENAI_STT_MODEL": {
                      "isOptional": false,
                      "description": "Speech recognition model when using OpenAI speech.",
                      "defaultValue": "gpt-4o-mini-transcribe"
                    },
                    "OPENAI_TTS_MODEL": {
                      "isOptional": false,
                      "description": "Speech synthesis model when using OpenAI speech.",
                      "defaultValue": "gpt-4o-mini-tts"
                    },
                    "OPENROUTER_MODEL": {
                      "isOptional": false,
                      "description": "OpenRouter text model in provider/model format.",
                      "defaultValue": "google/gemini-2.5-flash-lite"
                    },
                    "OPENROUTER_API_KEY": {
                      "isOptional": true,
                      "description": "Required for AI_PROVIDER=openrouter or SPEECH_PROVIDER=openrouter. One key can cover text, recognition, and synthesis.",
                      "defaultValue": ""
                    },
                    "MAX_SESSION_SECONDS": {
                      "isOptional": false,
                      "description": "Maximum conversation lifetime, from 30 to 1800 seconds. Providers bill separately.",
                      "defaultValue": "600"
                    },
                    "OPENROUTER_STT_MODEL": {
                      "isOptional": false,
                      "description": "OpenRouter transcription model; must support its audio/transcriptions endpoint.",
                      "defaultValue": "openai/whisper-large-v3-turbo"
                    },
                    "OPENROUTER_TTS_MODEL": {
                      "isOptional": false,
                      "description": "OpenRouter synthesis model that supports mono signed 16-bit PCM output.",
                      "defaultValue": "hexgrad/kokoro-82m"
                    },
                    "OPENROUTER_TTS_VOICE": {
                      "isOptional": false,
                      "description": "Voice supported by the selected OpenRouter TTS model.",
                      "defaultValue": "af_heart"
                    },
                    "OPENAI_REALTIME_MODEL": {
                      "isOptional": false,
                      "description": "OpenAI Realtime model for AI_PROVIDER=openai.",
                      "defaultValue": "gpt-realtime-2.1-mini"
                    },
                    "OPENROUTER_TTS_SAMPLE_RATE": {
                      "isOptional": false,
                      "description": "Native sample rate of the returned PCM audio. Kokoro uses 24000. Must match the selected model.",
                      "defaultValue": "24000"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "pipecat",
      "method": "GET",
      "path": "/health",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 1,
    "needs_volume": false
  },
  "generated_at": "2026-09-08T18:46:46.960Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-09-08T18:05:37.341Z",
  "success_rate_30d": 0,
  "validation": {
    "last_run_id": "run_68a7b6a66d744da9a55e",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": false,
        "detail": "FAILED"
      }
    ]
  }
}
