{"_id":"@blackswampai/n8n-nodes-twentycrm","_rev":"5-e62ca3df92753fefbec312abc5c46e7f","name":"@blackswampai/n8n-nodes-twentycrm","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@blackswampai/n8n-nodes-twentycrm","version":"0.1.0","keywords":["n8n-community-node-package","n8n","twenty","twenty-crm","crm"],"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"license":"MIT","_id":"@blackswampai/n8n-nodes-twentycrm@0.1.0","maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"homepage":"https://github.com/BlackSwampAI/n8n-nodes-twentycrm#readme","bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-twentycrm/issues"},"n8n":{"nodes":["dist/nodes/Twenty/Twenty.node.js","dist/nodes/Twenty/TwentyTrigger.node.js"],"strict":true,"credentials":["dist/credentials/TwentyApi.credentials.js","dist/credentials/TwentyWebhookApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"e2a118d428a9e4d9c2876b670f6c0d7148dd8944","tarball":"https://registry.npmjs.org/@blackswampai/n8n-nodes-twentycrm/-/n8n-nodes-twentycrm-0.1.0.tgz","fileCount":46,"integrity":"sha512-TTNBS0pg3tKQata/rNPRlxAeP17/sLyCaKqKaDILYYM9DfkSD5eFfc3vdgZWw++wqA4LAiVTxQvGj4/uy+aY8Q==","signatures":[{"sig":"MEUCIQDYRkrmbRUmtkh1v42kojPu/2T/V9f6MAfHskeLZc/tYQIgStyOmlMU0rfri6u0XIMH5kcUZci3CjjBPgE2CjPLsYg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackswampai%2fn8n-nodes-twentycrm@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":181924},"engines":{"node":">=22.22.0"},"gitHead":"817613c6342cc6c800a3c5a2535d5fabfa7d7d7f","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"node scripts/clean.mjs && n8n-node build","format":"prettier --write . --ignore-path .gitignore --ignore-path .prettierignore","release":"n8n-node release","lint:fix":"n8n-node lint --fix","test:load":"npm run smoke:load","typecheck":"tsc --noEmit","smoke:load":"node scripts/node-load-smoke.mjs","build:watch":"tsc --watch","twenty:logs":"node scripts/twenty-harness.mjs logs","twenty:stop":"node scripts/twenty-harness.mjs stop","twenty:wait":"node scripts/twenty-harness.mjs wait","format:check":"prettier --check . --ignore-path .gitignore --ignore-path .prettierignore","twenty:clean":"node scripts/twenty-harness.mjs clean","twenty:start":"node scripts/twenty-harness.mjs start","package:check":"node scripts/package-check.mjs","release:check":"node scripts/release-check.mjs","smoke:install":"node scripts/package-install-smoke.mjs","prepublishOnly":"n8n-node prerelease","test:integration":"npm run build && node scripts/twenty-live-test.mjs","test:webhook-bridge":"node scripts/twenty-webhook-qualify.mjs"},"_npmUser":{"name":"christopherjnelson","email":"root@chris.guru"},"repository":{"url":"git+https://github.com/BlackSwampAI/n8n-nodes-twentycrm.git","type":"git"},"_npmVersion":"11.17.0","description":"n8n community integration for Twenty CRM","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"4.1.11","prettier":"3.6.2","release-it":"20.2.0","typescript":"5.9.2","@n8n/node-cli":"0.42.2"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-twentycrm_0.1.0_1787436220619_0.2502190031106635","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@blackswampai/n8n-nodes-twentycrm","version":"0.1.1","keywords":["n8n-community-node-package","n8n","twenty","twenty-crm","crm"],"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"license":"MIT","_id":"@blackswampai/n8n-nodes-twentycrm@0.1.1","maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"homepage":"https://blackswampai.com/n8n-nodes/twenty-crm/","bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-twentycrm/issues"},"n8n":{"nodes":["dist/nodes/Twenty/Twenty.node.js","dist/nodes/Twenty/TwentyTrigger.node.js"],"strict":true,"credentials":["dist/credentials/TwentyApi.credentials.js","dist/credentials/TwentyWebhookApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"2785f5c4cb2dd29adfedba23416ef4bddd2d86ad","tarball":"https://registry.npmjs.org/@blackswampai/n8n-nodes-twentycrm/-/n8n-nodes-twentycrm-0.1.1.tgz","fileCount":46,"integrity":"sha512-E34npq+RS/8uM3Ro5fiiO1gqzyYh1lQvxbCDVE+YvcZ3+ltoFN6GAVik2MPpyz/TAyy8hlSIYuglBnW576tw3A==","signatures":[{"sig":"MEQCICj4fGwRoj95yuhsI+i5WQK2SNnzarSbQAudrgg9e+//AiA2CnZrigaQh5S1v1tNiQ2OikIQeG4zcYf0AWODay8bQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackswampai%2fn8n-nodes-twentycrm@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":183239},"engines":{"node":">=22.22.0"},"gitHead":"e89cd29b0eaf6f144e3c575d1d19ff4263ce85f5","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"node scripts/clean.mjs && n8n-node build","format":"prettier --write . --ignore-path .gitignore --ignore-path .prettierignore","release":"n8n-node release","lint:fix":"n8n-node lint --fix","test:load":"npm run smoke:load","typecheck":"tsc --noEmit","smoke:load":"node scripts/node-load-smoke.mjs","build:watch":"tsc --watch","twenty:logs":"node scripts/twenty-harness.mjs logs","twenty:stop":"node scripts/twenty-harness.mjs stop","twenty:wait":"node scripts/twenty-harness.mjs wait","format:check":"prettier --check . --ignore-path .gitignore --ignore-path .prettierignore","twenty:clean":"node scripts/twenty-harness.mjs clean","twenty:start":"node scripts/twenty-harness.mjs start","package:check":"node scripts/package-check.mjs","release:check":"node scripts/release-check.mjs","smoke:install":"node scripts/package-install-smoke.mjs","prepublishOnly":"n8n-node prerelease","test:integration":"npm run build && node scripts/twenty-live-test.mjs","test:webhook-bridge":"node scripts/twenty-webhook-qualify.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74a25147-c6e0-43cc-b818-ec81802f13d2"}},"repository":{"url":"git+https://github.com/BlackSwampAI/n8n-nodes-twentycrm.git","type":"git"},"_npmVersion":"11.17.0","description":"n8n community integration for Twenty CRM","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"4.1.11","prettier":"3.6.2","release-it":"20.2.0","typescript":"5.9.2","@n8n/node-cli":"0.42.2"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-twentycrm_0.1.1_1787437286803_0.611391659080414","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@blackswampai/n8n-nodes-twentycrm","version":"0.1.2","keywords":["n8n-community-node-package","n8n","twenty","twenty-crm","crm"],"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"license":"MIT","_id":"@blackswampai/n8n-nodes-twentycrm@0.1.2","maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"homepage":"https://blackswampai.com/n8n-nodes/twenty-crm/","bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-twentycrm/issues"},"n8n":{"nodes":["dist/nodes/Twenty/Twenty.node.js","dist/nodes/Twenty/TwentyTrigger.node.js"],"strict":true,"credentials":["dist/credentials/TwentyApi.credentials.js","dist/credentials/TwentyWebhookApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"e58d59cfa17f149fa2057522344f8266058d9e6e","tarball":"https://registry.npmjs.org/@blackswampai/n8n-nodes-twentycrm/-/n8n-nodes-twentycrm-0.1.2.tgz","fileCount":46,"integrity":"sha512-/cVVrRM6wjZTNBBf2MTwiIbDR9/ik/A3D4pMRrDQnRYNbMqaY/Ufwhmvuy1bMgeLrps3DAYnzlR69VFWEVlWbQ==","signatures":[{"sig":"MEUCIQDsfqyAsjF/A5ahLbf3VC/Uo3dr9oaX1L3zNvnerVZGuwIgMG6cyLWTn+58nBQso6XF9ePHFAzCMUhOrsNzqI+sRuE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackswampai%2fn8n-nodes-twentycrm@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193879},"engines":{"node":">=22.22.0"},"gitHead":"76a074e862abfb18639601e09fe6fd40bb133374","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"node scripts/clean.mjs && n8n-node build","format":"prettier --write . --ignore-path .gitignore --ignore-path .prettierignore","release":"n8n-node release","lint:fix":"n8n-node lint --fix","test:load":"npm run smoke:load","typecheck":"tsc --noEmit","smoke:load":"node scripts/node-load-smoke.mjs","build:watch":"tsc --watch","twenty:logs":"node scripts/twenty-harness.mjs logs","twenty:stop":"node scripts/twenty-harness.mjs stop","twenty:wait":"node scripts/twenty-harness.mjs wait","format:check":"prettier --check . --ignore-path .gitignore --ignore-path .prettierignore","twenty:clean":"node scripts/twenty-harness.mjs clean","twenty:start":"node scripts/twenty-harness.mjs start","package:check":"node scripts/package-check.mjs","release:check":"node scripts/release-check.mjs","smoke:install":"node scripts/package-install-smoke.mjs","prepublishOnly":"n8n-node prerelease","test:integration":"npm run build && node scripts/twenty-live-test.mjs","test:webhook-bridge":"node scripts/twenty-webhook-qualify.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74a25147-c6e0-43cc-b818-ec81802f13d2"}},"repository":{"url":"git+https://github.com/BlackSwampAI/n8n-nodes-twentycrm.git","type":"git"},"_npmVersion":"11.17.0","description":"n8n community integration for Twenty CRM","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"4.1.11","prettier":"3.6.2","release-it":"20.2.0","typescript":"5.9.2","@n8n/node-cli":"0.42.2"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-twentycrm_0.1.2_1787792447791_0.2571348831998186","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@blackswampai/n8n-nodes-twentycrm","version":"0.1.3","keywords":["n8n-community-node-package","n8n","twenty","twenty-crm","crm"],"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"license":"MIT","_id":"@blackswampai/n8n-nodes-twentycrm@0.1.3","maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"homepage":"https://blackswampai.com/n8n-nodes/twenty-crm/","bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-twentycrm/issues"},"n8n":{"nodes":["dist/nodes/Twenty/Twenty.node.js","dist/nodes/Twenty/TwentyTrigger.node.js"],"strict":true,"credentials":["dist/credentials/TwentyApi.credentials.js","dist/credentials/TwentyWebhookApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"1889f3ee46bd32f2fe9541e196b9b9a2bb9a8ea9","tarball":"https://registry.npmjs.org/@blackswampai/n8n-nodes-twentycrm/-/n8n-nodes-twentycrm-0.1.3.tgz","fileCount":46,"integrity":"sha512-/0mDy+efMy2epwvWYxR2buAWR+dVrKRQL2a5lXsu7+ptCo/+YCujpfNNooEfBSvtDukSZBI1yPa428p878/OSg==","signatures":[{"sig":"MEUCIQCIBeHGoKviH8U8Wrl9fpzBhqhAzopBEoKS7OgTQ5gAHAIgI0LO/qHv0X8DiLKlEHGf5/y9taASjjEhXtOUYjcWxU4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackswampai%2fn8n-nodes-twentycrm@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191797},"engines":{"node":">=22.22.0"},"gitHead":"29df2ba9f9f4e9cd24ad533cf157bc4bc2a9979a","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"node scripts/clean.mjs && n8n-node build","format":"prettier --write . --ignore-path .gitignore --ignore-path .prettierignore","release":"n8n-node release","lint:fix":"n8n-node lint --fix","test:load":"npm run smoke:load","typecheck":"tsc --noEmit","smoke:load":"node scripts/node-load-smoke.mjs","build:watch":"tsc --watch","twenty:logs":"node scripts/twenty-harness.mjs logs","twenty:stop":"node scripts/twenty-harness.mjs stop","twenty:wait":"node scripts/twenty-harness.mjs wait","format:check":"prettier --check . --ignore-path .gitignore --ignore-path .prettierignore","twenty:clean":"node scripts/twenty-harness.mjs clean","twenty:start":"node scripts/twenty-harness.mjs start","package:check":"node scripts/package-check.mjs","release:check":"node scripts/release-check.mjs","smoke:install":"node scripts/package-install-smoke.mjs","prepublishOnly":"n8n-node prerelease","test:integration":"npm run build && node scripts/twenty-live-test.mjs","test:webhook-bridge":"node scripts/twenty-webhook-qualify.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74a25147-c6e0-43cc-b818-ec81802f13d2"}},"repository":{"url":"git+https://github.com/BlackSwampAI/n8n-nodes-twentycrm.git","type":"git"},"_npmVersion":"11.17.0","description":"n8n community integration for Twenty CRM","directories":{},"_nodeVersion":"24.19.0","allowScripts":{"eslint-plugin-n8n-nodes-base":false},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"4.1.11","prettier":"3.6.2","release-it":"20.2.0","typescript":"5.9.2","@n8n/node-cli":"0.45.4"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-twentycrm_0.1.3_1787808570397_0.5555563887586386","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@blackswampai/n8n-nodes-twentycrm","version":"0.1.4","packageManager":"npm@11.19.0","description":"n8n community integration for Twenty CRM","license":"MIT","homepage":"https://blackswampai.com/n8n-nodes/twenty-crm/","keywords":["n8n-community-node-package","n8n","twenty","twenty-crm","crm"],"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"repository":{"type":"git","url":"git+https://github.com/BlackSwampAI/n8n-nodes-twentycrm.git"},"bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-twentycrm/issues"},"scripts":{"build":"node scripts/clean.mjs && n8n-node build","build:watch":"tsc --watch","dev":"n8n-node dev","lint":"n8n-node lint","lint:fix":"n8n-node lint --fix","format":"prettier --write . --ignore-path .gitignore --ignore-path .prettierignore","format:check":"prettier --check . --ignore-path .gitignore --ignore-path .prettierignore","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","test":"vitest run","twenty:start":"node scripts/twenty-harness.mjs start","twenty:wait":"node scripts/twenty-harness.mjs wait","twenty:stop":"node scripts/twenty-harness.mjs stop","twenty:clean":"node scripts/twenty-harness.mjs clean","twenty:logs":"node scripts/twenty-harness.mjs logs","test:integration":"npm run build && node scripts/twenty-live-test.mjs","test:webhook-bridge":"node scripts/twenty-webhook-qualify.mjs","package:check":"node scripts/package-check.mjs","smoke:load":"node scripts/node-load-smoke.mjs","smoke:install":"node scripts/package-install-smoke.mjs","scan:source":"node scripts/scan-source.mjs","scan:published":"node scripts/scan-published.mjs","test:load":"npm run smoke:load","release:check":"node scripts/release-check.mjs","release":"n8n-node release","prepublishOnly":"n8n-node prerelease"},"n8n":{"n8nNodesApiVersion":1,"strict":true,"credentials":["dist/credentials/TwentyApi.credentials.js","dist/credentials/TwentyWebhookApi.credentials.js"],"nodes":["dist/nodes/Twenty/Twenty.node.js","dist/nodes/Twenty/TwentyTrigger.node.js"]},"devDependencies":{"@n8n/node-cli":"0.45.4","@n8n/scan-community-package":"0.34.0","eslint":"9.32.0","prettier":"3.6.2","release-it":"20.2.0","typescript":"5.9.2","vitest":"4.1.11"},"peerDependencies":{"n8n-workflow":"*"},"engines":{"node":">=22.22.0"},"publishConfig":{"access":"public"},"allowScripts":{"eslint-plugin-n8n-nodes-base":false},"gitHead":"5eabd2195aaca9e42a2cdc1ed7a8fae33fb185b0","_id":"@blackswampai/n8n-nodes-twentycrm@0.1.4","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-8/ycGcxJ7SV/7hK4cEb3UQImwVI6MgN7s0PQItrWJDvpFu9Uid72/ArvvhocIO1sRvqNkZpbCf4mgeiHxxPUiw==","shasum":"290322ff09d7d6c889535cf559829c2591e0a408","tarball":"https://registry.npmjs.org/@blackswampai/n8n-nodes-twentycrm/-/n8n-nodes-twentycrm-0.1.4.tgz","fileCount":46,"unpackedSize":192725,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackswampai%2fn8n-nodes-twentycrm@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDp+V0/wHABS2Wl7EFxAR5sMX94NIxWJqkSyVrCnrSf6gIhALiuJazZ8GL6zn5Q5teni+gtMyO5zayWj7ZViFwDY44b"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74a25147-c6e0-43cc-b818-ec81802f13d2"}},"directories":{},"maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-twentycrm_0.1.4_1788687801915_0.39479962160610005"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-22T22:03:40.500Z","modified":"2026-09-06T09:43:22.355Z","0.1.0":"2026-08-22T22:03:40.736Z","0.1.1":"2026-08-22T22:21:26.942Z","0.1.2":"2026-08-27T01:00:47.949Z","0.1.3":"2026-08-27T05:29:30.521Z","0.1.4":"2026-09-06T09:43:22.039Z"},"bugs":{"url":"https://github.com/BlackSwampAI/n8n-nodes-twentycrm/issues"},"author":{"name":"Christopher J. Nelson","email":"christopherjnelson@proton.me"},"license":"MIT","homepage":"https://blackswampai.com/n8n-nodes/twenty-crm/","keywords":["n8n-community-node-package","n8n","twenty","twenty-crm","crm"],"repository":{"type":"git","url":"git+https://github.com/BlackSwampAI/n8n-nodes-twentycrm.git"},"description":"n8n community integration for Twenty CRM","maintainers":[{"name":"christopherjnelson","email":"root@chris.guru"}],"readme":"# @blackswampai/n8n-nodes-twentycrm\n\n[![npm version](https://img.shields.io/npm/v/%40blackswampai%2Fn8n-nodes-twentycrm)](https://www.npmjs.com/package/@blackswampai/n8n-nodes-twentycrm)\n[![CI](https://github.com/BlackSwampAI/n8n-nodes-twentycrm/actions/workflows/ci.yml/badge.svg)](https://github.com/BlackSwampAI/n8n-nodes-twentycrm/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/npm/l/%40blackswampai%2Fn8n-nodes-twentycrm)](LICENSE.md)\n\nAn independent n8n community-node package for connecting Twenty CRM workflows to standard and custom objects, metadata-driven records, and signed record-event webhooks.\n\n> This is an unofficial Black Swamp AI community integration. It is not affiliated with, sponsored by, endorsed by, or maintained by Twenty.com, PBC. The Twenty name and logo belong to their respective owner(s) and are used only to identify compatibility.\n\n[Installation](#installation) · [Compatibility](#compatibility) · [Credentials](#credentials) · [Operations](#operations) · [Troubleshooting](#troubleshooting) · [Black Swamp AI](https://blackswampai.com/n8n-nodes/twenty-crm/)\n\n## Installation\n\nInstall the verified community node from the n8n editor:\n\n1. Open the **Canvas**, then open the nodes panel.\n2. Search for **Twenty CRM**.\n3. Select **More from the community**, then choose **Install**.\n\nSee n8n's [verified community-node installation guide](https://docs.n8n.io/integrations/community-nodes/installation-and-management/install-verified-community-nodes/) for current requirements.\n\nSelf-hosted administrators who need the package fallback can install the exact package\n`@blackswampai/n8n-nodes-twentycrm` through the instance's supported community-node management.\n\nFor development, use Node.js 22.22.0 or newer, clone the repository, then run `npm ci`, `npm run build`, and `npm run smoke:install`.\n\nReleases are published by the repository's tag-only GitHub Actions workflow with an [SLSA provenance attestation](https://slsa.dev/provenance/v1), which traces the package to the repository and commit it was built from. Verify the **Provenance** record on the [npm package page](https://www.npmjs.com/package/@blackswampai/n8n-nodes-twentycrm) or inspect the published attestations directly:\n\n```sh\nnpm view @blackswampai/n8n-nodes-twentycrm dist.attestations\n```\n\n## Compatibility\n\nThe package supports configurable Twenty Cloud and self-hosted root URLs. Metadata discovery has regression coverage for the legacy Twenty v2.9 and modern v2.35 GraphQL shapes; the retained automated live API harness remains pinned to v2.9.0 by immutable image digest. The package declares Node.js `>=22.22.0` and `n8n-workflow` as a host-provided peer.\n\nThis is not a broad Twenty or n8n version matrix. The package is available through n8n's verified community-node discovery; this status does not expand the runtime compatibility evidence above. See [Compatibility and qualification](docs/COMPATIBILITY.md), the [API matrix](docs/api-matrix.md), and the [UI qualification checklist](docs/QUALIFICATION.md).\n\n## Credentials\n\n`Twenty API` requires a Twenty API key and root Base URL. It sends Bearer authentication through n8n's credential helper. The default is `https://api.twenty.com`; self-hosted users enter their installation root, including any reverse-proxy prefix. Pasted `/rest`, `/graphql`, `/metadata`, and `/rest/metadata` suffixes are normalized centrally.\n\nThe credential test sends a minimal read-only Core GraphQL query. The API-key role needs access to every object used by a workflow. Dynamic schema discovery needs metadata access; the local custom-schema qualification additionally requires the **Data Model** settings permission.\n\n`Twenty Webhook API` stores the shared webhook secret as a password-masked value. Its credential test confirms only that a non-empty secret is configured; verify signed delivery by sending a Twenty event. Enter the same strong secret in Twenty's webhook form even though Twenty labels it optional. Unsigned trigger delivery is not supported.\n\nNever place API keys or webhook secrets in workflow fields, source code, logs, or issue reports.\n\n## Operations\n\nThe action node provides:\n\n- **Company, Person, Opportunity, Task, and Note:** Create, Get, Get Many, Update, and Delete.\n- **Record:** the same generic CRUD surface for active standard and custom workspace objects.\n- **Schema Object:** read-only Get and Get Many metadata discovery.\n\nCreate and Update default to metadata-driven Field Mapping. Fixed resources show common fields first and keep remaining writable/custom fields under Additional Fields. Generic Record retains full dynamic schema ordering. Known compound values are reconstructed for Twenty's REST API; JSON input remains available as an advanced fallback. Get Many supports bounded Limit/Return All cursor pagination and raw Twenty REST filter/order expressions.\n\nAll resources reuse shared authenticated transport, pagination, field mapping, and sanitized errors. Fixed-resource REST routing uses stable shared descriptors, so Get/Get Many and JSON-input CRUD do not depend on metadata discovery. Generic Record operations and every field-mapped write remain metadata-driven. Transient retries are conservative and idempotency-gated; record mutations are never automatically retried. Schema creation or modification is not exposed as a node operation.\n\nThe **Twenty CRM Trigger** receives Record Created, Record Updated, and Record Deleted events for one active standard/custom object or All Objects. Registration is manual:\n\n1. Choose **Test URL** only while n8n is listening for a test event; use **Production URL** for an active workflow.\n2. Create the webhook in Twenty under **Settings → APIs & Webhooks**.\n3. Enter a strong shared secret in Twenty and save the same value in `Twenty Webhook API`.\n\nThe trigger verifies Twenty's HMAC-SHA256 signature over the exact raw request body and millisecond timestamp, requires delivery within a five-minute signed timestamp tolerance, and filters the all-events stream inside n8n. Automatic registration and unsigned mode are not supported.\n\n## Troubleshooting\n\nSee [Troubleshooting](docs/TROUBLESHOOTING.md) for credential/network failures, dynamic fields, permissions, record errors, local Docker routing, and webhook signature failures.\n\n## Resources\n\n- [Twenty documentation](https://docs.twenty.com/)\n- [n8n community node documentation](https://docs.n8n.io/integrations/community-nodes/)\n- [Local Twenty harness](docs/LOCAL_TWENTY.md)\n- [Testing strategy and evidence](docs/testing.md)\n- [Branding and icon provenance](docs/branding.md)\n- [Black Swamp AI — Twenty CRM for n8n](https://blackswampai.com/n8n-nodes/twenty-crm/)\n- [Project issues](https://github.com/BlackSwampAI/n8n-nodes-twentycrm/issues)\n- [Release process](RELEASING.md)\n\nThe packaged light and dark icons use the unmodified official Twenty 96×96 SVG, confirmed unchanged at [`twentyhq/twenty` commit `ee6a5c37cd9dc420934c02cf32256234f7e96d01`](https://github.com/twentyhq/twenty/blob/ee6a5c37cd9dc420934c02cf32256234f7e96d01/packages/twenty-codex-plugin/assets/twenty-logo.svg). Use of that mark does not imply affiliation, sponsorship, or endorsement. See [branding and icon provenance](docs/branding.md).\n\n## License\n\nProject code is available under the [MIT License](LICENSE.md). Third-party trademarks remain the property of their respective owners.\n","readmeFilename":"README.md"}