Skip to content
cccskills
FreePublished on GitHub

extract-terms-and-generate-summary

Extract key clauses from terms and conditions documents, then generate a plain-language PDF summary for client review.

The English summary is being prepared. Showing the original description.

Works withn8n
See how to install

Files included (1)

  • SKILL.md21.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Extract Terms and Generate a Simplified Summary

Legal agencies and compliance teams use this pipeline to process vendor or partner terms — extracting key clauses like liability limits, termination conditions, and data handling provisions, then generating a plain-language summary for non-legal stakeholders.

APIs Used

Document Extraction (1 credit per page), Document Generation (1 credits/request)

Prerequisites

You need an Iteration Layer API key. Get one at platform.iterationlayer.com during the 7-day trial.

For full integration guidance (SDKs, auth, MCP, error handling), see the Iteration Layer Integration Guide.

Implementation

# Step 1: Extract key clauses from T&C document
EXTRACTION=$(curl -s -X POST https://api.iterationlayer.com/document-extraction/v1/extract \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "files": [
      {
        "type": "url",
        "name": "vendor-terms-cloudpeak.pdf",
        "url": "https://example.com/contracts/vendor-terms-cloudpeak-2026.pdf"
      }
    ],
    "schema": {
      "fields": [
        {
          "name": "document_title",
          "type": "TEXT",
          "description": "Title of the terms document"
        },
        {
          "name": "effective_date",
          "type": "DATE",
          "description": "Effective date of the terms"
        },
        {
          "name": "parties",
          "type": "TEXT",
          "description": "Parties to the agreement"
        },
        {
          "name": "termination_clause",
          "type": "TEXTAREA",
          "description": "Termination conditions and notice period"
        },
        {
          "name": "liability_limitation",
          "type": "TEXTAREA",
          "description": "Liability limitation or cap"
        },
        {
          "name": "indemnification",
          "type": "TEXTAREA",
          "description": "Indemnification obligations"
        },
        {
          "name": "data_handling",
          "type": "TEXTAREA",
          "description": "Data processing and privacy provisions"
        },
        {
          "name": "governing_law",
          "type": "TEXT",
          "description": "Governing law and jurisdiction"
        },
        {
          "name": "payment_terms",
          "type": "TEXT",
          "description": "Payment terms and conditions"
        },
        {
          "name": "auto_renewal",
          "type": "BOOLEAN",
          "description": "Whether the agreement auto-renews"
        }
      ]
    }
  }')

# Step 2: Generate a plain-language summary PDF
curl -X POST https://api.iterationlayer.com/document-generation/v1/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "format": "pdf",
    "document": {
      "metadata": {
        "title": "T&C Summary — CloudPeak SaaS Agreement",
        "author": "Whitmore Legal Advisors"
      },
      "page": {
        "size": {
          "preset": "A4"
        },
        "margins": {
          "top_in_pt": 54,
          "right_in_pt": 54,
          "bottom_in_pt": 54,
          "left_in_pt": 54
        }
      },
      "content": [
        {
          "type": "headline",
          "level": "h1",
          "text": "Terms & Conditions Summary"
        },
        {
          "type": "headline",
          "level": "h2",
          "text": "CloudPeak SaaS Master Services Agreement"
        },
        {
          "type": "paragraph",
          "runs": [
            {
              "text": "Effective: ",
              "font_weight": "bold"
            },
            {
              "text": "April 1, 2026"
            }
          ]
        },
        {
          "type": "separator"
        },
        {
          "type": "headline",
          "level": "h3",
          "text": "Termination"
        },
        {
          "type": "paragraph",
          "runs": [
            {
              "text": "Either party may terminate with 90 days written notice. CloudPeak may terminate immediately for non-payment after a 30-day cure period."
            }
          ]
        },
        {
          "type": "headline",
          "level": "h3",
          "text": "Liability"
        },
        {
          "type": "paragraph",
          "runs": [
            {
              "text": "Total liability is capped at 12 months of fees paid. Neither party is liable for indirect, consequential, or punitive damages."
            }
          ]
        },
        {
          "type": "headline",
          "level": "h3",
          "text": "Data Handling"
        },
        {
          "type": "paragraph",
          "runs": [
            {
              "text": "CloudPeak processes data as a data processor under GDPR. Data is stored in EU-based data centers. A Data Processing Agreement is incorporated by reference."
            }
          ]
        },
        {
          "type": "headline",
          "level": "h3",
          "text": "Governing Law"
        },
        {
          "type": "paragraph",
          "runs": [
            {
              "text": "Governed by the laws of the Netherlands. Disputes resolved in the courts of Amsterdam."
            }
          ]
        },
        {
          "type": "headline",
          "level": "h3",
          "text": "Payment & Renewal"
        },
        {
          "type": "paragraph",
          "runs": [
            {
              "text": "Net 30 payment terms. The agreement auto-renews annually unless either party provides 60 days notice before the renewal date."
            }
          ]
        },
        {
          "type": "separator"
        },
        {
          "type": "paragraph",
          "runs": [
            {
              "text": "This summary is for informational purposes only and does not constitute legal advice. Prepared by Whitmore Legal Advisors."
            }
          ]
        }
      ]
    }
  }'
