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-flowcore

v0.1.1

Published

n8n community node for FlowCore, the travel ERP platform: read records and run FlowCore record actions.

Readme

n8n-nodes-flowcore

n8n community node for FlowCore, the travel ERP platform. It reads FlowCore records and runs FlowCore record actions from n8n workflows.

Business logic and authorization stay in FlowCore: every request runs as the FlowCore user who owns the API key, inside that user's client (tenant), with that user's permissions. The node only orchestrates.

Installation

Self-hosted n8n only (until the package is verified by n8n).

From npm (once published): In n8n, go to Settings → Community Nodes → Install and enter n8n-nodes-flowcore. See the n8n docs on installing community nodes.

Before publication, from a build of this repository:

npm ci
npm run build
npm pack                      # creates n8n-nodes-flowcore-<version>.tgz

Install the tarball into the n8n custom extensions folder (default ~/.n8n/custom, or the directory in N8N_CUSTOM_EXTENSIONS) and restart n8n:

cd ~/.n8n/custom
npm install /path/to/n8n-nodes-flowcore-0.1.0.tgz

With Docker, mount that folder into the container (/home/node/.n8n/custom).

Credentials

Create a credential of type FlowCore API:

| Field | Description | | ----------- | ------------------------------------------------------------------------- | | Environment | Production (default) or Staging. | | API Key | Personal API key of a FlowCore user. Stored encrypted by n8n as a secret. |

The environment selects a fixed API base URL. There is no free-text URL field and no fallback from one environment to the other:

| Environment | API base URL | | ----------- | ------------------------------------ | | Production | https://app.flowcore.cloud | | Staging | https://app-staging.flowcore.cloud |

Getting an API key: in FlowCore's API key management, a user creates their own key, or an administrator creates one for a user (permissions API_KEYS_MANAGE_OWN / ADMIN_USERS_API_KEYS). The key is shown only once. Production keys start with fc_live_, Staging keys with fc_test_. Use a dedicated technical user per customer integration and give it only the role permissions the workflow needs (for example FOLLOWUPS_ADD, OPERATIONSBOOKINGS_EDIT).

Testing: n8n's Test button calls GET /me/api-key in the selected environment. It reads only the key's metadata.

One credential per customer and environment. A key belongs to exactly one FlowCore client, so create separate credential entries, for example FlowCore – Customer A (Staging) and FlowCore – Customer A (Production). Build and test the workflow against the Staging credential, then switch the node to the Production credential. There is intentionally no tenant selector: the key alone determines the customer.

The key is sent in the x-api-key header. The node never logs it, and n8n never exports it with workflows.

Resources and operations

