# Redact

> Redact or anonymize sensitive information from a document while preserving the original layout.

<Callout type="info" title="Coming soon">
  This Operation is on our roadmap and not available yet. [Contact
  us](https://www.axelered.com/contact) for more information.
</Callout>

The **Redact** Operation detects and anonymizes personally identifiable information (PII) in a document, returning a clean copy with the original layout preserved. The engine classifies sensitive spans into a fixed set of PII categories and replaces each one with a consistent, labeled placeholder — so the same person, email, or account appearing multiple times always maps to the same token. This keeps the document readable and internally consistent while removing the underlying private data.

<Mermaid
  chart="`
flowchart LR
  A[&#x22;Raw Document<br/><small>e.g. Contract, Report...</small>&#x22;] --> B[&#x22;Redaction Engine<br/><small>Classify PII spans</small>&#x22;]
  B --> C[&#x22;Clean Copy<br/><small>[private_person_1], [private_email_1]...</small>&#x22;]
`"
/>

* **Category-Based Detection**: PII is detected and grouped into well-defined categories (names, addresses, emails, account numbers, secrets, and more) rather than relying on brittle pattern matching.
* **Consistent Placeholders**: Each detected entity is replaced with a labeled placeholder such as `[private_person_1]`. Recurrences of the same entity reuse the same token, preserving relationships within the document.
* **High-Fidelity Output**: The system returns a downloadable, redacted version of the original file. Supported formats include **PDF** and **DOCX**. The resulting file masks sensitive spans while preserving the original layout.

***

## 🏗️ Configuration

It will be the `redaction` Operation of a [Job](https://docs.axelered.com/jobs_guide), running on the language model of the Job's [Perimeter](https://docs.axelered.com/config_guide). By default the engine redacts a standard set of PII categories — no configuration is required. You can narrow or override that set with the `categories` field, and add natural language guidance with `instructions`.

### Parameters

| Parameter      | Type       | Required | Description                                                                                    |
| :------------- | :--------- | :------- | :--------------------------------------------------------------------------------------------- |
| `categories`   | `string[]` | No       | PII categories to redact. Defaults to all categories below when omitted.                       |
| `instructions` | `string`   | No       | Natural language guidance to refine detection (e.g., keep a specific company name unredacted). |

### Default PII Categories

When `categories` is omitted, the engine detects and redacts all of the following:

| Category          | Description                                                        |
| :---------------- | :----------------------------------------------------------------- |
| `private_person`  | Names of individuals.                                              |
| `private_address` | Physical or mailing addresses.                                     |
| `private_email`   | Email addresses.                                                   |
| `private_phone`   | Phone and fax numbers.                                             |
| `private_url`     | Personal or identifying URLs and links.                            |
| `private_date`    | Dates tied to an individual (e.g. birth dates, appointment dates). |
| `account_number`  | Bank, card, or other account identifiers.                          |
| `secret`          | Credentials such as API keys, passwords, and access tokens.        |

<Callout type="info">
  Pass an explicit `categories` array to redact only a subset — for example
  `["private_person", "account_number", "secret"]` to leave contact details intact.
</Callout>