import { IterationLayer } from "iterationlayer";
const client = new IterationLayer({ apiKey: "YOUR_API_KEY" });

// Step 1: Extract key clauses from T&C document
const extraction = await client.extractDocument({
  files: [
    {
      type: "url",
      name: "vendor-terms-cloudpeak.pdf",
      url: "https://example.com/contracts/vendor-terms-cloudpeak-2026.pdf",
    },
  ],
  schema: {
    fields: [
      { name: "document_title", type: "TEXT", description: "Title of the terms document" },
      { name: "effective_date", type: "DATE", description: "Effective date of the terms" },
      { name: "parties", type: "TEXT", description: "Parties to the agreement" },
      { name: "termination_clause", type: "TEXTAREA", description: "Termination conditions and notice period" },
      { name: "liability_limitation", type: "TEXTAREA", description: "Liability limitation or cap" },
      { name: "indemnification", type: "TEXTAREA", description: "Indemnification obligations" },
      { name: "data_handling", type: "TEXTAREA", description: "Data processing and privacy provisions" },
      { name: "governing_law", type: "TEXT", description: "Governing law and jurisdiction" },
      { name: "payment_terms", type: "TEXT", description: "Payment terms and conditions" },
      { name: "auto_renewal", type: "BOOLEAN", description: "Whether the agreement auto-renews" },
    ],
  },
});

const documentTitle = String(extraction["document_title"].value);
const effectiveDate = String(extraction["effective_date"].value);
const terminationClause = String(extraction["termination_clause"].value);
const liabilityLimitation = String(extraction["liability_limitation"].value);
const dataHandling = String(extraction["data_handling"].value);
const governingLaw = String(extraction["governing_law"].value);
const paymentTerms = String(extraction["payment_terms"].value);
const autoRenewal = Boolean(extraction["auto_renewal"].value);

// Step 2: Generate a plain-language summary PDF
const summary = await client.generateDocument({
  format: "pdf",
  document: {
    metadata: { title: `T&C Summary — ${documentTitle}`, author: "Whitmore Legal Advisors" },
    page: {
      size: { preset: "A4" },
      margins: { top_in_pt: 54, right_in_pt: 54, bottom_in_pt: 54, left_in_pt: 54 },
    },
    content: [
      { type: "headline", level: "h1", text: "Terms & Conditions Summary" },
      { type: "headline", level: "h2", text: documentTitle },
      { type: "paragraph", runs: [{ text: "Effective: ", font_weight: "bold" }, { text: effectiveDate }] },
      { type: "separator" },
      { type: "headline", level: "h3", text: "Termination" },
      { type: "paragraph", runs: [{ text: terminationClause }] },
      { type: "headline", level: "h3", text: "Liability" },
      { type: "paragraph", runs: [{ text: liabilityLimitation }] },
      { type: "headline", level: "h3", text: "Data Handling" },
      { type: "paragraph", runs: [{ text: dataHandling }] },
      { type: "headline", level: "h3", text: "Governing Law" },
      { type: "paragraph", runs: [{ text: governingLaw }] },
      { type: "headline", level: "h3", text: "Payment & Renewal" },
      { type: "paragraph", runs: [{ text: `${paymentTerms}. Auto-renewal: ${autoRenewal ? "Yes" : "No"}.` }] },
      { type: "separator" },
      { type: "paragraph", runs: [{ text: "This summary is for informational purposes only. Prepared by Whitmore Legal Advisors." }] },
    ],
  },
});
from iterationlayer import IterationLayer
client = IterationLayer(api_key="YOUR_API_KEY")

