Menu

Mattering Automations Railway integration

Connect Railway to Mattering Automations: projects, environments, services, deployments, logs, variables, domains, and volumes as workflow steps, authenticated with a Railway account or workspace API token.

The Mattering Automations Railway integration adds Railway to your automation canvas: list and create projects, manage environments and services, trigger deploys, redeploys, rollbacks, and restarts, read build, runtime, and HTTP logs, set and read environment variables, attach Railway and custom domains, and manage volumes and volume backups.

Railway's public API is a single GraphQL endpoint rather than a REST API, so each node in this integration is a named GraphQL operation with a fixed document behind it. You fill in ordinary canvas fields and the node builds the variables, so nothing here asks you to write GraphQL unless you choose the advanced custom request node.

Setup takes a few minutes: create an API token in Railway, attach it as a credential in Mattering, and run one read-only node to confirm it works. This guide walks through each step and ends with the full node reference.

Before you start

  • A Railway account with access to the projects, services, and environments you want to automate.
  • A Mattering workspace with access to the Automations app.
  • Permission to create an API token on your Railway account, or a workspace token for the workspace you want to automate.
  • An account token or a workspace token specifically. Railway project tokens are not supported by this integration: Railway expects those in a Project-Access-Token header rather than the Authorization Bearer header the connector sends, so a project token will fail authentication on every node.

Create a Railway API token

Mattering authenticates to Railway with an account or workspace API token, sent as an Authorization Bearer header. You create it from your Railway account settings, not from an individual project.

Sign in to Railway and open your account tokens page at railway.com/account/tokens, reachable from Account Settings > Tokens.
Click Create Token and give the token a name that says where it will be used, such as Mattering Automations.
Choose the scope. Leave the workspace selection empty for an account token, which can reach every resource your account can see across workspaces, or pick a workspace for a workspace token, which stays scoped to that one workspace.
Create the token and copy the value.
Do not use a Railway project token here. Project tokens authenticate with a different header, Project-Access-Token, so the connector cannot send them and every node will return an authentication error. Only account and workspace tokens work.
A workspace token is the safer default when an automation only ever touches one workspace, because a leaked token cannot reach projects outside it.

Connect Railway to Mattering

In Mattering Automations, open Connectors and click Add Connector.
Choose Railway from the list.
Click Create new credential, paste your Railway API token, and save.
The credential is stored encrypted in Google Secret Manager and never appears in workflow logs.
Click Connect. All 68 Railway nodes appear in your canvas palette, 28 read nodes and 40 action nodes.
This connector has no one-click Test Connection button, because Railway's API is a single GraphQL endpoint that accepts POST requests only. Verify with the read-only node below instead.

Verify it works

Open any automation canvas and check the palette: a Railway section should list the read and action nodes. Drop Railway: Get Current User onto the canvas and run a test step. It takes no arguments and is a safe, read-only query, so a successful response returns the id, name, and email of the account the token belongs to without touching any infrastructure.

To confirm the token can see your infrastructure, add Railway: List Projects and run it. A successful response lists the projects the token can reach. Railway returns this in the Relay connection shape, so the projects are under data.projects.edges with each project on a node key. Copy a project id from the result and feed it to Railway: Get Project to resolve the service ids and environment ids that most other nodes need.

Node reference

68 nodes, generated from the connector itself so this reference always matches what ships.

Read and query nodes 28

Railway: Check Custom Domain Availability

railway_check_custom_domain

Check whether a hostname can be attached to a Railway service before creating it.

Railway: Get Build Logs

railway_get_build_logs

Read the build-phase logs for a deployment. The first place to look when a deploy fails to build.

Railway: Get Current User

railway_get_me

Get the Railway account the API token belongs to (id, name, email). The cheapest auth/connectivity probe.

Railway: Get Custom Domain Status

railway_get_custom_domain

Poll a custom domain's DNS propagation and TLS certificate status.

