AutomationFlowsAI & RAG › Verify Document Authenticity with Claude and Record Proofs on Blockchain

Verify Document Authenticity with Claude and Record Proofs on Blockchain

ByCheng Siong Chin @cschin on n8n.io

This workflow automates document authenticity verification by combining AI-based content analysis with immutable blockchain records. It is built for compliance teams, legal departments, supply chain managers, and regulators who need tamper-proof validation and auditable proof.…

Webhook trigger★★★★☆ complexityAI-powered19 nodesAgentAnthropic ChatOutput Parser StructuredHTTP RequestGmail
AI & RAG Trigger: Webhook Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #12276 — we link there as the canonical source.

This workflow follows the Agent → Gmail recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "36iAFMmM324f3iUv",
  "name": "Anthropic Chat Blockchain Policy Authenticity and Claims Validation Network",
  "tags": [],
  "nodes": [
    {
      "id": "f9fdc7bf-34ff-4bf8-ab98-b43b9be519ba",
      "name": "Document Submission Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1680,
        96
      ],
      "parameters": {
        "path": "document-submission",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "be84594e-5add-459a-b8bf-a4dac2f1ca35",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        -1456,
        96
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "blockchainApiUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Blockchain API endpoint URL__>"
            },
            {
              "id": "id-2",
              "name": "carriersApiUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Insurance carriers API endpoint URL__>"
            },
            {
              "id": "id-3",
              "name": "regulatoryApiUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Tax/regulatory bodies API endpoint URL__>"
            },
            {
              "id": "id-4",
              "name": "alertEmail",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Email address for fraud alerts__>"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "211894b5-3691-4314-9115-1855b2bad369",
      "name": "Extract Document Content",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -1232,
        96
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1.1
    },
    {
      "id": "69127e06-c2c7-4866-9cff-e34ef97b4161",
      "name": "Document Authenticity Validator",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1008,
        96
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "You are a document authenticity validator for an insurance policy and claims validation network.\n\nYour task is to:\n1. Analyze the provided document content for signs of forgery, alteration, or tampering\n2. Check for inconsistencies in formatting, fonts, dates, signatures, and policy details\n3. Verify that policy numbers, claim amounts, and dates follow expected patterns\n4. Identify any suspicious modifications or irregularities\n5. Determine if the document is authentic or potentially forged\n\nReturn your analysis in the structured JSON format with:\n- isAuthentic: boolean (true if authentic, false if forged/altered)\n- confidenceScore: number (0-100)\n- findings: array of specific issues or validations\n- riskLevel: string (low, medium, high, critical)\n- recommendation: string (approve, review, reject)"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3.1
    },
    {
      "id": "7322e8c9-e5b3-43e7-85d6-8d6d0c573cfa",
      "name": "Anthropic Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        -1000,
        320
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-5-20250929",
          "cachedResultName": "Claude Sonnet 4.5"
        },
        "options": {}
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "f64211d9-4582-479b-bfeb-d426d5f905ed",
      "name": "Validation Result Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -872,
        320
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"isAuthentic\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether the document is authentic\"\n    },\n    \"confidenceScore\": {\n      \"type\": \"number\",\n      \"description\": \"Confidence score from 0-100\"\n    },\n    \"findings\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"List of specific findings\"\n    },\n    \"riskLevel\": {\n      \"type\": \"string\",\n      \"enum\": [\"low\", \"medium\", \"high\", \"critical\"],\n      \"description\": \"Risk level assessment\"\n    },\n    \"recommendation\": {\n      \"type\": \"string\",\n      \"enum\": [\"approve\", \"review\", \"reject\"],\n      \"description\": \"Recommended action\"\n    }\n  },\n  \"required\": [\"isAuthentic\", \"confidenceScore\", \"findings\", \"riskLevel\", \"recommendation\"]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "d0df55b8-d87f-4c77-9947-4f11d697b195",
      "name": "Check Document Authenticity",
      "type": "n8n-nodes-base.if",
      "position": [
        -656,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": false,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "boolean",
                "operation": "true"
              },
              "leftValue": "={{ $('Document Authenticity Validator').item.json.isAuthentic }}"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "0068fcda-af4f-4d60-8b2c-303f41f9ae0b",
      "name": "Publish to Blockchain",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -288,
        128
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.blockchainApiUrl }}",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $json.blockchainRecord }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "4b983c8e-20ce-4ba8-b0bb-744fe94aa726",
      "name": "Prepare Blockchain Record",
      "type": "n8n-nodes-base.set",
      "position": [
        -480,
        128
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "documentHash",
              "type": "string",
              "value": "={{ $json.text.substring(0, 64) }}"
            },
            {
              "id": "id-2",
              "name": "timestamp",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            },
            {
              "id": "id-3",
              "name": "validationStatus",
              "type": "string",
              "value": "VERIFIED"
            },
            {
              "id": "id-4",
              "name": "blockchainRecord",
              "type": "object",
              "value": "={{ { policyId: $json.policyId || \"UNKNOWN\", documentHash: $json.documentHash, timestamp: $json.timestamp, status: \"VERIFIED\", confidenceScore: $json.confidenceScore, riskLevel: $json.riskLevel } }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "54ff2f02-2f97-4e26-8728-6d115c34229b",
      "name": "Flag Forged Document",
      "type": "n8n-nodes-base.set",
      "position": [
        96,
        320
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "alertType",
              "type": "string",
              "value": "FORGED_DOCUMENT_DETECTED"
            },
            {
              "id": "id-2",
              "name": "timestamp",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            },
            {
              "id": "id-3",
              "name": "alertMessage",
              "type": "string",
              "value": "=ALERT: Forged or altered document detected. Risk Level: {{ $json.riskLevel }}. Confidence: {{ $json.confidenceScore }}%. Findings: {{ $json.findings.join(\", \") }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "bbe74ff2-4e3e-4392-8fbc-ac02330a786a",
      "name": "Send Proof to Carriers",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -128,
        208
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.carriersApiUrl }}",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ { documentHash: $json.documentHash, timestamp: $json.timestamp, status: \"VERIFIED\", blockchainTxId: $json.transactionId || $json.txId, proofUrl: $json.proofUrl || \"\" } }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "1a59074d-044d-49c4-ae14-d87895edf2d8",
      "name": "Send Proof to Regulatory Bodies",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        128,
        112
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.regulatoryApiUrl }}",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ { documentHash: $json.documentHash, timestamp: $json.timestamp, status: \"VERIFIED\", blockchainTxId: $json.transactionId || $json.txId, proofUrl: $json.proofUrl || \"\", complianceReport: { confidenceScore: $json.confidenceScore, riskLevel: $json.riskLevel, recommendation: $json.recommendation } } }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "49ca0302-71dc-4335-a0ce-4b8ee1ca6788",
      "name": "Send Alert Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        320,
        320
      ],
      "parameters": {
        "sendTo": "={{ $('Workflow Configuration').first().json.alertEmail }}",
        "message": "=<h2>Fraud Alert: Forged Document Detected</h2>\n<p><strong>Alert Type:</strong> {{ $json.alertType }}</p>\n<p><strong>Timestamp:</strong> {{ $json.timestamp }}</p>\n<p><strong>Risk Level:</strong> {{ $json.riskLevel }}</p>\n<p><strong>Confidence Score:</strong> {{ $json.confidenceScore }}%</p>\n<p><strong>Recommendation:</strong> {{ $json.recommendation }}</p>\n<h3>Findings:</h3>\n<ul>\n{{ $json.findings.map(f => \"<li>\" + f + \"</li>\").join(\"\") }}\n</ul>\n<p><strong>Message:</strong> {{ $json.alertMessage }}</p>",
        "options": {},
        "subject": "\ud83d\udea8 FRAUD ALERT: Forged Document Detected"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "be5979e5-9856-44c0-b834-f3f027243389",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -592,
        -352
      ],
      "parameters": {
        "color": 5,
        "width": 576,
        "height": 304,
        "content": "## Prerequisites\nAnthropic API key, blockchain network access and credentials \n## Use Cases\nSupply chain documentation verification for import/export compliance \n## Customization\nAdjust AI prompts for industry-specific authenticity criteria \n## Benefits\nEliminates manual document review time while improving fraud detection accuracy "
      },
      "typeVersion": 1
    },
    {
      "id": "66e785d3-e183-4d87-9b5d-383f0bf17b3a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -976,
        -304
      ],
      "parameters": {
        "width": 352,
        "height": 256,
        "content": "## Setup Steps\n1. Configure webhook endpoint URL for document submission  \n2. Add Anthropic API key to Chat Model node for AI \n3. Set up blockchain network credentials in HTTP nodes for record preparation\n4. Connect Gmail account and specify compliance team email addresses \n5. Customize authenticity thresholds "
      },
      "typeVersion": 1
    },
    {
      "id": "2aa1c5c4-d05f-4a90-9bd8-1990c17dc039",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1728,
        -288
      ],
      "parameters": {
        "width": 720,
        "height": 240,
        "content": "## How It Works\nThis workflow automates document authenticity verification by combining AI-based content analysis with immutable blockchain records. It is built for compliance teams, legal departments, supply chain managers, and regulators who need tamper-proof validation and auditable proof. The solution addresses the challenge of detecting forged or altered documents while producing verifiable evidence that meets legal and regulatory standards. Documents are submitted via webhook and processed through PDF content extraction. Anthropic\u2019s Claude analyzes the content for authenticity signals such as inconsistencies, anomalies, and formatting issues, returning structured authenticity scores.Verified documents trigger blockchain record creation and publication to a distributed ledger, with cryptographic proofs shared automatically with carriers and regulators through HTTP APIs."
      },
      "typeVersion": 1
    },
    {
      "id": "b728f438-a7e3-4268-9552-81f3bbe1562c",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1744,
        -16
      ],
      "parameters": {
        "color": 7,
        "width": 1040,
        "height": 528,
        "content": "## **Document Submission & Analysis**\n**What:** Webhook receives documents; An Anthropic Chat Model with output parser checks authenticity  \n**Why:** AI detects sophisticated forgeries beyond manual review "
      },
      "typeVersion": 1
    },
    {
      "id": "20220ba5-ca03-48fb-9279-61461131d724",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        -16
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 496,
        "content": "## **Blockchain Verification**\n**What:** Authentic documents pass an IF node to a blockchain workflow \n**Why:** Blockchain ensures tamper-proof verification for compliance "
      },
      "typeVersion": 1
    },
    {
      "id": "5389e858-0fda-4a2b-a388-0a1073fc08e3",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -16
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 720,
        "content": "\n## **Suspicious Document Handling**\n**What:** Flagged documents trigger Gmail alerts  \n**Why:** Human review safeguards security and prevents false rejections .\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "8f96cfe0-be85-4ba5-8038-03f5eac86139",
  "connections": {
    "Anthropic Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Document Authenticity Validator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Flag Forged Document": {
      "main": [
        [
          {
            "node": "Send Alert Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to Blockchain": {
      "main": [
        [
          {
            "node": "Send Proof to Carriers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Proof to Carriers": {
      "main": [
        [
          {
            "node": "Send Proof to Regulatory Bodies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Extract Document Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Document Content": {
      "main": [
        [
          {
            "node": "Document Authenticity Validator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validation Result Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Document Authenticity Validator",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Blockchain Record": {
      "main": [
        [
          {
            "node": "Publish to Blockchain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Document Authenticity": {
      "main": [
        [
          {
            "node": "Prepare Blockchain Record",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Flag Forged Document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Document Submission Webhook": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Document Authenticity Validator": {
      "main": [
        [
          {
            "node": "Check Document Authenticity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automates document authenticity verification by combining AI-based content analysis with immutable blockchain records. It is built for compliance teams, legal departments, supply chain managers, and regulators who need tamper-proof validation and auditable proof.…

Source: https://n8n.io/workflows/12276/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Triggers via webhook connected to your CRM Maps all the fields needed for the proposal Transforms customer data and transcription into a formatted output using an AI Agent Generates a custom PDF propo

Agent, Anthropic Chat, N8N Nodes Pdforge +3
AI & RAG

⏺ 🚀 How it works

Agent, Anthropic Chat, Output Parser Structured +6
AI & RAG

Fully automates your service order pipeline from incoming booking to supplier confirmation — with built-in SLA enforcement and automatic escalation if a supplier goes silent. 📥 Receives orders via web

HTTP Request, Google Sheets, Agent +4
AI & RAG

Tired of grinding out YouTube content? This n8n workflow turns AI into your personal video factory—creating engaging, faceless shorts on autopilot. Perfect for creators, marketers, or side-hustlers lo

HTTP Request, Google Drive, Google Sheets +6
AI & RAG

Faceless YouTube Generator. Uses httpRequest, limit, googleDrive, googleSheets. Webhook trigger; 49 nodes.

HTTP Request, Google Drive, Google Sheets +7