Missing required fields or unclear approval status can delay content teams before publication. This workflow template streamlines the pre-approval of content assets in marketing and media processes. Structured asset lists are received via webhook and checked for mandatory fields (title, channel, owner) and approval status. The response clearly indicates which assets are ready for publishing and which are blocked, including reasons. Teams save time on manual reviews and receive immediate, transparent feedback for their content pipelines.
When marketing, media, or content teams need to review and approve large batches of social media posts, videos, or images, the 'Content Approval Gate' workflow increases efficiency. Asset lists in JSON format are accepted via a POST webhook. Within the code node, each asset is checked for the required fields 'title', 'channel', 'owner', as well as the flags 'rightsConfirmed' and 'approved'. The result is a structured JSON response listing all approved and blocked assets with explanations. This enables fast, automated pre-checks and integrates seamlessly into existing content workflows. To prevent unauthorized access, webhook authentication must be enabled separately in n8n. Validation rules can be customized in the code node as needed. Execution data storage and deletion should be configured in n8n in accordance with data protection requirements. The workflow is ready to use immediately, requires no external integrations, and is flexible for future extensions.
AI-generated image
Installation
1. Import the workflow into n8n.
2. Select the Webhook node and start the test listener.
3. Copy the displayed test URL and use it for test requests.
4. After successful testing, activate/publish the workflow and use the production URL from the Webhook node.
5. Set up webhook authentication in n8n to prevent unauthorized access.
6. Optionally: adjust validation rules in the code node (mandatory fields, approval flags).
7. Configure execution data storage and deletion in n8n according to data protection requirements.
Usage
1. Send a POST request with Content-Type application/json to the webhook URL. Example of a valid request:
```json
{
"assets": [
{"title": "Post 1", "channel": "Instagram", "owner": "Max", "rightsConfirmed": true, "approved": true},
{"title": "", "channel": "Facebook", "owner": "", "rightsConfirmed": false, "approved": false}
]
}
```
Expected response:
```json
{
"status": "blocked",
"ready": [
{"index":0,"title":"Post 1","channel":"Instagram","owner":"Max","rightsConfirmed":true,"approved":true,"ready":true,"blockers":[]}
],
"blocked": [
{"index":1,"title":"","channel":"Facebook","owner":"","rightsConfirmed":false,"approved":false,"ready":false,"blockers":["title","owner","rightsConfirmed","approved"]}
],
"total": 2
}
```
HTTP status: 200
Error case (e.g., missing or empty assets array):
```json
{
"status": "error",
"message": "assets muss ein nicht-leeres Array sein."
}
```
HTTP status: 200
2. The response includes the checked fields for each asset and, if applicable, a list of blockers.
3. Validation rules can be adjusted in the code node.
4. Webhook authentication and data protection must be configured in n8n before production use.
5. Execution data can be stored in n8n; retention and access should be configured accordingly.
Required connections and APIs
API connections
No saved API credentials were detected in the workflow JSON. Still check webhooks, target systems, credentials, and data protection before activation.
Nodes
WebhookCodeRespond to Webhook
Isolated functional test passed
Optional isolated functional test
The isolated data flow was tested without external services or credentials.
✓ Standard case with complete dataChecks the complete standard flow with valid sample data.Isolated functional test passed✓ Variation or boundary caseChecks a valid variation or an important boundary case.Isolated functional test passed✓ Additional processing ruleChecks this workflow's additional business processing rule.Isolated functional test passed✓ Invalid or incomplete inputChecks that invalid or incomplete data is rejected safely.Isolated functional test passed✓ Empty inputChecks that an empty request receives a controlled response.Isolated functional test passed