Railway: Get Deployment

railway_get_deployment

Get one deployment's status, URLs, build metadata, and whether it can be redeployed or rolled back.

Railway: Get Deployment Logs

railway_get_deployment_logs

Read the runtime (application) logs for a deployment.

Railway: Get Deployment Variables

railway_get_deployment_variables

Read the fully rendered variable set a service deployment actually receives (shared + service variables, references resolved). WARNING: values are secrets.

Railway: Get Environment

railway_get_environment

Get one environment with each service instance in it and that instance's latest deployment status.

Railway: Get Environment Logs

railway_get_environment_logs

Read aggregated logs across every service in an environment, optionally filtered.

Railway: Get HTTP Logs

railway_get_http_logs

Read the edge HTTP request log for a deployment (method, path, status, duration, source IP).

Railway: Get Project

railway_get_project

Get one project with its services and environments. The usual way to resolve service ids and environment ids from a project id.

Railway: Get Service

railway_get_service

Get a service's project-level record (name, icon, owning project).

Railway: Get Service Instance

railway_get_service_instance

Get a service's per-environment settings (start/build command, region, replicas, restart policy) plus its latest deployment.

Railway: Get Service Resource Limits

railway_get_service_instance_limits

Get the CPU/memory limits configured for a service instance. Returns a JSON blob.

Railway: Get Staged Changes

railway_get_staged_changes

Read the staged (uncommitted) configuration changes on an environment. Returns a JSON blob.

Railway: Get Variables

railway_get_variables

Read environment variables as a flat name/value JSON object. Omit service_id for shared (environment-level) variables. WARNING: values are secrets. Do not log or forward the output.

Railway: Get Volume Instance

railway_get_volume_instance

Get a volume instance's mount path, current size, and state. The node to poll for disk-usage alerting.

Railway: Get Workspace

railway_get_workspace

Get one workspace with its members and their roles.

Railway: List Deployments

railway_list_deployments

List deployments for a project, optionally narrowed to one service/environment. Set first=1 with successful_only=true to get the current live deployment.

Railway: List Domains

railway_list_domains

List a service's Railway-provided domains and custom domains, including custom-domain DNS verification records.

Railway: List Environments

railway_list_environments

List a project's environments. Set is_ephemeral=false to exclude PR/preview environments.

Railway: List Project Members

railway_list_project_members

List the members of a project with their roles.

Railway: List Project Volumes

railway_list_project_volumes

List the persistent volumes attached to a project.

Railway: List Projects

railway_list_projects

List projects the token can see. Optionally scope to one workspace. Relay shape: results are under data.projects.edges[].node.

Railway: List TCP Proxies

railway_list_tcp_proxies

List the TCP proxies exposing a service instance (used for databases and other non-HTTP services).

Railway: List Volume Backup Schedules

railway_list_volume_backup_schedules

List the automatic backup schedules configured on a volume instance.

Railway: List Volume Backups

railway_list_volume_backups

List the backups taken of a volume instance.

Railway: List Workspaces

railway_list_workspaces

List the workspaces (personal + team) the token can access. Workspace ids scope Railway: List Projects and project creation.

Action nodes 40

Railway: Add Custom Domain

railway_create_custom_domain

Attach a custom domain to a service. Returns the DNS records that must be created before Railway will serve traffic.

Railway: Cancel Deployment

railway_cancel_deployment

Cancel a deployment that is still building or deploying.

Railway: Commit Staged Changes

railway_commit_staged_changes

Apply an environment's staged configuration changes, triggering redeploys where needed.

Railway: Connect Service to Repo

railway_connect_service_repo

Connect a service to a GitHub repo (or a Docker image) as its deploy source.

Railway: Create Environment

railway_create_environment

Create an environment in a project, optionally cloned from an existing environment.

Railway: Create Project

railway_create_project

Create a new Railway project.

Railway: Create Railway Domain

railway_create_service_domain

