Replace the outgoing transitions of a phase, or create a phase without linking it to its neighbors.
Before You Begin
🔗 Use the GraphQL Playground to execute the queries in this guide.
➡️ New to GraphQL? Learn how to navigate the Playground with our Playground Basics Guide.
Prerequisites
-
Authentication: Use a Service Account token (Personal Access Tokens are deprecated).
-
Permissions: Ensure your token has the necessary permissions.
-
Pipe ID: The ID of the pipe that owns the phase.
-
Phase IDs: The phase you are updating, and each phase it should connect to. A target must belong to the same pipe, must not be the draft phase, and must not be the phase itself.
Step 1: Find the phase IDs
- Via Pipefy UI:
- Open the pipe settings for the phase.
- The URL includes the phase ID:
https://app.pipefy.com/pipes/1234/settings/phases/123456. - Phase ID =
123456(the number after/phases/).
- Via GraphQL Query
- Check on our Get resource IDs page.
Step 2: Replace the outgoing transitions
jumpTargetIds on updatePhase replaces the whole outgoing set. Omit the argument to leave the current transitions unchanged. Send an empty list to clear them.
next_phase_ids in the response lists only destinations with a higher index. A destination with a lower index is returned in previous_phase_ids. Together those two fields are the full outgoing set. Types::Phase does not expose a jumpTargetIds field.
mutation {
updatePhase(input: {
id: 123456,
name: "Review",
jumpTargetIds: [123457, 123458]
}) {
phase {
id
next_phase_ids
previous_phase_ids
}
}
}
Arguments Breakdown
id: the phase you are updatingname: the phase name.updatePhaserequires it even when you only change transitionsjumpTargetIds: the phase IDs that replace every outgoing transition.[]clears them
Example Response
{
"data": {
"updatePhase": {
"phase": {
"id": "123456",
"next_phase_ids": [123458],
"previous_phase_ids": [123457]
}
}
}
}
An id from another pipe, a draft phase, or the phase itself is rejected and the previous transitions stay in place:
{
"data": {
"updatePhase": null
},
"errors": [
{
"message": "Validation failed: Jump targets are not possible destinations: 999999",
"extensions": {
"code": "RECORD_INVALID"
}
}
]
}
Step 3: Create a phase without neighbor links
createPhase links the new phase to its neighbors by default. Pass connectNeighbors: false to skip that linking in both directions. Omit the argument, or send null, to keep today's behavior. The start form jump is not a neighbor transition: when this phase is the pipe's only phase, the start form still jumps to it.
mutation {
createPhase(input: {
pipe_id: "1234",
name: "Review",
connectNeighbors: false
}) {
phase {
id
next_phase_ids
previous_phase_ids
}
}
}
Arguments Breakdown
pipe_id: the pipe that will own the phasename: the phase nameconnectNeighbors:falsecreates the phase with no neighbor jumps. The start form still jumps to it when it is the pipe's only phase. The default istrue
Example Response
{
"data": {
"createPhase": {
"phase": {
"id": "123459",
"next_phase_ids": [],
"previous_phase_ids": []
}
}
}
}
Key Notes
jumpTargetIdsis a replacement, not an addition. Send every destination you want to keep.- Unknown target ids are rejected. They are not dropped.
- Reordering phases is not part of
updatePhase.

