> For the complete documentation index, see [llms.txt](https://developer.collibra.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.collibra.com/tutorials/export-data-quality-and-observability-cloud-data-with-the-data-egress-api.md).

# Export Data Quality & Observability (cloud) data with the Data Egress API

In this tutorial, you learn how to use the Data Egress API to bulk-export your Data Quality & Observability (cloud) results for use in BI tools, data pipelines, and integrations.

{% hint style="info" %}
This tutorial is only for Data Quality & Observability (cloud).
{% endhint %}

## Prerequisites

* `DATA_QUALITY` and `DATA_QUALITY_JOB_VIEW` permissions. Results are scoped to the jobs to which you have access.
* If you need access to all results regardless of resource permissions, ask your administrator to grant `DATA_QUALITY` combined with `VIEW_PERMISSIONS_VIEW_ALL` or `RESOURCE_MANAGE_ALL`.

## About the Data Egress API

The Data Egress API lets you stream your job, monitor, and rule results out of Data Quality & Observability (cloud) in a single unpaginated request. Use it to:

* Load results into a BI tool like Power BI or Tableau.
* Feed data into a data warehouse or data lake.
* Build integrations that surface scores or rule violations in external systems.
* Audit coverage across datasets by enriching results with your Collibra Catalog assets.

The API has two endpoints:

* `POST /egress/export`: streams the export.
* `GET /egress/manifest`: discovers available topics, fields, and filter operators.

The export is built around **topics**: `JOBS`, `MONITORS`, and `RULES`. You can join any connected combination of topics. To export all three together, omit the `topics` field from your request body, or omit the body entirely.

## Discover the available fields

Before making your first export, call `GET /egress/manifest` to see which topics, fields, and filter operators are available. Use the manifest to validate your filter logic before POSTing.

```bash
curl "https://{your-collibra-host}/rest/dq/1.0/egress/manifest" \
  -u "{username}:{password}"
```

## Available filters

Filters are optional predicates that narrow your export. Each filter targets a qualified field name in the format `<topic>.<fieldName>` and applies one operator. For example, `jobs.tableName` or `rules.ruleName`. All filters in a request are ANDed together.

### Operators

| Operator      | Use for                                                   | Example value                                  |
| ------------- | --------------------------------------------------------- | ---------------------------------------------- |
| `EQ`          | Exact match                                               | `"op": "EQ", "value": "CUSTOMER_ORDERS"`       |
| `NE`          | Exclude an exact value                                    | `"op": "NE", "value": "SKIPPED"`               |
| `IN`          | Match any value in a list                                 | `"op": "IN", "values": ["FAILED", "ERRORED"]`  |
| `NOT_IN`      | Exclude a list of values                                  | `"op": "NOT_IN", "values": ["SKIPPED"]`        |
| `LIKE`        | Pattern match (`%` = any characters, `_` = one character) | `"op": "LIKE", "value": "%null check%"`        |
| `GT` / `GTE`  | After / on or after a date or number                      | `"op": "GTE", "value": "2026-07-01T00:00:00Z"` |
| `LT` / `LTE`  | Before / on or before a date or number                    | `"op": "LTE", "value": "2026-07-31T23:59:59Z"` |
| `IS_NULL`     | Field has no value                                        | `"op": "IS_NULL"` (no `value` needed)          |
| `IS_NOT_NULL` | Field has a value                                         | `"op": "IS_NOT_NULL"` (no `value` needed)      |

Not every operator is valid for every field. For example, date fields support range operators but not `LIKE`. The manifest response lists the `allowedOperators` for each field.

### Commonly used fields

| Field                     | Topic    | Type      | Description                                  |
| ------------------------- | -------- | --------- | -------------------------------------------- |
| `jobs.tableName`          | JOBS     | String    | The name of the table the DQ job ran against |
| `jobs.updatedAt`          | JOBS     | Timestamp | When the job result was last updated         |
| `monitors.columnName`     | MONITORS | String    | The column the monitor targets               |
| `monitors.dimensionNames` | MONITORS | List      | Quality dimensions assigned to the monitor   |
| `monitors.updatedAt`      | MONITORS | Timestamp | When the monitor result was last updated     |
| `rules.ruleName`          | RULES    | String    | The name of the rule                         |
| `rules.ruleColumnName`    | RULES    | String    | The column the rule targets                  |
| `rules.dimensionNames`    | RULES    | List      | Quality dimensions assigned to the rule      |
| `rules.updatedAt`         | RULES    | Timestamp | When the rule result was last updated        |

{% hint style="info" %}
This table shows a representative subset. Call `GET /egress/manifest` to see the complete list of filterable fields and their allowed operators for your environment.
{% endhint %}

## Make your first export

{% stepper %}
{% step %}
Send a POST request to `/egress/export` with no request body. This exports all three topics (JOBS, MONITORS, and RULES) joined, for the last 90 days.

{% tabs %}
{% tab title="NDJSON" %}

```bash
curl -X POST \
  "https://{your-collibra-host}/rest/dq/1.0/egress/export" \
  -u "{username}:{password}" \
  -H "Accept: application/x-ndjson" \
  --output dq-export.jsonl
```

{% endtab %}

{% tab title="CSV" %}

```bash
curl -X POST \
  "https://{your-collibra-host}/rest/dq/1.0/egress/export" \
  -u "{username}:{password}" \
  -H "Accept: text/csv" \
  --output dq-export.csv
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
NDJSON preserves types (numbers, nulls) and is recommended for programmatic consumers. CSV uses qualified field names as column headers (for example, `rules.ruleName`) and is easier to open in spreadsheet tools. List-valued fields such as quality dimension names are pipe-delimited in CSV: `Completeness|Accuracy`.
{% endhint %}
{% endstep %}

{% step %}
Read the response as a stream, not a buffered document. For NDJSON, parse line by line. For CSV, read row by row.
{% endstep %}

{% step %}
Check for the completion marker at the end of the stream.

{% tabs %}
{% tab title="NDJSON" %}

```json
{"_complete": true, "rowCount": 4821}
```

{% endtab %}

{% tab title="CSV" %}

```csv
# complete rowCount=4821
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
If you reach end of stream without seeing the completion marker, the export is truncated. Retry the request. To disable the marker for CSV consumers that cannot handle comment lines, add `completionMarker=false` as a query parameter, but note that this removes truncation detection.
{% endhint %}
{% endstep %}
{% endstepper %}

## Common use cases

### Export results for a specific table

To get monitor results for a specific table over the last 30 days, add a filter and set the `window` query parameter.

{% code title="Request" %}

```bash
curl -X POST \
  "https://{your-collibra-host}/rest/dq/1.0/egress/export?window=30" \
  -u "{username}:{password}" \
  -H "Accept: application/x-ndjson" \
  -H "Content-Type: application/json" \
  -d '{
    "topics": ["JOBS", "MONITORS"],
    "filters": [
      { "field": "jobs.tableName", "op": "EQ", "value": "CUSTOMER_ORDERS" }
    ]
  }'
```

{% endcode %}

### Filter rule results by date range

To export rule results for a specific time window, filter explicitly on `rules.updatedAt`. This overrides the default 90-day rolling window.

{% code title="Request" %}

```bash
curl -X POST \
  "https://{your-collibra-host}/rest/dq/1.0/egress/export" \
  -u "{username}:{password}" \
  -H "Accept: application/x-ndjson" \
  -H "Content-Type: application/json" \
  -d '{
    "topics": ["JOBS", "RULES"],
    "filters": [
      { "field": "rules.updatedAt", "op": "GTE", "value": "2026-07-01T00:00:00Z" },
      { "field": "rules.updatedAt", "op": "LTE", "value": "2026-07-31T23:59:59Z" }
    ]
  }'
```

{% endcode %}

### Search for a rule by name

Use the `LIKE` operator with `%` wildcards for partial name matching.

{% code title="Request" %}

```bash
curl -X POST \
  "https://{your-collibra-host}/rest/dq/1.0/egress/export" \
  -u "{username}:{password}" \
  -H "Accept: application/x-ndjson" \
  -H "Content-Type: application/json" \
  -d '{
    "topics": ["JOBS", "RULES"],
    "filters": [
      { "field": "rules.ruleName", "op": "LIKE", "value": "%null check%" }
    ]
  }'
```

{% endcode %}

{% hint style="info" %}
`LIKE` is case-sensitive. Use `%` to match any sequence of characters or `_` to match a single character. For example, `%null check%` matches any rule name that contains the phrase "null check".
{% endhint %}

### Enrich exports with Collibra Catalog assets

Set `includeCatalogAssets` to `true` to add Catalog `Table`, `Column`, and `Business Rule` assets to each row. This lets you join DQ results directly to your governed Catalog metadata.

{% code title="Request" %}

```bash
curl -X POST \
  "https://{your-collibra-host}/rest/dq/1.0/egress/export?includeCatalogAssets=true" \
  -u "{username}:{password}" \
  -H "Accept: application/x-ndjson"
```

{% endcode %}

{% hint style="info" %}
Catalog asset enrichment makes additional round-trips to DGC. Use `excludeColumnAssets` or `excludeRuleAssets` query parameters to omit specific enrichment groups if you only need table-level asset data.
{% endhint %}

### Additional resources

* [Data Egress API reference](/api/references/data-quality/data-egress.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developer.collibra.com/tutorials/export-data-quality-and-observability-cloud-data-with-the-data-egress-api.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
