Source: https://atomicwork-preview.docs-staging.pageloop.ai/api-reference/changemanagement/postapi-v-1-workspaces-workspace-id-change-management-changes-list

# Get changes by filter

POST `https://{tenant}.atomicwork.com/api/v1/workspaces/{workspace_id}/change-management/changes/list`

### Filtering

The request body is an **array of filter objects**. Send an empty array (`[]`) to retrieve all records.

Each filter object has the following fields:

| Field       | Type   | Description                                             |
| ----------- | ------ | ------------------------------------------------------- |
| `attribute` | string | The field to filter on (see Supported attributes below) |
| `operator`  | string | Comparison operator (see Available operators below)     |
| `values`    | array  | One or more `\{ "value": \<scalar> \}` objects          |

**Supported attributes**

| Attribute     | Typical operator | Description                                                           |
| ------------- | ---------------- | --------------------------------------------------------------------- |
| `status`      | `IS_ANY_OF`      | Change status (e.g. `DRAFT`, `IN_REVIEW`, `APPROVED`, `IMPLEMENTED`). |
| `type`        | `IS_ANY_OF`      | Change type.                                                          |
| `assignee_id` | `IS_ANY_OF`      | Assigned agent user ID.                                               |
| `created_at`  | `IS_BETWEEN`     | Creation timestamp (ISO 8601).                                        |

**Available operators**

| Operator                             | Meaning                                                   |
| ------------------------------------ | --------------------------------------------------------- |
| `EQUALS`                             | Exact match                                               |
| `NOT_EQUALS`                         | Exclude exact match                                       |
| `IN` / `IS_ANY_OF`                   | Match any value in the list                               |
| `IS_NOT_ANY_OF`                      | Exclude all listed values                                 |
| `IS_BETWEEN`                         | Inclusive range — pass exactly two values: `[start, end]` |
| `IS_ON_OR_BEFORE` / `IS_ON_OR_AFTER` | Date/time boundary comparisons                            |
| `CONTAINS` / `TEXT_CONTAINS`         | Substring or set membership                               |
| `IS_NULL` / `IS_NOT_NULL`            | Null checks — `values` array can be empty                 |
| `STARTS_WITH` / `ENDS_WITH`          | String prefix/suffix match                                |

**Example**

```json
[
  {
    "attribute": "status",
    "operator": "IS_ANY_OF",
    "values": [
      {
        "value": "DRAFT"
      },
      {
        "value": "IN_REVIEW"
      }
    ]
  },
  {
    "attribute": "created_at",
    "operator": "IS_BETWEEN",
    "values": [
      {
        "value": "2024-01-01T00:00:00Z"
      },
      {
        "value": "2024-12-31T23:59:59Z"
      }
    ]
  }
]
```

## Authorization

#### X-Api-Key (header, string, required)

## Headers

#### X-Workspace-Id (header, string)

## Path Parameters

#### workspace\_id (path, integer, required)

Workspace ID (numeric). Find yours under Settings → Workspace.

## Query Parameters

#### filter\_name (query, string, required)

#### sort\_order (query, enum (string))

#### sort (query, string)

Comma-separated sort keys as `field:direction` (e.g. `status:asc,created_at:desc`), up to 2 keys. Field keys come from GET /views/CHANGE/fields (entries with `sortable: true`). Takes precedence over `sort_order`. Invalid/unknown fields -> 400.

#### page (query, integer, required)

#### per\_page (query, integer)

#### paginate (query, boolean)

## Response

#### 200

Successful response

#### Request

```bash cURL
curl -X POST 'https://{tenant}.atomicwork.com/api/v1/workspaces/{workspace_id}/change-management/changes/list' \
  -H 'X-Api-Key: <api-key>' \
  -H 'Content-Type: application/json' \
  -d '[{"attribute": "string", "operator": "EQUALS", "values": [{"value": "\u2026", "nested_filter": "\u2026"}]}]'
```

```javascript JavaScript
const res = await fetch('https://{tenant}.atomicwork.com/api/v1/workspaces/{workspace_id}/change-management/changes/list', {
  method: 'POST',
  headers: {
    'X-Api-Key': '<api-key>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify([{"attribute": "string", "operator": "EQUALS", "values": [{"value": "\u2026", "nested_filter": "\u2026"}]}]),
});
const data = await res.json();
```

```python Python
import requests

res = requests.post(
    'https://{tenant}.atomicwork.com/api/v1/workspaces/{workspace_id}/change-management/changes/list',
    headers={'X-Api-Key': '<api-key>'},
    json=[{"attribute": "string", "operator": "EQUALS", "values": [{"value": "\u2026", "nested_filter": "\u2026"}]}]
)
data = res.json()
```