Generate a Railway-managed *.up.railway.app domain for a service instance.

Railway: Create Service

railway_create_service

Create a service in a project from a GitHub repo or a Docker image.

Railway: Create Volume

railway_create_volume

Create a persistent volume and mount it into a service.

Railway: Create Volume Backup

railway_create_volume_backup

Take an on-demand backup of a volume instance.

Railway: Custom GraphQL Request

railway_graphql_request

Send any GraphQL query or mutation to Railway's API with your own variables. Covers every operation not individually typed (introspect the schema at railway.com/graphiql).

Railway: Delete Custom Domain

railway_delete_custom_domain

Detach a custom domain from its service. Traffic to that hostname stops being served.

Railway: Delete Environment

railway_delete_environment

Delete an environment and every service instance, variable, and volume instance in it. Destructive.

Railway: Delete Project

railway_delete_project

Permanently delete a project and everything in it. Destructive and irreversible.

Railway: Delete Railway Domain

railway_delete_service_domain

Remove a Railway-managed service domain.

Railway: Delete Service

railway_delete_service

Delete a service from its project. Destructive and irreversible.

Railway: Delete Variable

railway_delete_variable

Delete a single environment variable.

Railway: Delete Volume

railway_delete_volume

Delete a volume and all data stored on it. Destructive and irreversible.

Railway: Delete Volume Backup

railway_delete_volume_backup

Delete a volume backup. Destructive and irreversible.

Railway: Deploy Service

railway_deploy_service

Trigger a new deployment of a service in an environment, optionally pinned to a specific commit SHA. Returns the new deployment id.

Railway: Disconnect Service Source

railway_disconnect_service_repo

Disconnect a service from its GitHub repo / image source.

Railway: Lock Volume Backup

railway_lock_volume_backup

Lock a backup so retention policy will not expire it.

Railway: Redeploy Deployment

railway_redeploy_deployment

Redeploy a specific past deployment by id.

Railway: Redeploy Service

railway_redeploy_service

Redeploy a service instance's current deployment (same code, fresh container).

Railway: Remove Deployment

railway_remove_deployment

Remove a deployment record and its resources. Destructive.

Railway: Rename Environment

railway_rename_environment

Rename an environment.

Railway: Rename Volume

railway_update_volume

Rename a volume.

Railway: Restart Deployment

railway_restart_deployment

Restart a running deployment's containers without rebuilding.

Railway: Restore Volume Backup

railway_restore_volume_backup

Restore a volume instance from one of its backups. Overwrites current volume data.

Railway: Rollback Deployment

railway_rollback_deployment

Roll the service back to this deployment. Use with Railway: List Deployments (successful_only) to pick the last known-good build.

Railway: Set Variable

railway_upsert_variable

Create or update a single environment variable. Omit service_id to set a shared environment variable. Triggers a redeploy unless skip_deploys is true.

Railway: Set Variables (Bulk)

railway_upsert_variables

Create or update many variables in one call from a flat JSON object. Set replace=true to make the supplied set authoritative (removes anything not listed).

Railway: Stop Deployment

railway_stop_deployment

Stop a running deployment. The service goes offline until it is redeployed.

Railway: Transfer Project

railway_transfer_project

Transfer a project to another workspace.

Railway: Trigger Environment Deploy

railway_trigger_environment_deploy

Fire an environment's deploy triggers. The API equivalent of pressing Deploy in the Railway dashboard.

Railway: Update Custom Domain

railway_update_custom_domain

Change the container port a custom domain routes to.

Railway: Update Project

railway_update_project

Update a project's name, description, visibility, or PR-deploy setting.

Railway: Update Service

railway_update_service

Rename a service or change its icon.

Railway: Update Service Settings

railway_update_service_instance

Update a service's per-environment settings: start/build command, root directory, healthcheck, region, replicas, restart policy, cron schedule, Dockerfile path.

