openapi: 3.2.0 info: title: Hookbase Redaction Policies API version: 1.0.0 description: Official OpenAPI 3.0 specification for the Hookbase webhook relay platform. Generated from the maintained Postman collection. Authenticate with an API key (whr_ prefix) as a Bearer token. contact: name: Hookbase url: https://www.hookbase.app servers: - url: https://api.hookbase.app description: Production security: - bearerAuth: [] tags: - name: Redaction Policies paths: /api/redaction-policies: post: tags: - Redaction Policies summary: Create redaction policy operationId: redaction_policies_create_redaction_policy responses: '200': description: Successful response description: Create a policy that redacts/masks/hashes/removes sensitive fields before storage and/or delivery. requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Required. Policy name. rules: type: array items: type: object description: 'Required. Array of { match, action } (1–50). match.type: path | field_name | regex_value | header; action.type: redact | mask | hash | remove (mask uses keepLastN 0–20).' scope: type: string description: Optional. storage | delivery | both (default both). sourceId: type: string description: Optional. Scope to a single source (omit/null = org-wide). required: - name - rules example: name: Mask card numbers rules: - match: type: path value: data.card.number action: type: mask keepLastN: 4 scope: both sourceId: '{{sourceId}}' get: tags: - Redaction Policies summary: List redaction policies operationId: redaction_policies_list_redaction_policies responses: '200': description: Successful response description: List redaction policies (filter by ?sourceId=). parameters: - name: sourceId in: query required: false schema: type: string description: Filter by source ID or slug. A slug that matches no source returns 404. /api/redaction-policies/{redactionPolicyId}: get: tags: - Redaction Policies summary: Get redaction policy operationId: redaction_policies_get_redaction_policy parameters: - name: redactionPolicyId in: path required: true schema: type: string responses: '200': description: Successful response description: Fetch a single redaction policy. put: tags: - Redaction Policies summary: Update redaction policy operationId: redaction_policies_update_redaction_policy parameters: - name: redactionPolicyId in: path required: true schema: type: string responses: '200': description: Successful response description: Replace a redaction policy (PUT — send the full object). requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Required. Policy name. rules: type: array items: type: object description: 'Required. Array of { match, action } (1–50). match.type: path | field_name | regex_value | header; action.type: redact | mask | hash | remove (mask uses keepLastN 0–20).' scope: type: string description: Required. storage | delivery | both. isActive: type: boolean description: Required. Whether the policy is active. sourceId: type: string description: Optional. Scope to a single source (omit/null = org-wide). required: - name - rules - scope - isActive example: name: Mask card numbers rules: - match: type: path value: data.card.number action: type: mask keepLastN: 4 scope: both isActive: true sourceId: '{{sourceId}}' delete: tags: - Redaction Policies summary: Delete redaction policy operationId: redaction_policies_delete_redaction_policy parameters: - name: redactionPolicyId in: path required: true schema: type: string responses: '200': description: Successful response description: Delete a redaction policy by id. /api/redaction-policies/preview: post: tags: - Redaction Policies summary: Preview redaction policy operationId: redaction_policies_preview_redaction_policy responses: '200': description: Successful response description: Test rules against a sample payload without saving; returns the redacted result and change count. requestBody: required: true content: application/json: schema: type: object properties: rules: type: array items: type: object description: 'Required. Array of { match, action } (1–50). match.type: path | field_name | regex_value | header; action.type: redact | mask | hash | remove (mask uses keepLastN 0–20).' payload: type: object description: Required. Sample payload. headers: type: object description: Optional. Sample headers. required: - rules - payload example: rules: - match: type: path value: data.card.number action: type: mask keepLastN: 4 payload: data: card: number: '4242424242424242' headers: authorization: Bearer secret components: securitySchemes: bearerAuth: type: http scheme: bearer description: Hookbase API key with the whr_ prefix.