Overview
Pipelines let you automate what happens in your account when specific events occur — for example, automatically skipping a review step when no manual edits were made, or notifying a Slack channel when a project is delivered. Instead of relying on someone to remember a manual step, a Pipeline reacts to the event itself and runs the action for you.
This guide covers everything from your first Pipeline through to Pipeline Secrets, including secrets that renew their own credentials automatically.
Audience and Prerequisites
Plans: Available wherever Pipelines and Pipeline Secrets are enabled.
Role & Permission: Requires Account Admin access. Settings > Automation Settings > Pipelines is restricted to Account Admins and applies to your whole account, not just one Org Unit (Organizational Unit — a division of your account that groups users, projects, and settings) or project.
Dependencies: To use an auto-refreshing secret, the external service must expose an authentication endpoint (for example, an OAuth — Open Authorization — token endpoint) that returns a fresh token given a client ID and/or client secret.
Table of Contents
What Are Pipelines?
A Pipeline connects a trigger (something that happens in wxrks, like a work unit — an individual file or content chunk inside a project — changing status) to one or more actions (things wxrks should do in response, like updating a workflow or sending an HTTP request). You define both the trigger and the actions in a small YAML (YAML Ain't Markup Language — a plain-text, indentation-based configuration format) block, and wxrks runs it automatically every time the trigger occurs.
With Pipelines you can, for example:
Automatically skip or advance a workflow step based on a condition, such as whether a segment was manually edited.
Change a project's status automatically when certain conditions are met.
Send a notification to Slack or call an external system over HTTP whenever something happens in a project.
Sync data — like a QuickBooks record ID — onto a User or Org Unit after an external system responds.
ℹ️ Note: Pipelines are a separate feature from Sous Chef Agents. Sous Chef Agents control how AI shapes the tone and style of a translation, while Pipelines automate workflow and process events — status changes, task routing, notifications. They don't depend on each other, but nothing stops a Pipeline from triggering on an event related to an AI-assisted project if you need that. See Sous Chef Agents if you're looking for that feature instead.
Where to Find Pipelines
Go to Settings > Automation Settings > Pipelines. This area has two tabs:
The Pipelines tab, where you create, edit, activate/deactivate, and monitor your Pipelines.
The Secrets tab, where you store sensitive values (like API tokens) your Pipelines can reference without exposing them — see Pipeline Secrets below.
Creating Your First Pipeline
Click Create Pipeline on the Pipelines tab. You'll be asked for:
Name — a unique, space-free identifier for the Pipeline (e.g.
skip-review-if-no-edits).Description — a short summary of what it does, so your team can tell Pipelines apart later.
Configuration (YAML) — the trigger and the actions, written in YAML (see the next section).
Save it, and it's immediately Active — wxrks starts listening for the trigger event and will run the Pipeline the next time it happens in your account. You can toggle a Pipeline Active/Inactive at any time from the Pipelines table without deleting it.
Anatomy of a Pipeline: Triggers, Actions, and Conditions
Every Pipeline's YAML has the same three parts.
1. The trigger (on)
This is the event that starts the Pipeline. Common triggers include a work unit's status changing, a task's status changing, a new project being created, a project's status changing, or a new user or Org Unit being added to your account. A Pipeline can also list more than one trigger — it runs whenever any of them occurs.
2. The actions (run)
Each item under run is one step, identified by an action type. wxrks currently supports:
Action type | What it does |
| Updates the status of one or more workflows and, optionally, their tasks. |
| Adds a workflow to project files that match specific file extensions. |
| Checks whether a work unit has manual edits in specific workflows, so a later step can act on the result. |
| Checks whether comments exist on a project or on specific segments. |
| Checks whether every work unit in a project has reached the Closed status. |
| Changes a project's status (Draft, Pending, Approved, Delivered, or Cancelled). |
| Writes specific fields to a User or Org Unit record, such as a QuickBooks ID after an integration call. |
| Calls an external URL (for example, a webhook or a third-party API). |
| Sends a message to a Slack channel. |
| Logs the Pipeline's current values, useful while you're building and testing a configuration. |
Actions run in the order they're listed, and each one can read the results of an earlier action in the same run — for example, a bw_update_workflow step deciding what to do based on whether an earlier bw_check_manual_edits step found manual edits.
3. Conditions
Any step can include a condition — a simple true/false check that decides whether that step actually runs. For example, a condition can check the event's details (event.details.new_status == 'DELIVERED') or an earlier step's result (!job1.has_manual_edits).
ℹ️ Note: If a condition refers to a value that isn't available yet, wxrks treats it as false and simply skips that step — it doesn't stop the rest of the Pipeline.
Workflow steps referenced in a Pipeline (both as triggers and inside actions) use the same workflow UUIDs (Universally Unique Identifiers — the long code that identifies each workflow) shown in Translation Settings > Workflows — see Managing Your Custom Workflows if you need to find or set those up first.
Example: Skip a Review Step When There Are No Manual Edits
This is a common use case: if a segment (a single translatable sentence or unit of text) in your Review step was never manually edited, there's nothing new for a linguist to check in Review 2 — so skip it automatically.
name: skip-review-2-if-no-edits
on: [WORK_UNIT_STATUS_CHANGE]
run:
- name: check-manual-edits
action: bw_check_manual_edits
id: job1
condition: event.details.new_status == 'DELIVERED'
with:
workflows:
- reviewWorkflowUUID # Review
- name: skip-review-2
action: bw_update_workflow
id: job2
condition: event.details.new_status == 'DELIVERED' && !job1.has_manual_edits
with:
workflows: []
update_workflows:
- review2WorkflowUUID # Review 2
update_task_status: SKIPPED
update_work_unit_status: SKIPPED
update_tasks: true
same_language_workflows: true
same_file_workflows: true
Swap reviewWorkflowUUID and review2WorkflowUUID for the real workflow UUIDs from Translation Settings > Workflows.
💡 Tip: Add a bw_debug_action step while you're testing to confirm the values you expect (like job1.has_manual_edits) are actually there.
Monitoring Pipeline Runs
Click the history icon next to any Pipeline to open its Executions view. Each run of the Pipeline is listed with a status (Running, Success, or Failed) and a timestamp — click View Details on any run to see the step-by-step log messages, including the exact error if a step failed.
ℹ️ Note: If a Pipeline's YAML has a syntax error at the moment it tries to run, wxrks automatically switches it to Inactive and records the parser error in its Executions log, rather than repeatedly failing on every matching event. If a Pipeline you expected to run has quietly gone inactive, check its Executions log first — it usually explains why.
Pipeline Secrets
Secrets store sensitive values — API keys, tokens, passwords — that a Pipeline's http or slack action needs, without putting that value in plain text inside the YAML. Create one from the Secrets tab, then reference it in your Pipeline as ${{ secrets.YOUR_SECRET_NAME }}.
Secrets are encrypted and account-scoped — only Pipelines in the same account can use them.
⚠️ Warning: Once saved, a secret's value can't be viewed again, only replaced or deleted. Keep a record of what you stored somewhere safe if you'll need it again outside wxrks.
Static vs. auto-refreshing secrets
A secret can work in one of two ways, shown in the Type column of the secrets table:
Term | Description |
Static secret | The original secret behavior: a fixed value you paste in once and update manually whenever it changes or expires. |
Auto-Refresh (Refreshable) secret | A secret backed by an authentication endpoint. Before each Pipeline run that uses it, wxrks checks whether the stored token is expired (or close to it) and, if so, calls the endpoint to fetch a new one automatically. |
Expiry Buffer | The number of seconds before the token's real expiration that wxrks proactively refreshes it, avoiding a request that fails because the token expired mid-flight. |
Failing status | The state a refreshable secret enters when a refresh attempt errors out (bad credentials, unreachable endpoint, unexpected response shape, and so on). |
ℹ️ Note: Existing Static secrets are unaffected by auto-refresh and continue to work exactly as before. Auto-refresh is opt-in per secret.
Setting Up an Auto-Refreshing Secret
Use this when a Pipeline calls an external service with a short-lived token, so it never fails because the stored credential went stale.
Step 1: Open Pipeline Secrets
Log in to wxrks as an Account Admin.
From the main navigation, go to Settings > Automation Settings > Pipelines.
Click the Secrets tab.
The secrets table lists every existing secret with a Type column showing either a Static or Refreshable badge, so you can tell at a glance which secrets are self-renewing.
Step 2: Create or Edit a Secret
Click Create Secret (or the Edit icon on an existing secret) to open the secret modal.
Enter the Secret Name (uppercase letters, numbers, and underscores only) and the Secret Value.
Enable Auto-refresh this token to reveal the refresh configuration panel.
ℹ️ Note: For a new refreshable secret, the Secret Value field can hold a placeholder or an initial token — the first refresh overwrites it automatically. wxrks never displays a saved secret value again, whether static or refreshable: reopening any secret to edit it always shows the Secret Value field empty, and you must re-enter a value to save changes. The Secret Name itself can't be changed once created, since Pipelines reference it by name.
Step 3: Configure the Refresh Request
Fill in how wxrks should call the external authentication endpoint:
Auth Endpoint URL — the full URL wxrks calls to request a new token.
HTTP Method —
POST,GET, orPUT, depending on what the provider expects.Client ID — optional identifier sent to the provider, if it requires one.
Client Secret — the credential used to authenticate the refresh request itself.
Request Body Template — optional JSON (JavaScript Object Notation) body sent with the request. Reference
${{ refresh.clientId }}and${{ refresh.clientSecret }}as placeholders for the values above.
For example, a provider expecting a JSON body with the client credentials would use:
{"client_id": "${{ refresh.clientId }}", "client_secret": "${{ refresh.clientSecret }}"}
⚠️ Warning: The Client Secret field is write-only: once saved, it is never returned by the API or shown in the form again. When editing a refreshable secret, leave it blank to keep the previously saved value — it is only overwritten if you type a new one.
Step 4: Tell wxrks Where to Find the New Token
The provider's response can return the token in the response body or in a response header.
Under New Token Location, choose Response Body (JSON) or Response Header, then enter the corresponding path:
For Response Body (JSON), enter the JSON path to the token (for example,
access_tokenordata.token).For Response Header, enter the exact header name (for example,
X-Auth-Token).
Optionally repeat the same choice under Token Expiry Location so wxrks knows exactly when the token expires (in seconds). Leave it blank if the provider doesn't return an expiry — wxrks then relies on a
401/403response from the external service to trigger a refresh instead of proactive expiry tracking.Set the Expiry Buffer (seconds) — how many seconds before actual expiration wxrks refreshes the token. Defaults to
60.
💡 Tip: If the provider's token lifetime is short or unpredictable, raise the Expiry Buffer so Pipelines never pick up a token that expires seconds after being fetched.
Step 5: Save and Verify the Status
Click Create Secret (or Update Secret). The button stays disabled until the Auth Endpoint URL, the New Token Location path, and a Client Secret are all present.
Reopen the secret to confirm the refresh configuration saved correctly. It shows an Active badge by default as soon as the configuration is saved — this is the starting state, not proof that a refresh has actually happened yet. Once a Pipeline uses the secret for the first time and wxrks performs a real refresh, this section also shows a Last refreshed timestamp.
⚠️ Warning: If a refresh attempt fails, the status switches to Failing and Account Admins are notified by email the first time it happens. Repeated failures on an already-Failing secret do not send another email, so don't assume silence means it recovered — reopen the secret to check its current status and the recorded error message.
Using the secret in a Pipeline
Reference the secret exactly as you would a static one, with no changes needed to the Pipeline definition itself:
${{ secrets.YOUR_SECRET_NAME }}
Every action type that reads secrets (http calls, slack messages, and others) resolves refreshable secrets automatically — there's nothing extra to configure on the Pipeline side.
Troubleshooting Auto-Refreshing Secrets
Issue / Error | Cause | Solution |
Create Secret / Update Secret button stays disabled | Auto-refresh is enabled but Auth Endpoint URL, the token path, or the Client Secret is missing. | Fill in all three fields. When editing, the Client Secret only needs to stay blank if one was already saved previously. |
Secret shows a Failing badge | The last refresh attempt errored — commonly an unreachable Auth Endpoint URL, an expired or incorrect Client Secret, or a New Token Location path that doesn't match the provider's actual response. | Open the secret to read the recorded error message and correct the relevant field. The fix takes effect the next time a Pipeline uses that secret, when wxrks attempts the refresh again. |
Pipeline fails with | Multiple Pipelines tried to refresh the same secret at once; one is refreshing while others waited past a short timeout. | This is expected under concurrent load and self-resolves. Re-run the Pipeline; it picks up the freshly refreshed token. |
New secret works once, then Pipelines start failing | The Token Expiry Location path or Expiry Buffer doesn't match how quickly the token actually expires. | Verify the expiry path against a real response from the provider, or increase the Expiry Buffer to refresh earlier. |
Quick Reference
Parameter | Specification |
Supported HTTP Methods for refresh |
|
New Token Location options | Response Body (JSON path) or Response Header (header name) |
Token Expiry Location options | Response Body (JSON path), Response Header (header name), or left blank |
Default Expiry Buffer |
|
Secret name format | Uppercase letters, numbers, and underscores only |
Client Secret visibility | Write-only — never returned or displayed after saving |
Secret reference syntax |
|
Related Articles
Sous Chef Agents — a separate automation layer that controls AI translation tone and style, not workflow events.
Managing Your Custom Workflows — find the workflow UUIDs a Pipeline needs to reference.
How to use the Auto Task Placement feature — a built-in automation for assigning tasks to vendors, no Pipeline required.
How to use wxrks Quote Automation — automate project quoting.







