Description
๐ n8n-nodes-keephub




Seamlessly integrate Keephub with your n8n workflows ๐ฏ
Unlock the power of employee engagement and communication automation with this comprehensive n8n community node for Keephub.
๐ง Installation โข ๐ Documentation โข ๐ Quick Start โข ๐ Changelog โข ๐ค Contributing
—
๐ About
This is a professional n8n community node that enables you to harness the full power of Keephub within your workflow automation.
Keephub is an enterprise-grade employee engagement platform for managing:
- ๐ฅ User management and organizational structures
- ๐ฐ Content creation and distribution
- โ Task management and templates
- ๐ Dynamic form submissions and responses
n8n is a fair-code licensed workflow automation platform that puts automation in the hands of technical and business users.
—
๐ง Installation
๐ฆ Community Nodes Method (Recommended)
1. Open your n8n instance
2. Navigate to Settings โ๏ธ โ Community Nodes
3. Click Install a community node
4. Enter: n8n-nodes-keephub
5. Click Install
6. โ
Done! The node is ready to use
๐ ๏ธ Manual Installation
For Local n8n:
cd ~/.n8n/nodes
npm install n8n-nodes-keephub
For Docker:
docker exec -it sh
cd /home/node/.n8n/nodes
npm install n8n-nodes-keephub
Restart your container
For Node.js n8n:
npm install -g n8n-nodes-keephub
> [!TIP]
> Restart your n8n instance and the Keephub node will appear in your palette! ๐จ
—
๐ Quick Start
1๏ธโฃ Set Up Credentials
Keephub supports two separate credential types. Choose the one that matches your setup:
Option A โ Bearer Token (recommended for API integrations):
1. In n8n, go to Credentials ๐
2. Create New โ Search for Keephub Bearer API
3. Fill in:
– Client URL: https://yourcompany.keephub.io
– Bearer Token: Your API token
– Language (optional): Default is en
4. Test & Save โ๏ธ
Option B โ Login Credentials (username & password):
1. In n8n, go to Credentials ๐
2. Create New โ Search for Keephub Login API
3. Fill in:
– Client URL: https://yourcompany.keephub.io
– Login Name: Your username
– Password: Your password
– Auth Endpoint (optional): Custom auth endpoint path
– Language (optional): Default is en
4. Test & Save โ๏ธ
2๏ธโฃ Add the Node to Your Workflow
1. Click + to add a node
2. Search for Keephub
3. Select your Authentication method (Bearer Token or Login Credentials)
4. Select your resource and operation
5. Configure parameters
6. Run! ๐
3๏ธโฃ Example: Get User Info
Keephub Node Configuration:
โโโ Resource: User
โโโ Operation: Find by Login Name
โโโ Login Name: john.doeOutput:
{
"id": "63bd885034d0466d11073575",
"loginName": "john.doe",
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@company.com"
}
—
๐ Operations
๐ฅ User Operations
| Operation | Description |
| ————————- | —————————————- |
| ๐ Get by ID | Retrieve a user by their unique ID |
| ๐ Find by Login Name | Search users by login name |
| ๐จโ๐ผ Find by Group | Fetch all users in a specific group |
| ๐ข Find by Orgunit | Retrieve users from an organization unit |
Example:
// Get all users in a group
{
"resource": "user",
"operation": "findByGroup",
"groupId": "group_12345"
}
—
๐ฐ Content Operations
| Operation | Description |
| ————————— | —————————————————— |
| โ
Approve Content | Approve content that is pending approval |
| โจ Create | Create new content (news, forms, manuals, etc.) |
| ๐๏ธ Delete | Remove content |
| ๐ Find by Content Pool | Filter content by pool with optional sorting |
| ๐ท๏ธ Find by Group | Get content assigned to groups with optional sorting |
| ๐ข Find by Orgunit | Retrieve content by organization with optional sorting |
| ๐ Get by ID | Retrieve specific content |
| โ Reject Content | Reject content that is pending approval |
| โ๏ธ Update by ID | Modify existing content |
Example – Create Content:
{
"resource": "content",
"operation": "create",
"defineContentInput": "json",
"contentBody": {
"originLanguage": "en",
"contentType": "news",
"contentPool": "POOL_ID",
"title": { "en": "๐ Company Announcement" },
"message": { "en": "Great news everyone!
" },
"orgchartSelection": { "include": ["root0001"], "exclude": [] }
}
}
Example – Find Content by Orgunit with Filtering:
{
"resource": "content",
"operation": "findByOrgunit",
"orgunitId": "root0077",
"options": {
"limit": 50,
"skip": 0,
"sortBy": "createdAt",
"sortOrder": 1
}
}
Content Filtering Parameters:
Options (all optional):
createdAt, updatedAt)1 for ascending, -1 for descending—
โ Task Template Operations
| Operation | Description |
| —————————————— | ———————————————————————- |
| โ
Approve Task | Approve a pending task, with an optional comment |
| โ Create Task Template | Create a new task template |
| ๐๏ธ Delete Task Template | Remove a task template |
| ๐ Get Task | Fetch a task instance by its ID |
| ๐ Get Task Template by ID | Retrieve a task template by its own ID |
| ๐ Get Task Template by Task | Fetch the template a specific task instance was created from |
| ๐ Get Task Templates by Orgunit | Fetch task templates by organization unit with filtering & pagination |
| ๐ Get Task Template Progress | Check task template progress |
| ๐ Get Task Template Status Counts | View task template completion statistics |
| โ Reject Task | Reject a pending task with a required reason |
Example – Create Task with JSON Body:
{
"resource": "task",
"operation": "createTask",
"defineTaskInput": "json",
"taskJsonBody": {
"title": { "en": "Q4 Performance Review" },
"template": {
"form": {
"fields": [
{ "name": "rating", "type": "number" },
{ "name": "feedback", "type": "text" }
]
}
}
}
}
Example – Create Task with Additional Fields:
{
"resource": "task",
"operation": "createTask",
"defineTaskInput": "fields",
"taskTitle": "Q4 Performance Review",
"taskType": "form",
"additionalFields": {
"taskMessage": "Please complete your review by end of quarter.",
"taskNotification": true
}
}
Example – Get Tasks by Orgunit with Filtering:
{
"resource": "task",
"operation": "getTaskByOrgunit",
"orgunitId": "root0077",
"options": {
"limit": 50,
"skip": 0,
"sortBy": "template.dueDate",
"sortOrder": 1,
"startDateGte": "2025-11-01T00:00:00Z",
"startDateLte": "2025-11-30T23:59:59Z"
}
}
Task Template Create Parameters:
form, confirmation, or readAdditional Fields (optional):
true/false)Task Template Get by Orgunit Parameters:
Options (all optional):
template.dueDate)1 for ascending, -1 for descending—
๐ Form Submission Operations
| Operation | Description |
| ———————————- | ————————————————- |
| ๐ Find by Form | Retrieve all submissions for a form with filtering |
| ๐ฅ Get | Fetch complete form submission data |
| ๐ค Get Submitter Details | Retrieve full user profile of submitter |
| ๐ข Get Submission Orgunits | View orgunit hierarchy |
| ๐ Update Submission Orgunits | Change visibility by orgunit |
| โฑ๏ธ Calculate Response Duration | Time from creation to submission |
Example – Find Submissions by Form:
{
"resource": "formSubmission",
"operation": "findByForm",
"contentRef": "699848533ab62d9d50409890",
"options": {
"limit": 50,
"skip": 0,
"sortBy": "updatedAt",
"sortOrder": -1
}
}
Find by Form Parameters:
Options (all optional):
updatedAt)-1 for descending (newest first), 1 for ascendingExample – Calculate Response Time:
{
"resource": "formSubmission",
"operation": "calculateResponseDuration",
"formSubmissionId": "form_67890"
}// Returns:
{
"duration": {
"days": 2,
"hours": 5,
"minutes": 30,
"totalSeconds": 183930
}
}
—
๐ข Orgchart Operations
| Operation | Description |
| ————————— | ————————————————– |
| ๐ณ Get Ancestors | Get all ancestors in the org hierarchy |
| ๐ Get by External Ref | Retrieve an orgchart node by its externalRef value |
| ๐ Get by ID | Retrieve an orgchart node by ID |
| ๐ถ Get Children | Retrieve all children/descendants |
| โฌ๏ธ Get Parent | Fetch the parent node of an orgchart node |
Example – Get Children with Depth Limit:
{
"resource": "orgchart",
"operation": "getChildren",
"orgunitId": "node123",
"additionalFields": {
"limit": 100
}
}
Example – Get Ancestors with Depth Limit:
{
"resource": "orgchart",
"operation": "getAncestors",
"orgunitId": "node123",
"additionalFields": {
"depthLimit": 3
}
}
Optional Additional Fields:
limit: Maximum number of child nodes to return (default: 0 = unlimited)depthLimit: How many levels up to traverse (default: 0 = unlimited)—
๐๏ธ Storage Operations
| Operation | Description |
| ——————- | ——————————————————— |
| ๐ Get Signed URL | Generate a pre-signed URL for secure access to a stored file |
Use case: Retrieve a signed CloudFront URL for a file attached to a task, form answer, or content item, then pass it directly to an AI vision model for analysis.
Required fields:
| Field | Description |
| —– | ———– |
| Origin | The entity type that owns the file (e.g. Task Form Answer, Content Attachment) |
| Origin ID | The id of the owning entity โ use {{ $json.id }} from a preceding Keephub node |
| Storage ID | The S3 path of the file โ use {{ $json.answers[N].value.value }} for upload form answers |
| Force Download | Optional. Sets Content-Disposition: attachment to force a file download instead of inline display |
Example:
{
"resource": "storage",
"operation": "getSignedUrl",
"origin": "taskFormAnswer",
"originId": "699974e8f6c386b2e3e93cbc",
"storageId": "live/image/dev/contents/abc123/photo.jpg"
}
Output:
{
"url": "https://d2qp115j4w1ptn.cloudfront.net/live/image/...?Expires=...&Signature=..."
}
> โ ๏ธ The returned URL is time-limited and contains embedded credentials. Treat it as a secret and use it immediately in your workflow โ do not log or store it.
—
๐ Credentials Setup
Keephub uses two separate credential types โ select the matching authentication method from the Authentication dropdown on the Keephub node.
๐ Keephub Bearer API
โ Most secure for API integrations
โ Use existing API tokens from Keephub
โ Perfect for server-to-server communication
โ Uses IAuthenticateGeneric โ token sent automatically in headers
| Field | Description |
| ————– | ———————————— |
| Client URL | Your Keephub instance base URL |
| Bearer Token | API bearer token |
| Language | Language code (default: en) |
๐ Keephub Login API
โ Automatic token generation from username/password
โ Simple to set up
โ Token refreshed dynamically per request
โ Credentials securely stored and encrypted in n8n
| Field | Description |
| —————— | ———————————————– |
| Client URL | Your Keephub instance base URL |
| Login Name | Username for authentication |
| Password | Password for authentication |
| Auth Endpoint | Custom auth path (default: /authentication) |
| Language | Language code (default: en) |
All credentials are encrypted ๐ and never exposed in logs or workflows.
—
๐ก Real-World Examples
๐ง Example 1: Auto-Create Tasks from Email
Gmail Trigger
โ
Extract email data
โ
Keephub: Create Task
โ
Send confirmation email
๐ Example 2: Sync Users to Slack
Keephub: Get all users in a group
โ
Filter active users
โ
Slack: Create channels per active users in group
๐ Example 3: Form Response Automation
Schedule Trigger (daily)
โ
Keephub: Get Form Submission
โ
Keephub: Get Submitter Details
โ
Keephub: Calculate Response Duration
โ
Store in database
—
โ๏ธ Node Configuration
Authentication
The Keephub node provides an Authentication dropdown at the top of the configuration panel:
Input Data
{{ }}{{ $node["Previous Node"].json.field }}{{ $env.MY_VAR }}Output Format
{
"pairedItem": { "item": 0 },
"json": {
// API response data
}
}
Error Handling
Enable “Continue on Error” to handle failures gracefully in your workflow.
—
๐ฆ Requirements
| Requirement | Version |
| ———– | ——– |
| n8n | v1.0.0+ |
| Node.js | 18.17.0+ |
| npm | 8.0.0+ |
—
๐ Troubleshooting
โ “Authentication failed”
โ “Unknown operation”
โ “Connection timeout”
—
๐ Documentation
—
๐๏ธ Project Structure
n8n-nodes-keephub/
โโโ nodes/
โ โโโ Keephub/
โ โโโ Keephub.node.ts # Main node class
โ โโโ descriptions/ # Field definitions
โ โ โโโ UserDescription.ts
โ โ โโโ ContentDescription.ts
โ โ โโโ TaskDescription.ts
โ โ โโโ FormSubmissionDescription.ts
โ โ โโโ OrgchartDescription.ts
โ โ โโโ StorageDescription.ts
โ โโโ actions/ # Operation implementations
โ โ โโโ user/
โ โ โโโ content/
โ โ โโโ task/
โ โ โโโ formSubmission/
โ โ โโโ orgchart/
โ โ โโโ storage/
โ โโโ utils/
โ โโโ helpers.ts
โโโ credentials/
โ โโโ KeephubBearerApi.credentials.ts
โ โโโ KeephubLoginApi.credentials.ts
โโโ package.json
โโโ README.md
—
๐ Development
Build
npm run build
Verify (lint + build)
npm run test
Lint
npm run lint
—
๐ Version History
v1.0.0 (2025-01-09) ๐
v1.1.0 (2025-11-10) ๐ฆ
v1.2.0 (2025-11-12) ๐
v1.2.1 (2025-11-20)
v1.2.2 (2025-11-20)
v1.3.0 (2025-12-04)
v1.3.4 (2025-12-08)
v1.4.0 (2026-02-09) ๐
IAuthenticateGeneric to Bearer credential for automatic header injectioninputs/outputs to use NodeConnectionTypes.Main (n8n best practice) – Content: Limit, Skip, Sort Field, Sort Order โ Options
– Orgchart: Depth Limit, Result Limit โ Additional Fields
– Task: Message, Send Notification โ Additional Fields; Limit โ Options
v1.4.3 (2026-02-19)
v1.4.4 (2026-02-19)
[] instead of throwing error (findByContentPool, findByGroup, findByOrgunit, task/getByOrgunit)getById, getParent, getAncestors)getSubmitterDetails)findByLoginName, findByGroup, findByOrgunit โ now correctly returns individual user items instead of the raw envelope – Bearer credential test now handles both client URL and API subdomain URL formats (strips .api. for compatibility)
– Login credential test now performs real auth validation via POST to the configured auth endpoint (uses string manipulation compatible with n8n’s expression sandbox)
– Both use protocol normalization to handle URLs without https:// prefix
tokenEndpoint) – Updated node credential documentation anchor link
– Fixed README MIT badge link target
– Updated clientUrl field descriptions to clarify “Do not use the API URL”
prepublishOnly guard (npm run test) and aligned package Node engine requirement to >=18.17.0 – Client URL now auto-normalizes .api. subdomain (handles both formats transparently)
– Protocol normalization adds https:// if missing
v1.5.0 (2026-02-20) ๐
$sort[_id]=1 tiebreaker for stable pagination across pagesv1.6.0 (2026-02-22)
v1.8.0 (2026-02-23)
/tasks/{id} โ /tasktemplates/{templateRef}/tasks/{id}v1.8.1 (2026-02-23)
description property on six Task Template operations (Create, Delete, Get by ID, Progress, Status Counts, By Orgunit) โ these were not visible on the n8n integrations page—
๐ค Contributing
Contributions are welcome! ๐
1. Fork the repository
2. Create a feature branch (git checkout -b feature/amazing-feature)
3. Commit your changes (git commit -m 'Add amazing feature')
4. Push to the branch (git push origin feature/amazing-feature)
5. Open a Pull Request
Development Setup
git clone https://github.com/RetailInTouch/n8n-nodes-keephub.git
cd n8n-nodes-keephub
npm install
npm run build
—
๐ License
This project is licensed under the MIT License – see the LICENSE file for details.
—
๐ Support
Found a bug? Have a feature request?
—
โญ Show Your Support
If you find this node useful, please consider:
—
Made with โค๏ธ for the automation community
Visit n8n โข View on npm โข GitHub Repo