# Step 1: Extract key clauses from T&C document
extraction = client.extract_document(
    files=[{"type": "url", "name": "vendor-terms-cloudpeak.pdf", "url": "https://example.com/contracts/vendor-terms-cloudpeak-2026.pdf"}],
    schema={
        "fields": [
            {"name": "document_title", "type": "TEXT", "description": "Title of the terms document"},
            {"name": "effective_date", "type": "DATE", "description": "Effective date of the terms"},
            {"name": "parties", "type": "TEXT", "description": "Parties to the agreement"},
            {"name": "termination_clause", "type": "TEXTAREA", "description": "Termination conditions and notice period"},
            {"name": "liability_limitation", "type": "TEXTAREA", "description": "Liability limitation or cap"},
            {"name": "indemnification", "type": "TEXTAREA", "description": "Indemnification obligations"},
            {"name": "data_handling", "type": "TEXTAREA", "description": "Data processing and privacy provisions"},
            {"name": "governing_law", "type": "TEXT", "description": "Governing law and jurisdiction"},
            {"name": "payment_terms", "type": "TEXT", "description": "Payment terms and conditions"},
            {"name": "auto_renewal", "type": "BOOLEAN", "description": "Whether the agreement auto-renews"},
        ]
    },
)

document_title = extraction["document_title"]["value"]
effective_date = extraction["effective_date"]["value"]
termination_clause = extraction["termination_clause"]["value"]
liability_limitation = extraction["liability_limitation"]["value"]
data_handling = extraction["data_handling"]["value"]
governing_law = extraction["governing_law"]["value"]
payment_terms = extraction["payment_terms"]["value"]
auto_renewal = extraction["auto_renewal"]["value"]

# Step 2: Generate a plain-language summary PDF
summary = client.generate_document(
    format="pdf",
    document={
        "metadata": {"title": f"T&C Summary — {document_title}", "author": "Whitmore Legal Advisors"},
        "page": {"size": {"preset": "A4"}, "margins": {"top_in_pt": 54, "right_in_pt": 54, "bottom_in_pt": 54, "left_in_pt": 54}},
        "content": [
            {"type": "headline", "level": "h1", "text": "Terms & Conditions Summary"},
            {"type": "headline", "level": "h2", "text": document_title},
            {"type": "paragraph", "runs": [{"text": "Effective: ", "font_weight": "bold"}, {"text": effective_date}]},
            {"type": "separator"},
            {"type": "headline", "level": "h3", "text": "Termination"},
            {"type": "paragraph", "runs": [{"text": termination_clause}]},
            {"type": "headline", "level": "h3", "text": "Liability"},
            {"type": "paragraph", "runs": [{"text": liability_limitation}]},
            {"type": "headline", "level": "h3", "text": "Data Handling"},
            {"type": "paragraph", "runs": [{"text": data_handling}]},
            {"type": "headline", "level": "h3", "text": "Governing Law"},
            {"type": "paragraph", "runs": [{"text": governing_law}]},
            {"type": "headline", "level": "h3", "text": "Payment & Renewal"},
            {"type": "paragraph", "runs": [{"text": f"{payment_terms}. Auto-renewal: {'Yes' if auto_renewal else 'No'}."}]},
            {"type": "separator"},
            {"type": "paragraph", "runs": [{"text": "This summary is for informational purposes only. Prepared by Whitmore Legal Advisors."}]},
        ],
    },
)
package main

import il "github.com/iterationlayer/sdk-go"