| Resource | FlowCore model | Operations | | --------- | -------------------- | --------------------------------------------------------------------------------- | | Booking | operationsbookings | Get, Get Many, Count, Get Actions, Preview Action, Execute Action | | Contact | contacts | Get, Get Many, Count, Create, Update | | Follow-Up | followups | Get, Get Many, Count, Create, Update, Get Actions, Preview Action, Execute Action | | Invoice | invoices | Get, Get Many, Count, Get Actions, Preview Action, Execute Action | | Travel | travels | Get, Get Many, Count |

  • Get: GET /api/<model>/<id>. Returns the record.
  • Get Many: GET /api/<model>/overview. Returns one item per record. Options:
    • Return All, or a Limit. Pages are read with skip/limit, at most 300 records per request.
    • Filters: Search Text (FlowCore's free-text search) and Where (JSON) (FlowCore criteria, e.g. {"status": "BOOKED", "createdAt": {">=": "2026-01-01T00:00:00Z"}}).
    • Sort By / Sort Direction, Fields, Populate Relations.
    • Unknown fields or invalid filters are rejected by FlowCore with HTTP 400 and are not ignored silently. ISO timestamps in filters need a timezone.
  • Count: GET /api/<model>/count with the same filters. Returns { "count": n }.
  • Create / Update (contacts and follow-ups only): POST /api/<model> and PUT /api/<model>/<id>. Only the fields you set are sent.
    • Follow-ups: text, description, due date, reminder, task type, assignee. On create, also teams and a related record. The related record is read first, so a follow-up can only be attached to a record the user may read. To complete or reopen a follow-up, use the complete / reopen actions.
    • Contacts: first name, last name, email, phone, mobile, prefix, plus Other Attributes (JSON) for further FlowCore fields. FlowCore validates them.

Bookings and invoices are deliberately read-only apart from record actions: FlowCore itself treats raw writes to them as unsafe because they bypass its business workflows.

Each output item is linked to the input item it came from. With Continue On Fail, a failed item returns { error, description, httpCode } and the remaining items still run.

Record actions

Record actions are FlowCore's business operations on a record, for example cancelling a booking, creating an invoice, issuing or sending an invoice, or completing a follow-up. FlowCore decides which actions a record offers, whether the user may run them, and what they do. The node does not re-implement any of this.

  • Get Actions (GET /api/<model>/<id>/actions) lists the actions the record offers now to this user. Actions ruled out by the record's state or the user's permissions are absent.
  • Preview Action (POST …/actions/<action>/preview) shows what the action would do, without side effects. It returns summary, notices, the accepted inputs and a fingerprint.
  • Execute Action (POST …/actions/<action>) runs the action and returns the changed fields (data) and the actions available afterwards. It proceeds as follows:
    1. It checks the action list. If FlowCore no longer offers the action, the node fails without changing anything.
    2. For actions with a preview, it fetches a fresh preview and sends its fingerprint, as FlowCore requires.
    3. Actions that need an interactive FlowCore dialog (confirmation.mode = view) are refused.
    4. If you set Confirmed Preview Fingerprint (from an earlier Preview Action, e.g. after a human approval step via Send and Wait), the node sends that fingerprint instead. FlowCore then refuses with HTTP 409 if the preview has changed since the approval.

Action Name or ID is loaded from FlowCore for the resource and the Record ID entered in the node. When the record ID is an expression, set the action ID with an expression too (e.g. cancel). Action Inputs (JSON) is a flat object such as {"cancellationDate": "2026-10-01"}. Run Preview Action to see which inputs an action accepts.

Execute Action is never retried by the node. Do not enable Retry On Fail for it. If an AI agent uses the node as a tool, require human approval for that tool.

Webhooks

FlowCore can call a URL when records change. This MVP has no custom FlowCore trigger node: FlowCore has no API to register and remove webhooks, so n8n could not manage their lifecycle. Use the standard Webhook node instead.

  1. Add a Webhook node, method POST. Use a long, random path, because FlowCore does not sign its requests.

  2. Activate the workflow and copy the Production URL.

  3. In FlowCore's settings, open the webhook configuration (stored as webhooks in the client settings; requires access to Settings). Add the URL and select the modules or system events:

    • Modules are model identities such as contacts, followups or travels, and fire on create, update and destroy.
    • The booking status events are BOOKING_CHANGED_STATUS_TO_BOOKED, …_REQUESTED and …_CANCELED.
  4. FlowCore sends a JSON body like this:

    {
    	"model": "operationsbookings",
    	"action": "update",
    	"payload": [{ "id": "68c1a2b3c4d5e6f708192a3b" }],
    	"key": "…",
    	"secret": "…"
    }

    For a system event, action is the event name (e.g. BOOKING_CHANGED_STATUS_TO_CANCELED) and model is operationsbookings. payload contains only record IDs. Fetch the current record with a FlowCore Get node ({{ $json.body.payload[0].id }}) instead of trusting the webhook body.

Delivery details from FlowCore's implementation:

  • Events are debounced for about 3 seconds per record.
  • There are no retries; a failed delivery is only logged by FlowCore.
  • There is no signature header.

Security note: for compatibility with older integrations, FlowCore currently puts the client's legacy shared API key into key and the client ID into secret. n8n stores webhook bodies in its execution data. Restrict access to these executions, or turn off saving successful executions for the workflow, until FlowCore removes these fields.

A FlowCore Trigger node is a possible future extension once FlowCore offers webhook registration, deregistration and signed deliveries.

Example workflow

examples/booking-cancelled-follow-up.json can be imported via Workflows → Import from File. It runs these steps:

  1. Webhook receives BOOKING_CHANGED_STATUS_TO_CANCELED from FlowCore.
  2. FlowCore → Booking → Get reads the current booking.
  3. FlowCore → Follow-Up → Create creates a follow-up "Check cancellation fees" attached to the booking, due in two days.

After importing, select your own FlowCore credential in both FlowCore nodes. The example contains no credentials or customer data.

Development

Requirements: Node.js ≥ 22.12, npm.

npm ci
npm run dev          # starts n8n with this node hot-reloaded (http://localhost:5678)
npm run build        # n8n-node build → dist/
npm run lint         # n8n community-node lint rules
npm run format       # prettier
npm run typecheck    # TypeScript incl. tests
npm test             # fixture-based tests (no network)

Tests

  • Fixture-based tests (test/*.test.ts, run by npm test and CI) do not need network or credentials. Their fixtures in test/fixtures.ts follow FlowCore's documented response shapes. They cover the environment mapping, credential and request construction, pagination, response mapping, record actions and error handling.
  • Live tests (test/live/*.live.test.ts, npm run test:live) call a real FlowCore environment.
    • They are skipped unless they are configured explicitly.
    • They are read-only: they refuse any non-GET request, so they never change data, not even on Staging.
    • Use a test user's key:
FLOWCORE_LIVE_ENVIRONMENT=staging \
FLOWCORE_LIVE_API_KEY=fc_test_... \
FLOWCORE_LIVE_RESOURCE=booking \
FLOWCORE_LIVE_RECORD_ID=<booking id on staging> \
npm run test:live

There are no automated mutating tests against any environment. Test create, update and execute manually on Staging with test data.

Known limitations

  • Five resources only (bookings, contacts, follow-ups, invoices, travels). Other FlowCore models can be read with n8n's HTTP Request node, using the FlowCore API credential.
  • No create/update for bookings, invoices or travels. Booking creation through FlowCore's booking API (/api/v3/travel/legacy/book) is not part of the MVP.
  • No delete operation.
  • Field inputs are offered only for verified fields. Other fields use JSON with FlowCore's field names, and the node does not validate them.
  • Updates cannot clear a field (empty inputs are not sent).
  • Get Many uses offset pagination. Records written during a long "Return All" run can shift between pages. Each request returns at most 300 records.
  • Action options can only be loaded for a fixed record ID.
  • Actions that need an interactive FlowCore dialog (view mode) cannot run from n8n.
  • The node can be used as an AI agent tool. Execute Action then runs without the confirmation step of FlowCore's MCP interface. Give agents the node only with n8n's human approval for tools enabled, or limit the tool to read operations.
  • No FlowCore Trigger node (see Webhooks).
  • FlowCore has no inbound rate limiting today. Keep batch sizes and concurrency moderate anyway.

Publishing and n8n verification

Not done yet. The process, when the package is ready:

  1. Make the GitHub repository public. n8n verification requires a public repository whose URL matches repository.url in package.json.
  2. Set up npm publishing from GitHub Actions with provenance (.github/workflows/publish.yml). Prefer npm Trusted Publishing (OIDC) over a stored token. n8n requires provenance for verification since 1 May 2026.
  3. Run npm run release locally. It lints, builds, bumps the version, updates the changelog, tags and pushes. The tag triggers the publish workflow.
  4. Check the published package with npx @n8n/scan-community-package n8n-nodes-flowcore.
  5. Submit it in the n8n Creator Portal. Requirements include:

License

MIT