Learn-skills.dev railway-api
Railway.com GraphQL API automation for projects, services, deployments, and environment variables. Use when automating Railway operations, querying project data, managing deployments, setting variables via API, or integrating Railway into workflows.
git clone https://github.com/NeverSight/learn-skills.dev
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/adaptationio/skrillz/railway-api" ~/.claude/skills/neversight-learn-skills-dev-railway-api && rm -rf "$T"
data/skills-md/adaptationio/skrillz/railway-api/SKILL.mdRailway API
Comprehensive reference for Railway.com GraphQL API v2 automation including authentication, queries, mutations, and workflow automation.
Overview
The Railway GraphQL API enables programmatic access to all Railway platform features:
- Project and service management
- Environment variable configuration
- Deployment triggering and monitoring
- Team and resource management
- Usage and billing queries
API Endpoint:
https://backboard.railway.com/graphql/v2
Quick Start
1. Authentication Setup
Railway supports three token types with different scopes:
| Token Type | Header | Scope | Use Case |
|---|---|---|---|
| Account | | All user resources | Personal automation |
| Team | | Team-specific resources | Team workflows |
| Project | | Single project only | CI/CD, project automation |
Get tokens: Use the railway-auth skill or Railway dashboard → Account Settings → Tokens
2. Basic Query Example
curl https://backboard.railway.com/graphql/v2 \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{"query": "query { me { name email } }"}'
3. Basic Mutation Example
curl https://backboard.railway.com/graphql/v2 \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{ "query": "mutation($input: VariableUpsertInput!) { variableUpsert(input: $input) }", "variables": { "input": { "projectId": "project-id", "environmentId": "env-id", "name": "API_KEY", "value": "secret-value" } } }'
Common Operations
User & Account Information
query { me { id name email avatar isAdmin } }
List Projects
query { projects { edges { node { id name description createdAt updatedAt } } } }
Get Project Details with Services
query GetProject($projectId: String!) { project(id: $projectId) { id name description services { edges { node { id name serviceInstances { edges { node { id environmentId serviceId } } } } } } environments { edges { node { id name } } } } }
Get Environment Variables
query GetVariables($projectId: String!, $environmentId: String!) { variables(projectId: $projectId, environmentId: $environmentId) { edges { node { name value } } } }
Set/Update Variable
mutation SetVariable($input: VariableUpsertInput!) { variableUpsert(input: $input) } # Variables: { "input": { "projectId": "your-project-id", "environmentId": "your-env-id", "name": "DATABASE_URL", "value": "postgresql://..." } }
Trigger Deployment
mutation TriggerDeployment($serviceId: String!, $environmentId: String!) { deploymentTrigger(serviceId: $serviceId, environmentId: $environmentId) { id status createdAt } }
Architecture
Progressive Disclosure Structure
- SKILL.md (this file): Quick reference and common operations
- references/: Detailed documentation
- Complete API endpoint documentationgraphql-endpoint.md
- Comprehensive authentication guideauthentication.md
- 15+ query examples with responsescommon-queries.md
- 15+ mutation examples with patternscommon-mutations.md
- scripts/: Automation tools
- Python script for querying Railway APIquery-project.py
- TypeScript script for variable managementset-variables.ts
Error Handling
Railway API returns errors in this format:
{ "errors": [ { "message": "Error message", "extensions": { "code": "ERROR_CODE" } } ] }
Common errors:
- Invalid or expired tokenUNAUTHORIZED
- Insufficient permissions for resourceFORBIDDEN
- Resource doesn't existNOT_FOUND
- Invalid input dataVALIDATION_ERROR
Best practices:
- Always check for
field in responseerrors - Use appropriate token type for operation scope
- Handle rate limiting (429 responses)
- Validate input before mutations
- Use variables for parameterized queries
Integration Patterns
CI/CD Pipeline
# Get project token from railway-auth # Set deployment variables # Trigger deployment # Monitor deployment status
See
scripts/ for complete automation examples.
Infrastructure as Code
// Define Railway resources in code // Apply changes via GraphQL mutations // Track state and changes
Monitoring & Alerts
# Query deployment status # Check resource usage # Alert on failures
Cross-References
- railway-auth: Token generation and management
- railway-deployment: High-level deployment workflows
- railway-troubleshooting: API error debugging
Learning Path
- Start: Read
for endpoint detailsreferences/graphql-endpoint.md - Authentication: Study
for token setupreferences/authentication.md - Queries: Explore
for data retrievalreferences/common-queries.md - Mutations: Review
for operationsreferences/common-mutations.md - Automation: Use scripts in
for workflow examplesscripts/ - Advanced: Combine patterns for complex automation
Quick Reference
Essential Queries
- Get user info:
query { me { name email } } - List projects:
query { projects { edges { node { id name } } } } - Get variables: Use
query with projectId and environmentIdvariables - Deployment status: Query
with filtersdeployments
Essential Mutations
- Set variable:
mutationvariableUpsert - Trigger deploy:
mutationdeploymentTrigger - Create service:
mutationserviceCreate - Delete variable:
mutationvariableDelete
Rate Limits
- Account tokens: 100 requests/minute
- Team tokens: 500 requests/minute
- Project tokens: 1000 requests/minute
Notes
- All timestamps are in ISO 8601 format (UTC)
- IDs are opaque strings, don't parse or construct them
- Pagination uses cursor-based edges/nodes pattern
- Use GraphQL variables for all dynamic values
- Production mutations should use Project tokens for security
Known API Limitations
Some GraphQL queries return "Problem processing request" even with valid tokens. This is a Railway API limitation, not a token issue.
Affected queries:
deployment(id:), deploymentLogs, buildLogs, me.teams, teams
Workaround: Use Railway CLI for these operations:
railway list --json # Projects/teams railway logs # Deployment/build logs
See api-limitations.md for full details.
References
- common-queries.md - 31 query examples
- common-mutations.md - 37 mutation examples
- api-limitations.md - Known limitations and workarounds
- authentication.md - Token types and headers
- graphql-endpoint.md - Endpoint details
Resources
- Railway API Documentation: https://docs.railway.com/reference/public-api
- GraphQL Explorer: https://backboard.railway.com/graphql/v2 (with GraphiQL)
- Token Management: Use railway-auth skill