{
  "info": {
    "name": "Flowral API v1.0.0",
    "description": "The Flowral public API: flows, the tasks in them, and the derived state that\nmakes a dependency planner useful — what is ready, what is blocked, and when a\nproject actually lands.\n\n**Authentication.** Every request carries a credential created in the app under\n**API & AI**. Either send an API key as a bearer token, or exchange a client id\nand secret for a short-lived token at `POST /v1/oauth/token`. A credential\nbelongs to a workspace and carries its own role: it can never do more than that\nrole allows, and it cannot move between workspaces.\n\n**Errors** are `{ \"error\": { \"code\", \"message\" } }`. Switch on `code`; the\nmessage is for humans and may change.\n\n**Lists** are `{ \"total\", \"items\" }` and take `size` and `from`.\n\n**Rate limit** 120 requests/minute per credential, burst 240. Exceeding it\nreturns `429` with `Retry-After`.\n\n**Stability.** This is v1. Fields get added; nothing that exists is removed or\nrepurposed without a new major version. The platform API the web app uses is a\ndifferent, unversioned surface — it is not this, and it will change without\nnotice.\n\n---\n\nSet the `apiKey` collection variable to a key from **API & AI** in the Flowral app. Generated from the OpenAPI document — do not edit by hand.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.flowral.app",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "auth",
      "item": [
        {
          "name": "Exchange client credentials for an access token",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/oauth/token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "oauth",
                "token"
              ]
            },
            "description": "Standard OAuth 2.0 client-credentials grant (`application/x-www-form-urlencoded`). Credentials may also be sent as HTTP Basic. The token is a bearer token for this API and nothing else — it is not a planner session and cannot be used against the app.\n\n**Errors** `400` UNSUPPORTED_GRANT_TYPE · INVALID_SCOPE · `401` INVALID_CLIENT",
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                {
                  "key": "grant_type",
                  "value": "",
                  "description": "Must be `client_credentials`."
                },
                {
                  "key": "client_id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "client_secret",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "scope",
                  "value": "",
                  "description": "Space-separated. Defaults to everything the credential was granted; naming scopes here can only narrow it."
                }
              ]
            },
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Revoke an access token",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/oauth/revoke",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "oauth",
                "revoke"
              ]
            },
            "description": "RFC 7009. Kills one issued token immediately. To kill the credential itself, delete it in the app — that also invalidates every token it ever issued.\n\n**Errors** `401` INVALID_CLIENT",
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                {
                  "key": "token",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "workspace",
      "item": [
        {
          "name": "Who this credential is",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "me"
              ]
            },
            "description": "The workspace, the credential's role and scopes, and the plan. Cheap, and the right health check for an integration.\n\n**Errors** `401` UNAUTHORIZED · CREDENTIAL_REVOKED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        }
      ]
    },
    {
      "name": "flows",
      "item": [
        {
          "name": "List flows",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows"
              ],
              "query": [
                {
                  "key": "archived",
                  "value": "false",
                  "description": "Return archived flows instead of live ones.",
                  "disabled": true
                },
                {
                  "key": "q",
                  "value": "",
                  "description": "Match on flow name.",
                  "disabled": true
                },
                {
                  "key": "size",
                  "value": "25",
                  "description": "Page size, 1–100.",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "0",
                  "description": "Offset.",
                  "disabled": true
                }
              ]
            },
            "description": "Flows in the workspace, newest first. Archived flows are excluded unless `archived=true`.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Create a flow",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows"
              ]
            },
            "description": "Creates a flow and, optionally, its whole task graph in one call. A task's `after` references other tasks **by index in this request**, so the dependency chain arrives with the flow rather than in follow-up calls. Cycles are refused outright.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `400` VALIDATION_FAILED · CIRCULAR_DEPENDENCY · `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · SUBSCRIPTION_PAST_DUE · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Get a flow",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": "Flow id."
                }
              ]
            },
            "description": "The flow with its full task graph and derived state — status, what is blocking what, and which tasks are on the critical path.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Update a flow",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "Changes the flow itself. Tasks are edited through the task endpoints.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · SUBSCRIPTION_PAST_DUE · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Archive a flow",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "Archives rather than destroys: the flow leaves the list and can be restored. Nothing in Flowral deletes client history on a single call.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · SUBSCRIPTION_PAST_DUE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Restore an archived flow",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}/restore",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId",
                "restore"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · NOT_ARCHIVED · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Get the schedule",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}/schedule?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId",
                "schedule"
              ],
              "query": [
                {
                  "key": "startDate",
                  "value": "",
                  "description": "ISO 8601. Defaults to today.",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "Runs the critical-path pass: earliest and latest start and finish per task, slack, and the projected finish for the flow. Computed from estimates and dependencies — no dates are stored, so this is always current.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Get the delivery report",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId",
                "report"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "Completion, effort remaining, workload per member, the tasks blocking the most work, and what is unestimated or orphaned. The same figures the Reporting view shows.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Export a flow",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}/exports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId",
                "exports"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "Renders the flow through the same pipeline the app uses. `pdf` is the delivery document (diagram plus execution plan); `png` is the dependency diagram on its own. Responds with the bytes, `Content-Disposition` set.\n\n**Scopes** `flows:read`\n\n**Errors** `400` VALIDATION_FAILED · `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED · `502` RENDER_FAILED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"format\": \"pdf\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "List a flow's guests",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}/shares",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId",
                "shares"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "Clients and guests with access to this flow. Guests never occupy a seat, on any plan.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Share a flow with a guest",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}/shares",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId",
                "shares"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "Gives one person access to this flow only — they see its progress and nothing else in the workspace.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `400` INVALID_EMAIL · `401` UNAUTHORIZED · `403` FORBIDDEN · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Remove a guest from a flow",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}/shares/{shareId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId",
                "shares",
                ":shareId"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                },
                {
                  "key": "shareId",
                  "value": "<shareId>",
                  "description": ""
                }
              ]
            },
            "description": "**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        }
      ]
    },
    {
      "name": "tasks",
      "item": [
        {
          "name": "List a flow's tasks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}/tasks?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId",
                "tasks"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "description": "`blocked`, `ready`, `in_progress` or `done`.",
                  "disabled": true
                },
                {
                  "key": "assigneeId",
                  "value": "",
                  "description": "Only tasks assigned to this member.",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "Every task in the flow with its derived status. Filter by `status` to get just what is ready, or just what is blocked.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Add a task to a flow",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/flows/{flowId}/tasks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "flows",
                ":flowId",
                "tasks"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "Creates a task and links it in the same call. `after` are the tasks that must finish first; `before` are the tasks that now wait on this one — use it to insert a step into an existing chain.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `400` VALIDATION_FAILED · CIRCULAR_DEPENDENCY · `401` UNAUTHORIZED · `403` FORBIDDEN · SUBSCRIPTION_PAST_DUE · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Get a task",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Update a task",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "Name, description and estimate. Status is not settable here — see the transition endpoints. Refused once work has started, the same rule the canvas applies.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · SUBSCRIPTION_PAST_DUE · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete a task",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "Bridges the gap it leaves: whatever depended on this task now depends on what it depended on, so removing a step from the middle leaves a plan that still runs end to end.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · SUBSCRIPTION_PAST_DUE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Add a sub-task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/subtasks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "subtasks"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "A breakdown of one task. A task that has sub-tasks completes through them rather than directly.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Add a dependency",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/dependencies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "dependencies"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "Makes this task wait on another. Refuses anything that would create a cycle.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `400` CIRCULAR_DEPENDENCY · `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"dependsOn\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Remove a dependency",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/dependencies/{dependsOnId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "dependencies",
                ":dependsOnId"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                },
                {
                  "key": "dependsOnId",
                  "value": "<dependsOnId>",
                  "description": ""
                }
              ]
            },
            "description": "**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Start a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "start"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "Ready → in progress. Refused while anything it depends on is unfinished, and assigned work only moves for its assignee.\n\n**Scopes** `work:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `409` TASK_BLOCKED · ALREADY_DONE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Complete a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/complete",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "complete"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "In progress → done, and the response says what that unblocked — which is the next question every time. Refused if sub-tasks are outstanding or a required deliverable has not been handed in.\n\n**Scopes** `work:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `409` TASK_BLOCKED · SUBTASKS_OUTSTANDING · DELIVERABLE_REQUIRED · ALREADY_DONE · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Reopen a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/reopen",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "reopen"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "Done → in progress. Refused once anything downstream has been started: undoing a completion that the next person already acted on would rewrite work that is under way.\n\n**Scopes** `work:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `409` DOWNSTREAM_STARTED · NOT_DONE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Assign a task",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/assignee",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "assignee"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "Sets the owner. Send `null` to unassign.\n\n**Scopes** `work:write`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · MEMBER_NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "List comments",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/comments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "comments"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Comment on a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/comments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "comments"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "The one write a viewer credential can make, and the one that is never frozen by work having started.\n\n**Scopes** `work:write`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Attach a file",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/attachments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "attachments"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "A reference file on the task — a brief, a spec, a screenshot. `multipart/form-data`.\n\n**Scopes** `flows:write`\n\n**Minimum role** member\n\n**Errors** `400` MISSING_FILE · FILE_TOO_LARGE · UNSUPPORTED_FILE_TYPE · `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "description": "Images, video, PDF and Word, up to 50 MB."
                }
              ]
            }
          }
        },
        {
          "name": "Hand in a deliverable",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/tasks/{taskId}/deliverables",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tasks",
                ":taskId",
                "deliverables"
              ],
              "variable": [
                {
                  "key": "taskId",
                  "value": "<taskId>",
                  "description": ""
                }
              ]
            },
            "description": "Satisfies a file requirement on the task, which is what lets it complete. Different from an attachment: this one is the thing being asked for.\n\n**Scopes** `work:write`\n\n**Errors** `400` MISSING_FILE · FILE_TOO_LARGE · `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · REQUIREMENT_NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "description": ""
                },
                {
                  "key": "requirementId",
                  "type": "text",
                  "value": "",
                  "description": "Which requirement this satisfies. Optional when the task has exactly one."
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "work",
      "item": [
        {
          "name": "What is ready to start",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/work/available?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "work",
                "available"
              ],
              "query": [
                {
                  "key": "flowId",
                  "value": "",
                  "description": "Restrict to one flow.",
                  "disabled": true
                },
                {
                  "key": "assigneeId",
                  "value": "",
                  "description": "Restrict to one person. Unassigned work is always included.",
                  "disabled": true
                },
                {
                  "key": "size",
                  "value": "25",
                  "description": "",
                  "disabled": true
                }
              ]
            },
            "description": "Every unblocked, unstarted task across the workspace, critical-path work first. The single most useful call in this API.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "What is assigned to the caller",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/work/mine?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "work",
                "mine"
              ],
              "query": [
                {
                  "key": "size",
                  "value": "25",
                  "description": "",
                  "disabled": true
                }
              ]
            },
            "description": "Ready and in-progress work assigned to this credential's identity. For a service credential, pass `assigneeId` to `/work/available` instead — a credential is not a person and has nothing assigned to it.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "What is stuck, and on what",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/work/blocked?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "work",
                "blocked"
              ],
              "query": [
                {
                  "key": "flowId",
                  "value": "",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "size",
                  "value": "25",
                  "description": "",
                  "disabled": true
                }
              ]
            },
            "description": "Blocked work with the unfinished tasks holding it up, ranked so the task blocking the most appears first. This is the \"where is delivery actually stalling\" call.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "What is under way",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/work/in-progress?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "work",
                "in-progress"
              ],
              "query": [
                {
                  "key": "flowId",
                  "value": "",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "assigneeId",
                  "value": "",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "size",
                  "value": "25",
                  "description": "",
                  "disabled": true
                }
              ]
            },
            "description": "**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "The whole workspace in one call",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/work/overview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "work",
                "overview"
              ]
            },
            "description": "Per-flow counts, workload per member and the flows at risk of their due date — so a dashboard does not have to fetch twelve flows to render.\n\n**Scopes** `flows:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        }
      ]
    },
    {
      "name": "team",
      "item": [
        {
          "name": "List members",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/team/members",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "team",
                "members"
              ]
            },
            "description": "People in the workspace and their roles. Guests are not members and are not listed here — they belong to a flow (see `/v1/flows/{flowId}/shares`).\n\n**Scopes** `team:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "List pending invitations",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/team/invites",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "team",
                "invites"
              ]
            },
            "description": "**Scopes** `team:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Invite someone",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/team/invites",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "team",
                "invites"
              ]
            },
            "description": "Sends an invitation. A pending invite occupies a seat for the purposes of the plan limit, which is why this can be refused on a full workspace before anyone has accepted.\n\n**Scopes** `team:write`\n\n**Minimum role** admin\n\n**Errors** `400` INVALID_EMAIL · ALREADY_MEMBER · `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_LIMIT_REACHED · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Change a member's role",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/team/members/{memberId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "team",
                "members",
                ":memberId"
              ],
              "variable": [
                {
                  "key": "memberId",
                  "value": "<memberId>",
                  "description": ""
                }
              ]
            },
            "description": "**Scopes** `team:write`\n\n**Minimum role** admin\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "templates",
      "item": [
        {
          "name": "List templates",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/templates?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "templates"
              ],
              "query": [
                {
                  "key": "category",
                  "value": "",
                  "description": "",
                  "disabled": true
                }
              ]
            },
            "description": "Saved flow shapes in this workspace.\n\n**Scopes** `templates:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Get a template",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/templates/{templateId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "templates",
                ":templateId"
              ],
              "variable": [
                {
                  "key": "templateId",
                  "value": "<templateId>",
                  "description": ""
                }
              ]
            },
            "description": "The template with the task graph it will produce, so an integration can show what it is about to create.\n\n**Scopes** `templates:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Start a flow from a template",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/templates/{templateId}/flows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "templates",
                ":templateId",
                "flows"
              ],
              "variable": [
                {
                  "key": "templateId",
                  "value": "<templateId>",
                  "description": ""
                }
              ]
            },
            "description": "Creates a new flow from the template and returns it, graph and all. Using a template is available on every plan; saving new ones is not.\n\n**Scopes** `flows:write`, `templates:read`\n\n**Minimum role** member\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · SUBSCRIPTION_PAST_DUE · `404` NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "search",
      "item": [
        {
          "name": "Search the workspace",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/search?q=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "search"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "`flow`, `task` or `template`. Omit for all three.",
                  "disabled": true
                },
                {
                  "key": "size",
                  "value": "20",
                  "description": "",
                  "disabled": true
                }
              ]
            },
            "description": "Flows, tasks and templates matching a query — for a picker, or to resolve a name a human typed into an id.\n\n**Scopes** `flows:read`\n\n**Errors** `400` VALIDATION_FAILED · `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `429` RATE_LIMITED"
          }
        }
      ]
    },
    {
      "name": "notifications",
      "item": [
        {
          "name": "What a person is subscribed to",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notifications/preferences?memberId=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notifications",
                "preferences"
              ],
              "query": [
                {
                  "key": "memberId",
                  "value": "",
                  "description": "The person these settings belong to. A credential has no inbox, so this is never optional.",
                  "disabled": false
                }
              ]
            },
            "description": "The settings that actually apply, after the account defaults and any flow overrides have been resolved. This is the answer, not the stored row — a `true` here means mail will be sent.\n\n**Scopes** `notifications:read`\n\n**Errors** `400` VALIDATION_FAILED · `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` MEMBER_NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Change what a person is subscribed to",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notifications/preferences",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notifications",
                "preferences"
              ]
            },
            "description": "Sets the account defaults. Only the keys you send are changed; sending `null` for one resets it to the built-in default rather than turning it off.\n\n**Scopes** `notifications:write`\n\n**Minimum role** admin\n\n**Errors** `400` VALIDATION_FAILED · `401` UNAUTHORIZED · `403` FORBIDDEN · INSUFFICIENT_SCOPE · `404` MEMBER_NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"memberId\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "What a person is subscribed to on one flow",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notifications/preferences/flows/{flowId}?memberId=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notifications",
                "preferences",
                "flows",
                ":flowId"
              ],
              "query": [
                {
                  "key": "memberId",
                  "value": "",
                  "description": "The person these settings belong to. A credential has no inbox, so this is never optional.",
                  "disabled": false
                }
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "The account settings with this flow's override applied.\n\n**Scopes** `notifications:read`\n\n**Errors** `400` VALIDATION_FAILED · `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` NOT_FOUND · MEMBER_NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "Override a person's settings for one flow",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notifications/preferences/flows/{flowId}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notifications",
                "preferences",
                "flows",
                ":flowId"
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "The usual use is `{\"muted\": true}` — silence one noisy flow without touching anything else this person gets.\n\n**Scopes** `notifications:write`\n\n**Minimum role** admin\n\n**Errors** `400` VALIDATION_FAILED · `401` UNAUTHORIZED · `403` FORBIDDEN · INSUFFICIENT_SCOPE · `404` NOT_FOUND · MEMBER_NOT_FOUND · `429` RATE_LIMITED",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"memberId\": \"\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Remove a flow override",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notifications/preferences/flows/{flowId}?memberId=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notifications",
                "preferences",
                "flows",
                ":flowId"
              ],
              "query": [
                {
                  "key": "memberId",
                  "value": "",
                  "description": "The person these settings belong to. A credential has no inbox, so this is never optional.",
                  "disabled": false
                }
              ],
              "variable": [
                {
                  "key": "flowId",
                  "value": "<flowId>",
                  "description": ""
                }
              ]
            },
            "description": "The flow follows the person's account settings again. Not the same as turning everything off for it.\n\n**Scopes** `notifications:write`\n\n**Minimum role** admin\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · INSUFFICIENT_SCOPE · `404` NOT_FOUND · MEMBER_NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "What was actually sent",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notifications/log?memberId=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notifications",
                "log"
              ],
              "query": [
                {
                  "key": "size",
                  "value": "25",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "memberId",
                  "value": "",
                  "description": "The person these settings belong to. A credential has no inbox, so this is never optional.",
                  "disabled": false
                }
              ]
            },
            "description": "One row per email that left the building, newest first — batches and digests alike. Use it to answer \"did they get told\", and to see what was suppressed because they had unsubscribed.\n\n**Scopes** `notifications:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` MEMBER_NOT_FOUND · `429` RATE_LIMITED"
          }
        },
        {
          "name": "This person's digest, without sending it",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notifications/digest?memberId=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notifications",
                "digest"
              ],
              "query": [
                {
                  "key": "memberId",
                  "value": "",
                  "description": "The person these settings belong to. A credential has no inbox, so this is never optional.",
                  "disabled": false
                }
              ]
            },
            "description": "What tomorrow morning's mail would say, built by the real builder and delivered to nobody. Also the cleanest per-person view of \"what should I work on today\" across every flow they can see — `/v1/work/available` answers that per workspace, this answers it per person.\n\n**Scopes** `notifications:read`\n\n**Errors** `401` UNAUTHORIZED · `403` FORBIDDEN · PLAN_REQUIRED · INSUFFICIENT_SCOPE · `404` MEMBER_NOT_FOUND · `429` RATE_LIMITED"
          }
        }
      ]
    }
  ]
}
