Package Information
Available Nodes
Documentation
๐ 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)
- Open your n8n instance
- Navigate to Settings โ๏ธ โ Community Nodes
- Click Install a community node
- Enter:
n8n-nodes-keephub - Click Install
- โ 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 <n8n-container> 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):
- In n8n, go to Credentials ๐
- Create New โ Search for Keephub Bearer API
- Fill in:
- Client URL:
https://yourcompany.keephub.io - Bearer Token: Your API token
- Language (optional): Default is
en
- Client URL:
- Test & Save โ๏ธ
Option B โ Login Credentials (username & password):
- In n8n, go to Credentials ๐
- Create New โ Search for Keephub Login API
- 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
- Client URL:
- Test & Save โ๏ธ
2๏ธโฃ Add the Node to Your Workflow
- Click + to add a node
- Search for Keephub
- Select your Authentication method (Bearer Token or Login Credentials)
- Select your resource and operation
- Configure parameters
- Run! ๐
3๏ธโฃ Example: Get User Info
Keephub Node Configuration:
โโโ Resource: User
โโโ Operation: Find by Login Name
โโโ Login Name: john.doe
Output:
{
"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": "<p>Great news everyone!</p>" },
"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:
- Orgunit ID (required): The organization unit ID
Options (all optional):
- Limit: Maximum number of results (default: 50)
- Skip: Number of results to skip (pagination)
- Sort Field: Field to sort by (e.g.,
createdAt,updatedAt) - Sort Order:
1for ascending,-1for 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:
- Task Title (required): Name of the task template
- Task Type (required):
form,confirmation, orread
Additional Fields (optional):
- Message: Custom message body for the task template
- Send Notification: Whether to notify assigned users (
true/false)
Task Template Get by Orgunit Parameters:
- Orgunit ID (required): The organization unit ID to filter task templates
Options (all optional):
- Limit: Maximum number of results (default: 50)
- Skip: Number of results to skip (pagination)
- Sort Field: Field to sort by (e.g.,
template.dueDate) - Sort Order:
1for ascending,-1for descending - Start Date After: Filter tasks after this date
- Start Date Before: Filter tasks before this date
๐ 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:
- Form Content ID (required): The content ID of the form (24-character MongoDB ObjectID)
Options (all optional):
- Limit: Maximum number of results (default: 50)
- Skip: Number of results to skip (pagination)
- Sort Field: Field to sort by (default:
updatedAt) - Sort Order:
-1for descending (newest first),1for ascending
Example - 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:
- Get Children โ
limit: Maximum number of child nodes to return (default: 0 = unlimited) - Get Ancestors โ
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:
- Bearer Token โ uses the Keephub Bearer API credential
- Login Credentials โ uses the Keephub Login API credential
Input Data
- All parameters support dynamic expressions with
{{ }} - Use previous node outputs:
{{ $node["Previous Node"].json.field }} - Access environment variables:
{{ $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"
- โ Verify your Keephub instance URL
- โ Check API credentials are correct
- โ Ensure credentials have required permissions
โ "Unknown operation"
- โ Verify resource and operation combination exist
- โ Check node version is latest
- โ Try refreshing the node palette
โ "Connection timeout"
- โ Check network connectivity
- โ Verify firewall allows outbound HTTPS
- โ Check Keephub instance is accessible
๐ Documentation
- ๐ n8n Documentation
- ๐ Keephub API Docs
- ๐ฌ n8n Community Forum
๐๏ธ 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) ๐
- โจ Initial release
- ๐ฅ User management operations
- ๐ฐ Content creation & management
- โ Task template operations
- ๐ Form submission handling
- ๐ Secure API authentication
v1.1.0 (2025-11-10) ๐ฆ
- ๐ Added Orgchart operations (Get, Parent, Ancestors, Children)
- ๐งน Fixed console.log in updateById operation
- ๐ง Code cleanup and optimizations
v1.2.0 (2025-11-12) ๐
- ๐ Added Get By Orgunit task operation
- ๐ Date range filtering support for tasks (Start Date Before/After)
- ๐ฐ Enhanced Content filtering
v1.2.1 (2025-11-20)
- ๐ README updates and documentation improvements
v1.2.2 (2025-11-20)
- ๐งน Build process improvements (added dist folder cleanup script)
v1.3.0 (2025-12-04)
- ๐ Added Get by External Ref operation to Orgchart resource for querying nodes by external reference
v1.3.4 (2025-12-08)
- ๐ง Added externalRef of orgunit to the output of the Get submission orgunits node
- ๐งน Fixed typo that was causing README rendering issues
v1.4.0 (2026-02-09) ๐
- ๐ Split credentials into two separate types: Keephub Bearer API and Keephub Login API
- ๐ก๏ธ Added
IAuthenticateGenericto Bearer credential for automatic header injection - ๐ Added Authentication selector dropdown to the node UI (Bearer Token / Login Credentials)
- ๐ Updated
inputs/outputsto useNodeConnectionTypes.Main(n8n best practice) - ๐ฆ Moved non-required fields into Additional Fields / Options collections:
- Content: Limit, Skip, Sort Field, Sort Order โ Options
- Orgchart: Depth Limit, Result Limit โ Additional Fields
- Task: Message, Send Notification โ Additional Fields; Limit โ Options
- ๐งน Updated helpers to dynamically resolve credentials based on authentication selector
- ๐ Updated README documentation to reflect all changes
v1.4.3 (2026-02-19)
- ๐ผ๏ธ Changed Image assets to better match n8n's dark theme
v1.4.4 (2026-02-19)
- ๐ Empty content/task searches now return
[]instead of throwing error (findByContentPool,findByGroup,findByOrgunit,task/getByOrgunit) - ๐ Orgchart node IDs now properly URL-encoded (
getById,getParent,getAncestors) - ๐ Added null check for submitter ID in form submissions (
getSubmitterDetails) - ๐ Fixed double indentation in content delete operation
- ๐ Fixed paginated response unwrapping in user
findByLoginName,findByGroup,findByOrgunitโ now correctly returns individual user items instead of the raw envelope - ๐ Added codex metadata with expanded aliases for better node discoverability
- ๐ Expanded package keywords from 4 to 19 for better discoverability
- ๐ผ๏ธ Optimized icon SVG viewBox to show full logo without cutoff
- ๐ผ๏ธ Restored white ellipse border for visibility in dark mode
- ๐ Improved credential test behavior for both auth methods:
- 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
POSTto the configured auth endpoint (uses string manipulation compatible with n8n's expression sandbox) - Both use protocol normalization to handle URLs without
https://prefix
- Bearer credential test now handles both client URL and API subdomain URL formats (strips
- ๐งฉ Renamed Login credential field from Token Endpoint to Auth Endpoint for clarity (runtime keeps backward compatibility with legacy
tokenEndpoint) - ๐ Fixed metadata/docs pointers:
- Updated node credential documentation anchor link
- Fixed README MIT badge link target
- Updated clientUrl field descriptions to clarify "Do not use the API URL"
- ๐ฆ Added
prepublishOnlyguard (npm run test) and aligned package Node engine requirement to>=18.17.0 - ๐ Enhanced URL transformation robustness:
- Client URL now auto-normalizes
.api.subdomain (handles both formats transparently) - Protocol normalization adds
https://if missing
- Client URL now auto-normalizes
v1.5.0 (2026-02-20) ๐
- ๐ Added Find by Form operation to Form Submission resource โ retrieve all submissions for a given form with pagination & sorting
- ๐ฆ Supports Limit, Skip, Sort Field, Sort Order options (consistent with Content and Task list operations)
- ๐ Uses
$sort[_id]=1tiebreaker for stable pagination across pages
v1.6.0 (2026-02-22)
- โ Added Approve Task operation โ approve a pending task with an optional comment
- โ Added Reject Task operation โ reject a pending task with a required reason
- โ Added Approve Content operation โ approve content pending approval
- โ Added Reject Content operation โ reject content pending approval
v1.8.0 (2026-02-23)
- ๐๏ธ Added Storage resource with Get Signed URL operation โ generates pre-signed CloudFront URLs for secure file access from tasks, form answers, and content
- Supports all 11 origin types with inline field hints for common expressions; optional Force Download flag
- ๐ท๏ธ Renamed Task resource display label to Task Template for clarity across all template-managing operations (Create, Delete, Get by ID, Get by Orgunit, Get Progress, Get Status Counts)
- Approve Task and Reject Task intentionally kept as-is โ they operate on task instances, not templates; no breaking changes
- ๐ Added Get Task Template by Task operation โ resolves a task template from a task instance ID via
/tasks/{id}โ/tasktemplates/{templateRef} - ๐ Added Get Task operation โ fetches a task instance directly by its ID from
/tasks/{id}
v1.8.1 (2026-02-23)
- ๐ Fixed missing
descriptionproperty 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! ๐
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - 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?
- ๐ Open an Issue
- ๐ฌ Start a Discussion
โญ Show Your Support
If you find this node useful, please consider:
- โญ Starring this repository
- ๐ฆ Sharing it on social media
- ๐ข Recommending it to the community
Made with โค๏ธ for the automation community
Visit n8n โข View on npm โข GitHub Repo