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

# POST /v1/sanitise

> Inspect a payload and return it with every matched span redacted.

This exists for callers that cannot redact locally, such as a gateway that proxies a body it does not want to parse. **The SDKs do not use it.** They redact their own structured payload from the offsets [`/v1/scan`](/api/scan) returns, because only the caller knows how to write a redacted string back into a message array without disturbing the structure around it.

## Request

The `/v1/scan` body, plus:

<ParamField body="replacement" type="string" default="[REDACTED]">
  Text substituted for each span. At most 256 characters.
</ParamField>

## Response

The `/v1/scan` verdict, plus:

<ResponseField name="redacted_text" type="string">
  The submitted text with every matched span replaced.
</ResponseField>

<ResponseField name="redacted" type="integer">
  Spans replaced. Overlapping matches collapse into one span, so a payload that trips two rules on the same sentence is replaced once.
</ResponseField>

When you submit `tool_calls`, each rejected call carries `redacted_arguments` where a finding was raised against the raw argument text.

## Plan limits

Once the month's allowance for semantic blocks is spent, a semantic detection is still reported but the response carries your text back unchanged with `redacted` at zero. The verdict itself is untouched. Signature blocks are never withheld.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.