> ## Documentation Index
> Fetch the complete documentation index at: https://developer.opus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a Process

> Retrieve a discovered process with its steps, edges and tagged items

Retrieve a discovered business process — its steps, the edges between them, and the inputs, outputs, systems and rules recorded against each step and against the process as a whole.

Requires the **Discovery: Read** permission in the workspace that owns the process.

<Note>
  Pass `processVersionId` to read a saved snapshot instead of the current state. Both return the same shape.
</Note>

## Headers

<ParamField header="x-service-key" type="string" required>
  Your API authentication key
</ParamField>

## Path Parameters

<ParamField path="processId" type="string" required>
  The UUID of the process to read.
</ParamField>

## Query Parameters

<ParamField query="processVersionId" type="string">
  A saved process version to read instead of the current process. Omit for the latest state.
</ParamField>

## Response

<ResponseField name="id" type="string" required>
  The process id.
</ResponseField>

<ResponseField name="name" type="string" required>
  Process name.
</ResponseField>

<ResponseField name="description" type="string">
  Process description.
</ResponseField>

<ResponseField name="status" type="string">
  Process status (e.g., `approved`).
</ResponseField>

<ResponseField name="organizationId" type="string">
  The organization the process belongs to.
</ResponseField>

<ResponseField name="workspaceId" type="string">
  The workspace the process belongs to.
</ResponseField>

<ResponseField name="stepCount" type="number">
  Number of steps in the process.
</ResponseField>

<ResponseField name="branchCount" type="number">
  Number of branches in the process.
</ResponseField>

<ResponseField name="processOrigin" type="string | null">
  Set when the process was started from a business process template.
</ResponseField>

<ResponseField name="parentProcessId" type="string | null">
  Parent process in the discovery hierarchy.
</ResponseField>

