keephub

Keephub integration node for n8n workflow automation

Package Information

Downloads: 246 weeklyย /ย 939 monthly
Latest Version: 1.8.1
Author: Niksa Perovic

Documentation

๐Ÿš€ n8n-nodes-keephub

Keephub Banner

npm version
npm downloads
MIT licensed
Maintenance

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 <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):

  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.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: 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:

  • Task Title (required): Name of the task template
  • Task Type (required): form, confirmation, or read

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: 1 for ascending, -1 for 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: -1 for descending (newest first), 1 for 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


๐Ÿ—๏ธ 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 IAuthenticateGeneric to Bearer credential for automatic header injection
  • ๐Ÿ”€ Added Authentication selector dropdown to the node UI (Bearer Token / Login Credentials)
  • ๐Ÿ”Œ Updated inputs/outputs to use NodeConnectionTypes.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 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
  • ๐Ÿงฉ 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 prepublishOnly guard (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

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]=1 tiebreaker 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 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:

  • โญ 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

Discussion