# Screenshot Privacy Redaction Tool - RedactShot (`westerly_palisade/redactshot-by-dravara`) Actor

Find personal data and PII risks in a screenshot based on where it will be shared. Review a signed, annotated redaction plan before locally overwriting only the approved regions in a metadata-free PNG.

- **URL**: https://apify.com/westerly\_palisade/redactshot-by-dravara.md
- **Developed by:** [Dravara LLC](https://apify.com/westerly_palisade) (community)
- **Categories:** AI, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / redaction preview created

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## RedactShot

**Review privacy risks before creating a redacted screenshot.**

RedactShot proposes sensitive regions based on the sharing destination, shows a
numbered preview, and requires a separate reviewed apply action. It never asks
an image model to fabricate a “redacted” result. The final PNG is rendered
locally by overwriting pixels with solid masks, flattening alpha data, applying
safe orientation, and stripping metadata.

### Destination-aware checks

Choose public social media, customer support, coworker, bug report, AI
assistant, or general external sharing. The preview can identify names, email
addresses, phones, addresses, account/payment data, authentication tokens, API
keys, customer details, browser tabs, notifications, profile photos, internal
URLs, organization names, and other contextual risks.

### Mandatory two-run workflow

1. Run `action: preview` and inspect every numbered region.
2. Copy `input_sha256` into `expected_input_sha256`.
3. Copy the signed `preview_token` into the apply run.
4. Copy `regions` into `confirmed_regions`.
5. If anything is wrong or missing, create a new preview with clearer guidance.
6. Otherwise run `action: apply` with the exact returned regions and
   `confirmation: APPLY REDACTIONS` within one hour.

Apply never runs detection again. It verifies that the normalized image still
matches the reviewed SHA-256 digest and that `confirmed_regions` exactly match
the plan bound into the signed preview token, then masks that reviewed plan.
Automatic detection can miss context-sensitive data, so do not share the
result without a final human inspection.

### Billing

A successful preview costs $0.60005: the $0.00005 `apify-actor-start` event
plus $0.60 for `redaction-preview-created`. A successful apply costs $0.10005:
the start event plus $0.10 for `redacted-image-created`. The complete successful
two-run workflow costs $0.70010. Result events are captured only after their
artifacts exist. Failed validation or provider steps skip the result event, but
the Actor-start charge can still apply. The synthetic preview input is billed
like any other run.

### Privacy and limits

PNG, JPEG, and WebP; one image per run; up to 12 MB, 8,192 pixels per side,
and 20 megapixels. Console uploads are read inside this limited Actor with its
scoped storage access. Direct inline data URLs should stay at or below 6 MB of
raw image bytes because Apify run-input requests have a smaller limit than
uploaded or remote files. Preview content is processed by Dravara, LLC's
private service and the OpenAI API using `store: false`; applicable provider
abuse-monitoring retention may still apply. Apply is deterministic and local.
Apify retains run input/output under the runner's settings.

Do not use RedactShot as the sole control for regulated or legally mandated
redaction. Support: [support@dravarahq.com](mailto:support@dravarahq.com)

# Actor input Schema

## `action` (type: `string`):

Create a reviewable preview first, or apply an exact previously reviewed and signed plan.
## `image` (type: `string`):

One PNG, JPEG, or WebP screenshot. Console uploads/HTTPS: up to 12 MB. Inline data URLs: up to 6 MB raw. Maximum 20 megapixels.
## `destination` (type: `string`):

Choose the intended audience so the preview can apply destination-aware privacy rules.
## `context` (type: `string`):

State anything that must remain visible. Used only for preview.
## `confirmed_regions` (type: `array`):

For apply only: copy the preview regions exactly. If anything is wrong or missing, create a new preview with clearer guidance instead of editing this list.
## `expected_input_sha256` (type: `string`):

For apply only: copy input_sha256 from the reviewed preview. Apply fails if the image changed.
## `preview_token` (type: `string`):

For apply only: copy preview_token from the reviewed preview. It proves a preview was created for this image and destination.
## `confirmation` (type: `string`):

For apply only, enter exactly: APPLY REDACTIONS

## Actor input object example

```json
{
  "action": "preview",
  "image": "data:image/webp;base64,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",
  "destination": "public_social",
  "context": "Prepare this support screenshot for a public post."
}
````

# Actor output Schema

## `results` (type: `string`):

No description

## `files` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "image": "data:image/webp;base64,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",
    "context": "Prepare this support screenshot for a public post."
};

// Run the Actor and wait for it to finish
const run = await client.actor("westerly_palisade/redactshot-by-dravara").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "image": "data:image/webp;base64,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",
    "context": "Prepare this support screenshot for a public post.",
}

# Run the Actor and wait for it to finish
run = client.actor("westerly_palisade/redactshot-by-dravara").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "image": "data:image/webp;base64,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",
  "context": "Prepare this support screenshot for a public post."
}' |
apify call westerly_palisade/redactshot-by-dravara --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=westerly_palisade/redactshot-by-dravara",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Screenshot Privacy Redaction Tool - RedactShot",
        "description": "Find personal data and PII risks in a screenshot based on where it will be shared. Review a signed, annotated redaction plan before locally overwriting only the approved regions in a metadata-free PNG.",
        "version": "1.1",
        "x-build-id": "e38oaVUQtCsRiChxR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/westerly_palisade~redactshot-by-dravara/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-westerly_palisade-redactshot-by-dravara",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/westerly_palisade~redactshot-by-dravara/runs": {
            "post": {
                "operationId": "runs-sync-westerly_palisade-redactshot-by-dravara",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/westerly_palisade~redactshot-by-dravara/run-sync": {
            "post": {
                "operationId": "run-sync-westerly_palisade-redactshot-by-dravara",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "action",
                    "image",
                    "destination"
                ],
                "properties": {
                    "action": {
                        "title": "Action",
                        "enum": [
                            "preview",
                            "apply"
                        ],
                        "type": "string",
                        "description": "Create a reviewable preview first, or apply an exact previously reviewed and signed plan.",
                        "default": "preview"
                    },
                    "image": {
                        "title": "Screenshot",
                        "type": "string",
                        "description": "One PNG, JPEG, or WebP screenshot. Console uploads/HTTPS: up to 12 MB. Inline data URLs: up to 6 MB raw. Maximum 20 megapixels."
                    },
                    "destination": {
                        "title": "Where will it be shared?",
                        "enum": [
                            "public_social",
                            "customer_support",
                            "coworker",
                            "bug_report",
                            "ai_assistant",
                            "external"
                        ],
                        "type": "string",
                        "description": "Choose the intended audience so the preview can apply destination-aware privacy rules.",
                        "default": "public_social"
                    },
                    "context": {
                        "title": "Optional preview guidance",
                        "maxLength": 2000,
                        "type": "string",
                        "description": "State anything that must remain visible. Used only for preview."
                    },
                    "confirmed_regions": {
                        "title": "Reviewed regions for apply",
                        "type": "array",
                        "description": "For apply only: copy the preview regions exactly. If anything is wrong or missing, create a new preview with clearer guidance instead of editing this list.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "data_type": {
                                    "title": "Sensitive data type",
                                    "type": "string",
                                    "description": "The category of sensitive information identified in this reviewed region."
                                },
                                "region": {
                                    "title": "Normalized region",
                                    "type": "object",
                                    "description": "The exact reviewed rectangle, expressed as normalized image coordinates from zero to one.",
                                    "properties": {
                                        "x": {
                                            "title": "Left edge",
                                            "type": "number",
                                            "description": "Normalized horizontal position of the region's left edge.",
                                            "minimum": 0,
                                            "maximum": 1
                                        },
                                        "y": {
                                            "title": "Top edge",
                                            "type": "number",
                                            "description": "Normalized vertical position of the region's top edge.",
                                            "minimum": 0,
                                            "maximum": 1
                                        },
                                        "width": {
                                            "title": "Width",
                                            "type": "number",
                                            "description": "Normalized width of the reviewed region.",
                                            "minimum": 0,
                                            "maximum": 1
                                        },
                                        "height": {
                                            "title": "Height",
                                            "type": "number",
                                            "description": "Normalized height of the reviewed region.",
                                            "minimum": 0,
                                            "maximum": 1
                                        }
                                    },
                                    "required": [
                                        "x",
                                        "y",
                                        "width",
                                        "height"
                                    ],
                                    "additionalProperties": false
                                },
                                "reason": {
                                    "title": "Redaction reason",
                                    "type": "string",
                                    "description": "Why this reviewed region should be hidden for the selected destination."
                                },
                                "visible_hint": {
                                    "title": "Visible hint",
                                    "type": "string",
                                    "description": "A non-sensitive visual hint identifying the reviewed region."
                                }
                            },
                            "required": [
                                "data_type",
                                "region",
                                "reason",
                                "visible_hint"
                            ],
                            "additionalProperties": false
                        }
                    },
                    "expected_input_sha256": {
                        "title": "Reviewed image SHA-256",
                        "pattern": "^[0-9a-f]{64}$",
                        "type": "string",
                        "description": "For apply only: copy input_sha256 from the reviewed preview. Apply fails if the image changed."
                    },
                    "preview_token": {
                        "title": "Signed preview token",
                        "type": "string",
                        "description": "For apply only: copy preview_token from the reviewed preview. It proves a preview was created for this image and destination."
                    },
                    "confirmation": {
                        "title": "Apply confirmation",
                        "maxLength": 32,
                        "type": "string",
                        "description": "For apply only, enter exactly: APPLY REDACTIONS"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