<ResponseField name="steps" type="object[]" required>
  The process steps. See [Step object](#step-object).
</ResponseField>

<ResponseField name="customEdges" type="object[]" required>
  Edges connecting the steps. Each has `id`, `sourceStepId`, `targetStepId` and an optional `label`.
</ResponseField>

<ResponseField name="processInputs" type="object[]">
  Process-level inputs. Each entry is `{ id, text }`.
</ResponseField>

<ResponseField name="processOutputs" type="object[]">
  Process-level outputs. Each entry is `{ id, text }`.
</ResponseField>

<ResponseField name="processIntegrations" type="object[]">
  Systems the process touches, merged across its steps. Each entry is `{ id, text }`.
</ResponseField>

<ResponseField name="processRules" type="object[]">
  Process-level business rules. Each entry is `{ id, text }`.
</ResponseField>

<ResponseField name="milestone" type="object | null">
  Process context: `country` and `industry`.
</ResponseField>

<ResponseField name="createdAt" type="string | null">
  Creation timestamp (ISO 8601).
</ResponseField>

<ResponseField name="updatedAt" type="string | null">
  Last update timestamp (ISO 8601).
</ResponseField>

## Step object

Each entry in `steps` carries the work itself plus everything tagged against it.

<ResponseField name="id" type="string" required>
  Step id.
</ResponseField>

<ResponseField name="name" type="string" required>
  Step name.
</ResponseField>

<ResponseField name="description" type="string">
  Step description.
</ResponseField>

<ResponseField name="stepOrder" type="number">
  Position of the step in the process order.
</ResponseField>

<ResponseField name="stepType" type="string">
  Step type.
</ResponseField>

<ResponseField name="status" type="string">
  Step status.
</ResponseField>

<ResponseField name="owner" type="string">
  Step owner — a user id or a display name.
</ResponseField>

<ResponseField name="locked" type="boolean">
  Whether the step has been approved (locked).
</ResponseField>

<ResponseField name="duration" type="number | null">
  Scalar duration, expressed in `durationUnit`.
</ResponseField>

<ResponseField name="durationUnit" type="string">
  Unit for the scalar duration.
</ResponseField>

<ResponseField name="durationRange" type="object | null">
  Active-duration range as `{ min, max }`, each a `{ value, unit }` bound. Null when the step only has the scalar duration.
</ResponseField>

<ResponseField name="waitingTimeRange" type="object | null">
  Waiting time after this step, in the same `{ min, max }` shape.
</ResponseField>

<ResponseField name="branchId" type="string | null">
  Branch this step belongs to.
</ResponseField>

<ResponseField name="branchLabel" type="string | null">
  Label of the branch.
</ResponseField>

<ResponseField name="branchSourceStepId" type="string | null">
  Step the branch splits from.
</ResponseField>

<ResponseField name="branchRejoinStepId" type="string | null">
  Step the branch rejoins at.
</ResponseField>

<ResponseField name="branchOrder" type="number">
  Order of this branch among its siblings.
</ResponseField>

<ResponseField name="groupId" type="string | null">
  Group the step belongs to.
</ResponseField>

<ResponseField name="inputs" type="object[]">
  Step inputs. Each entry is `{ id, text }`.
</ResponseField>

<ResponseField name="outputs" type="object[]">
  Step outputs. Each entry is `{ id, text }`.
</ResponseField>

<ResponseField name="integrations" type="object[]">
  Systems the step touches.
</ResponseField>

<ResponseField name="rules" type="object[]">
  Business rules applied at this step.
</ResponseField>

<ResponseField name="departments" type="object[]">
  Departments involved.
</ResponseField>

<ResponseField name="performers" type="object[]">
  People or roles performing the step.
</ResponseField>

<ResponseField name="painPoints" type="object[]">
  Pain points recorded on the step.
</ResponseField>

## Errors

<ResponseField name="400" type="Bad Request">
  `processId` or `processVersionId` is not a valid UUID.
</ResponseField>

<ResponseField name="401" type="Unauthorized">
  Missing, invalid, or expired API key.
</ResponseField>

<ResponseField name="403" type="Forbidden">
  You do not have access to this process — it belongs to another organization, or the key's user lacks the **Discovery: Read** permission in its workspace.
</ResponseField>

<ResponseField name="404" type="Not Found">
  The process does not exist, or the given version does not belong to it.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url https://operator.opus.com/api/v1/discovery/process/{PROCESS_ID} \
    --header 'x-service-key: {YOUR_SERVICE_KEY}'
  ```

  ```python Python theme={null}
  import requests

  process_id = "{PROCESS_ID}"
  url = f"https://operator.opus.com/api/v1/discovery/process/{process_id}"
  headers = {"x-service-key": "{YOUR_SERVICE_KEY}"}

  response = requests.get(url, headers=headers)
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const processId = "{PROCESS_ID}";

  const response = await fetch(
    `https://operator.opus.com/api/v1/discovery/process/${processId}`,
    {
      method: "GET",
      headers: { "x-service-key": "{YOUR_SERVICE_KEY}" },
    }
  );

  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 Response theme={null}
  {
    "id": "{PROCESS_ID}",
    "name": "Invoice Approval",
    "description": "",
    "status": "approved",
    "organizationId": "{ORGANIZATION_ID}",
    "workspaceId": "{WORKSPACE_ID}",
    "stepCount": 8,
    "branchCount": 2,
    "processOrigin": null,
    "parentProcessId": null,
    "steps": [
      {
        "id": "{STEP_ID}",
        "name": "Invoice Request Received",
        "description": "A request or bill arrives from a supplier.",
        "stepOrder": 1,
        "stepType": "task",
        "status": "approved",
        "owner": "Accounts Payable",
        "locked": true,
        "duration": 15,
        "durationUnit": "minutes",
        "durationRange": null,
        "waitingTimeRange": null,
        "branchId": null,
        "branchLabel": null,
        "branchSourceStepId": null,
        "branchRejoinStepId": null,
        "branchOrder": 0,
        "groupId": null,
        "inputs": [{ "id": "{ITEM_ID}", "text": "Supplier invoice" }],
        "outputs": [{ "id": "{ITEM_ID}", "text": "Logged invoice record" }],
        "integrations": [{ "id": "{ITEM_ID}", "text": "Email" }],
        "rules": [],
        "departments": [{ "id": "{ITEM_ID}", "text": "Finance" }],
        "performers": [{ "id": "{ITEM_ID}", "text": "AP Clerk" }],
        "painPoints": [{ "id": "{ITEM_ID}", "text": "Invoices arrive in inconsistent formats" }]
      }
    ],
    "customEdges": [
      {
        "id": "{EDGE_ID}",
        "sourceStepId": "{STEP_ID}",
        "targetStepId": "{STEP_ID}",
        "label": null
      }
    ],
    "processInputs": [],
    "processOutputs": [],
    "processIntegrations": [],
    "processRules": [],
    "milestone": { "country": "United Arab Emirates", "industry": "Financial Services" },
    "createdAt": "2026-08-13T08:00:00.000Z",
    "updatedAt": "2026-08-13T09:12:44.000Z"
  }
  ```
</ResponseExample>
