Setup
Shared variables
In Railway → Project Settings → Shared Variables, add the third-party secrets you control. Internal service API keys are generated and cross-referenced by the template (for example s3-server PRESIGN_API_KEY via secret formula, then main-server reads that service variable). You should not manually invent matching keys for those.
Third-party keys (you provide)
FAL_KEY="replace_with_fal_key"
OPENROUTER_API_KEY="replace_with_openrouter_api_key"
SUNO_API_KEY="replace_with_suno_api-key"
YOUTUBE_CLIENT_ID="replace_with_client_id"
YOUTUBE_CLIENT_SECRET="replace_with_client_secret"Wire each service to ${{shared.NAME}} where the template expects it — including YOUTUBE_CLIENT_ID / YOUTUBE_CLIENT_SECRET for youtube-server. Fal keys: create at https://fal.ai/dashboard/keys with ADMIN scope if you want sidebar balances (API scope hides balances).
Internal keys (template / Railway)
- Service secrets use Railway formulas such as ${{secret(32)}} so each deploy gets unique values.
- Consumers reference the producing service (e.g. main-server S3_SERVER_API_KEY → s3-server.PRESIGN_API_KEY).
- You normally leave these alone unless you are debugging a mis-wired reference.
Email (pick one)
Add EMAIL_SERVER plus the Resend or ZeptoMail keys to Shared Variables. See the Deploy guide and Email sender pages for signup links and plan notes.
Resend variables
EMAIL_SERVER="resend"
RESEND_API_KEY="replace_with_resend_api_key"
RESEND_FROM_EMAIL="replace_with_resend_from_email"ZeptoMail variables
EMAIL_SERVER="zeptomail"
ZEPTOMAIL_TOKEN="replace_with_zeptomail_token"
ZEPTOMAIL_FROM_EMAIL="replace_with_zeptomail_from_email"
ZEPTOMAIL_FROM_NAME="replace_with_zeptomail_from_name"