func main() {
	client := il.NewClient("YOUR_API_KEY")

	result, err := client.ExtractDocument(il.ExtractDocumentRequest{
		Files: []il.FileInput{
			il.FileInput{
				Type: "url",
				Name: "vendor-terms-cloudpeak.pdf",
				Url: "https://example.com/contracts/vendor-terms-cloudpeak-2026.pdf",
			},
		},
		Schema: il.ExtractionSchema{
			Fields: []any{
				il.TextFieldConfig{
					Name: "document_title",
					Type: "TEXT",
					Description: "Title of the terms document",
				},
				il.DateFieldConfig{
					Name: "effective_date",
					Type: "DATE",
					Description: "Effective date of the terms",
				},
				il.TextFieldConfig{
					Name: "parties",
					Type: "TEXT",
					Description: "Parties to the agreement",
				},
				il.TextareaFieldConfig{
					Name: "termination_clause",
					Type: "TEXTAREA",
					Description: "Termination conditions and notice period",
				},
				il.TextareaFieldConfig{
					Name: "liability_limitation",
					Type: "TEXTAREA",
					Description: "Liability limitation or cap",
				},
				il.TextareaFieldConfig{
					Name: "indemnification",
					Type: "TEXTAREA",
					Description: "Indemnification obligations",
				},
				il.TextareaFieldConfig{
					Name: "data_handling",
					Type: "TEXTAREA",
					Description: "Data processing and privacy provisions",
				},
				il.TextFieldConfig{
					Name: "governing_law",
					Type: "TEXT",
					Description: "Governing law and jurisdiction",
				},
				il.TextFieldConfig{
					Name: "payment_terms",
					Type: "TEXT",
					Description: "Payment terms and conditions",
				},
				il.BooleanFieldConfig{
					Name: "auto_renewal",
					Type: "BOOLEAN",
					Description: "Whether the agreement auto-renews",
				},
			},
		},
	})
	if err != nil {
		panic(err)
	}

	_ = result
}
{
  "name": "Extract terms and generate summary in Iteration Layer",
  "nodes": [
    {
      "parameters": {
        "content": "## Extract Terms and Generate a Simplified Summary\n\nLegal agencies and compliance teams use this pipeline to process vendor or partner terms — extracting key clauses and generating a plain-language summary for non-legal stakeholders.\n\n**Note:** This workflow uses the Iteration Layer community node (`n8n-nodes-iterationlayer`). Install it via Settings > Community Nodes on self-hosted n8n, or add it directly on n8n Cloud with Verified Community Nodes enabled.",
        "height": 280,
        "width": 500,
        "color": 2
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [200, 40],
      "id": "a3b4c5d6-e7f8-9012-abcd-012345678901",
      "name": "Overview"
    },
    {
      "parameters": {
        "content": "### Step 1: Extract Terms\nResource: **Document Extraction**\n\nConfigure the Document Extraction parameters below, then connect your credentials.",
        "height": 160,
        "width": 300,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [475, 100],
      "id": "a3b4c5d6-e7f8-9012-abcd-012345678902",
      "name": "Step 1 Note"
    },
    {
      "parameters": {
        "content": "### Step 2: Generate Summary PDF\nResource: **Document Generation**\n\nConfigure the Document Generation parameters below, then connect your credentials.",
        "height": 160,
        "width": 300,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [725, 100],
      "id": "a3b4c5d6-e7f8-9012-abcd-012345678903",
      "name": "Step 2 Note"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [250, 300],
      "id": "a3b4c5d6-e7f8-9012-abcd-012345678904",
      "name": "Manual Trigger"
    },
    {
      "parameters": {
        "resource": "documentExtraction",
        "schemaInputMode": "rawJson",
        "schemaJson": "{\"fields\":[{\"name\":\"document_title\",\"type\":\"TEXT\",\"description\":\"Title of the terms document\"},{\"name\":\"effective_date\",\"type\":\"DATE\",\"description\":\"Effective date\"},{\"name\":\"termination_clause\",\"type\":\"TEXTAREA\",\"description\":\"Termination conditions\"},{\"name\":\"liability_limitation\",\"type\":\"TEXTAREA\",\"description\":\"Liability limitation\"},{\"name\":\"data_handling\",\"type\":\"TEXTAREA\",\"description\":\"Data processing provisions\"},{\"name\":\"governing_law\",\"type\":\"TEXT\",\"description\":\"Governing law\"},{\"name\":\"payment_terms\",\"type\":\"TEXT\",\"description\":\"Payment terms\"},{\"name\":\"auto_renewal\",\"type\":\"BOOLEAN\",\"description\":\"Auto-renewal\"}]}",
        "files": {
          "fileValues": [
            {
              "fileInputMode": "url",
              "fileName": "vendor-terms-cloudpeak.pdf",
              "fileUrl": "https://example.com/contracts/vendor-terms-cloudpeak-2026.pdf"
            }
          ]
        }
      },
      "type": "n8n-nodes-iterationlayer.iterationLayer",
      "typeVersion": 1,
      "position": [500, 300],
      "id": "a3b4c5d6-e7f8-9012-abcd-012345678905",
      "name": "Extract Terms",
      "credentials": {
        "iterationLayerApi": {
          "id": "1",
          "name": "Iteration Layer API"
        }
      }
    },
    {
      "parameters": {
        "resource": "documentGeneration",
        "format": "pdf",
        "documentJson": "{\n  \"metadata\": { \"title\": \"T&C Summary — {{ $json.document_title }}\", \"author\": \"Whitmore Legal Advisors\" },\n  \"page\": { \"size\": { \"preset\": \"A4\" }, \"margins\": { \"top_in_pt\": 54, \"right_in_pt\": 54, \"bottom_in_pt\": 54, \"left_in_pt\": 54 } },\n  \"content\": [\n    { \"type\": \"headline\", \"level\": \"h1\", \"text\": \"Terms & Conditions Summary\" },\n    { \"type\": \"headline\", \"level\": \"h2\", \"text\": \"{{ $json.document_title }}\" },\n    { \"type\": \"separator\" },\n    { \"type\": \"headline\", \"level\": \"h3\", \"text\": \"Termination\" },\n    { \"type\": \"paragraph\", \"runs\": [{ \"text\": \"{{ $json.termination_clause }}\" }] },\n    { \"type\": \"headline\", \"level\": \"h3\", \"text\": \"Liability\" },\n    { \"type\": \"paragraph\", \"runs\": [{ \"text\": \"{{ $json.liability_limitation }}\" }] },\n    { \"type\": \"headline\", \"level\": \"h3\", \"text\": \"Data Handling\" },\n    { \"type\": \"paragraph\", \"runs\": [{ \"text\": \"{{ $json.data_handling }}\" }] },\n    { \"type\": \"headline\", \"level\": \"h3\", \"text\": \"Governing Law\" },\n    { \"type\": \"paragraph\", \"runs\": [{ \"text\": \"{{ $json.governing_law }}\" }] },\n    { \"type\": \"separator\" },\n    { \"type\": \"paragraph\", \"runs\": [{ \"text\": \"Prepared by Whitmore Legal Advisors.\" }] }\n  ]\n}"
      },
      "type": "n8n-nodes-iterationlayer.iterationLayer",
      "typeVersion": 1,
      "position": [750, 300],
      "id": "a3b4c5d6-e7f8-9012-abcd-012345678906",
      "name": "Generate Summary PDF",
      "credentials": {
        "iterationLayerApi": {
          "id": "1",
          "name": "Iteration Layer API"
        }
      }
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Extract Terms",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Terms": {
      "main": [
        [
          {
            "node": "Generate Summary PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}
Extract key clauses from the terms document at [file URL], then generate a plain-language summary. Use the extract_document tool with these fields:

- document_title (TEXT): Title of the terms document
- effective_date (DATE): Effective date of the terms
- parties (TEXT): Parties to the agreement
- termination_clause (TEXTAREA): Termination conditions and notice period
- liability_limitation (TEXTAREA): Liability limitation or cap
- indemnification (TEXTAREA): Indemnification obligations
- data_handling (TEXTAREA): Data processing and privacy provisions
- governing_law (TEXT): Governing law and jurisdiction
- payment_terms (TEXT): Payment terms and conditions
- auto_renewal (BOOLEAN): Whether the agreement auto-renews

Then use the generate_document tool to create a PDF summary with each clause explained in plain language, organized under clear headings.

Response

{
  "success": true,
  "data": {
    "buffer": "JVBERi0xLjQ...",
    "mime_type": "application/pdf"
  }
}

Links

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Resize, sharpen, and compress an image to fit email platform size limits in a single pipeline.

The English summary is being prepared. Showing the original description.

iterationlayer/skills4Updated Jun 9, 2026

Compress an image to fit within a specific file size in bytes using quality-first compression.

The English summary is being prepared. Showing the original description.

iterationlayer/skills4Updated Jun 9, 2026

Convert a contract PDF to clean markdown for clause extraction or LLM analysis.

The English summary is being prepared. Showing the original description.

iterationlayer/skills4Updated Jun 9, 2026

Convert external documents — specs, contracts, reports — to markdown for knowledge base ingestion.

The English summary is being prepared. Showing the original description.

iterationlayer/skills4Updated Jun 9, 2026

Convert a document to clean markdown suitable for chunking and embedding in a RAG pipeline.

The English summary is being prepared. Showing the original description.

iterationlayer/skills4Updated Jun 9, 2026

Convert an image between PNG, JPEG, and WebP formats with quality control for web optimization.

The English summary is being prepared. Showing the original description.

iterationlayer/skills4Updated Jun 9, 2026

See all skills by iterationlayer

Report a problem with this skill