Railway: Update Volume Mount Path

railway_update_volume_mount

Change the path a volume is mounted at inside the container. Triggers a redeploy of the attached service.

Using the integration

On the automation canvas

Railway nodes chain with every other node: a failed deployment can create an assigned task in Mattering Productivity, an AI step can summarize build logs before anyone reads them, and a rollback can run automatically between the two. Deploy, rollback, restart, and delete nodes act on live infrastructure, so put a condition or an approval step in front of the ones you would not want fired by accident.

From AI assistants over MCP

Every node speaks MCP, the open protocol for connecting AI assistants to tools. Claude, ChatGPT, and Matter can list projects, read logs, set variables, and trigger deploys through the same nodes your workflows use.

Resolving Railway ids

Almost every node takes a UUID rather than a name. [[Railway: List Workspaces]] gives you workspace ids, [[Railway: List Projects]] gives you project ids, and [[Railway: Get Project]] returns a project's services and environments in one call, which is the usual way to turn a project id into the service id and environment id a deploy or variable node needs.

Handling variables and secrets

[[Railway: Get Variables]] and [[Railway: Get Deployment Variables]] return real values, including database URLs and API keys in plain text. Use them only where a workflow genuinely needs the value, and do not forward their output into a logging, message, or notification node. When writing a value with [[Railway: Set Variable]], reference a stored credential rather than pasting the secret into the workflow itself.

Beyond the typed nodes

Each typed node also accepts an extra variables object that is merged into the GraphQL variables before sending, so input-object fields the node does not expose individually are still reachable. For anything the typed set does not cover at all, [[Railway: Custom GraphQL Request]] is the advanced option: run any Railway GraphQL operation with your own document and variables. Railway supports schema introspection, so you can look up the exact operation first.

Troubleshooting

Every node returns an authentication or not-authorized error
The most common cause is the wrong kind of token. Railway project tokens authenticate with a Project-Access-Token header and are not supported here; replace it with an account or workspace token from railway.com/account/tokens. If the token is the right type, it may have been revoked or rotated, so create a fresh one and update the credential on the connector.
A node failed but the response says HTTP 200
That is normal for GraphQL. Railway returns HTTP 200 and puts the problem in an errors array rather than in the status code. The connector reads that array and fails the step deliberately, so the real message is on the node output, not in the status code. Read the error text there before assuming the request never arrived.
A node with no obvious problem still returns not authorized
A workspace token can only see resources in its own workspace, so a project id from another workspace will be rejected as if it did not exist. Run Railway: List Workspaces and Railway: List Projects with the same credential to confirm what that token can actually reach, or swap to an account token.
A field is rejected as the wrong type
GraphQL is strictly typed, so a number field will not accept a quoted string and a boolean will not accept the text true. The connector converts values to the type each field declares and raises a clear node error when it cannot, which usually points at a templated value that arrived as text from an earlier step. Check the upstream expression rather than the Railway node.
List Projects returns edges and node instead of a plain list
Railway returns paginated collections in the Relay connection shape. Read projects from data.projects.edges with each item under a node key, and deployments from data.deployments.edges the same way. Loop over the edges rather than over the top-level object.
Requests start failing after a long loop over logs or deployments
Railway enforces per-plan API rate limits and returns rate-limit headers with each response; its public API reference has the current numbers for your plan. The connector does not back off on your behalf, so pace loops that call log or deployment nodes repeatedly, or narrow the query instead of polling it in a tight loop.
A setting you need is not a field on the node
Each typed node carries a fixed GraphQL document containing only the arguments Railway documents, because an undocumented argument fails validation and breaks the whole operation. Use the node's extra variables object to pass input-object fields it does not expose individually, and Railway: Custom GraphQL Request for anything that needs a different operation entirely.

Railway is a trademark of its respective owner. Mattering uses platform names to identify the services these integrations connect to; no endorsement or affiliation is implied.

Login Start Free