npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

n8n-nodes-ezycourse

v0.1.2

Published

n8n community nodes for EzyCourse platform integration — triggers and actions for student management, enrollments, sales, and course progress

Readme

n8n-nodes-ezycourse

npm version npm downloads License: MIT n8n community node

An n8n community node package for EzyCourse-powered platforms. Connect your EzyCourse academy to any n8n workflow — react to student activity in real time and automate enrollment, tagging, and progress tracking.

The package ships two nodes:

  • EzyCourse Trigger — starts a workflow when EzyCourse fires one of 10 webhook events (new signups, sales, course progress, etc.)
  • EzyCourse Action — sends commands to EzyCourse from inside a workflow (register students, manage enrollments, assign tags, and more)

Table of Contents

Compatibility

| Requirement | Version | |---|---| | n8n | >=1.0.0 | | Node.js | >=18.0.0 | | npm | >=9.0.0 |

Installation

  1. Open your n8n instance and navigate to Settings → Community Nodes.
  2. Click Install.
  3. Enter n8n-nodes-ezycourse and confirm.
  4. Restart n8n if prompted.

Self-hosted only. Community nodes are not available on n8n Cloud at this time.

Authentication

Create a new EzyCourse API credential in n8n. You will find the required tokens in your EzyCourse dashboard under Settings → Webhook.

| Field | Required | Where to find it | |---|---|---| | Base URL | Yes | Root URL of your EzyCourse platform, e.g. https://your-academy.com. No trailing slash. No default value — every platform has its own URL. | | Access Token | Yes | Shown on the Webhook → Data-In page. Embedded in each endpoint URL. | | Signature Token | No | Shown on the Webhook → Data-Out page. Enables HMAC-SHA256 signature verification on incoming webhook payloads. |

n8n will verify the credential by sending a test request to your platform. A validation error response (HTTP 422) confirms the token is accepted.

EzyCourse Trigger

The EzyCourse Trigger node starts a workflow whenever EzyCourse sends a webhook event. Each workflow gets its own unique URL generated by n8n.

Setup

  1. Add an EzyCourse Trigger node to your workflow and select the event you want to listen to.
  2. Activate the workflow. n8n will display a Webhook URL — copy it.
  3. In your EzyCourse dashboard, go to Settings → Webhook (Data-Out).
  4. Paste the URL into the field for the corresponding event and save.

When a Signature Token is set in the credential, every incoming request is verified with HMAC-SHA256. Requests with a missing or invalid signature are rejected with HTTP 401.

Supported Events

| Event | Trigger | |---|---| | new_signup | A new user registers on the platform | | new_product_enrollment | A student enrolls in a product (course, bundle, community, etc.) | | new_sale | A new sale or order is created | | renew_order | A subscription order is renewed | | cancel_order | An order or subscription is cancelled | | buy_seats | Seats are purchased for a group or team enrollment | | course_completed | A student completes an entire course | | chapter_completed | A student completes a chapter within a course | | quiz_completed | A student completes a quiz | | lesson_completed | A student completes a single lesson |

EzyCourse Action

The EzyCourse Action node sends commands to your EzyCourse platform from inside a workflow. Select a Resource and an Operation to build your request.

| Resource | Operation | Description | |---|---|---| | Student | Register | Register a new student account | | Student | Register and Enroll | Register a new student and enroll them in a product in one step | | Student | Authenticate | Generate a remote authentication URL for an existing student (SSO-style) | | Enrollment | Enroll | Enroll an existing student in a product | | Enrollment | Unenroll | Remove a student's enrollment from a product | | Enrollment | Complete Subscription Cycle | Mark a subscription cycle as complete, e.g. after an external payment event | | Lesson | Toggle Progress | Mark a lesson as completed or incomplete for a student | | Tag | Add to Student | Assign one or more tags to a student for segmentation or automation |

Optional fields (phone number, expiry date, price ID, redirect URL, etc.) are grouped under Additional Fields to keep the UI clean.

Troubleshooting

Webhooks not arriving

Confirm the URL you pasted in the EzyCourse dashboard exactly matches the one displayed by n8n, including any path segments. Check that the workflow is active — n8n does not receive webhooks while a workflow is inactive.

HTTP 401 on incoming webhooks

The node rejected the request because the HMAC-SHA256 signature did not match. Verify that the Signature Token in your n8n credential matches the one in your EzyCourse Webhook (Data-Out) settings. Regenerating the token on either side without updating the other will cause this error.

HTTP 401 on action node requests

The Access Token in your credential is invalid or has been regenerated. Go to Webhook (Data-In) in your EzyCourse dashboard and copy the current token into your n8n credential.

Cannot find module 'n8n-workflow' during build

This is expected before npm install. Run npm install first. The package is a peer dependency provided by n8n at runtime.

Development

npm install
npm run build      # compile TypeScript + copy SVG icons to dist/
npm run dev        # watch mode
npm run lint       # ESLint

Unit tests — no external dependencies, always safe to run:

npm test

Integration tests — require a live EzyCourse platform and a locally exposed n8n instance:

cp .env.test.example .env.test
# fill in BASE_URL, ACCESS_TOKEN, SIGNATURE_TOKEN, WEBHOOK_URL
# for WEBHOOK_URL: run n8n locally and expose port 5678 with ngrok
npm run test:integration

Integration tests skip automatically when .env.test is absent, so the suite is safe to run in CI without credentials.

Resources

Contributing

Bug reports, feature requests, and pull requests are welcome. Please open an issue on GitHub before submitting a large change so we can discuss the approach first.

License

This project is licensed under the MIT License — see the LICENSE file for the full text.

Copyright © 2026 Dani ([email protected])

The MIT license is a permissive open-source license. It allows you to freely use, copy, modify, merge, publish, distribute, sublicense, and sell copies of this software — for personal, commercial, or any other purpose — with no obligation beyond preserving the original copyright notice and license text in any substantial copy or derivative work.

In plain terms: do whatever you want with this code, just keep the copyright header.