> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nephia.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# n8n

> The official Nephia nodes for n8n, a trigger that turns a keyword into a workflow and an action node covering the /v1 API.

`n8n-nodes-nephia` ships two nodes:

* **Nephia Trigger**: creates a keyword when you activate the workflow, deletes it when you deactivate it, and starts a run on every event.
* **Nephia**: every documented `/v1` operation, with the credit cost shown on each one.

Both are generated from the same OpenAPI spec as the [SDKs](/sdk), so a new
source or parameter appears in the node's dropdowns rather than in a changelog.

## Install

In your n8n instance: **Settings → Community nodes → Install**, then enter:

```
n8n-nodes-nephia
```

Self-hosted instances need `N8N_COMMUNITY_PACKAGES_ENABLED=true` (the default).

## Credential

Add a **Nephia API** credential:

| Field | Notes |
| - | - |
| API Key | From the dashboard's API Keys page. Sent as `x-api-key`. |
| Base URL | `https://api.nephia.cc`. Only change it for a proxy. |
| Webhook Signing Secret | Optional, see [Signature verification](#signature-verification). |

**Test** calls `GET /v1/account/credits`, which is free.

## Nephia Trigger

Pick a **Source**, describe what to watch, and set a refresh interval. The
floor differs per source and the field enforces it ([Per-Source limits](/keywords#per-source-limits)).

The node owns a [keyword](/keywords) with that one Source, and owns its whole life:
activating the workflow creates it with `POST /v1/keywords`, deactivating deletes it
with `DELETE /v1/keywords/{id}`, and the keyword id is kept in the workflow's static
data. Do not also create the keyword by hand: you would pay for two.

**Keyword name** is optional. Left empty, the keyword is named `n8n: <workflow name>`,
which is how you recognise it in the dashboard and in `GET /v1/keywords`.

### Webhook mode (default)

The keyword is created with `webhookUrl` pointing at this node's n8n webhook
URL. Nephia POSTs each event, n8n answers `200` immediately, and the workflow
runs after. One event, one item, in the [envelope](/webhooks#payload-envelope)
the API documents.

Needs an n8n instance reachable from the internet.

### Poll mode

For instances behind a firewall. The keyword is created *without* a
`webhookUrl`, and n8n asks for new events on its own schedule using the free
[replay endpoint](/webhooks#replay), `GET /v1/keywords/{id}/events?since=`. Each
item is the same body a webhook would have delivered. Nothing has to reach your network.

The trade-off is latency: you see an event on the next poll, not the second it
happens.

### Signature verification

Each delivery carries `X-Signature` ([how it is built](/webhooks#signature-verification)).
Paste your signing secret into the credential and the trigger verifies every
delivery against the raw body, rejecting anything that fails with `401`.

Leave it empty and the trigger accepts any POST to its URL. That URL is
unguessable, which is the same protection any n8n webhook has, but if the
event will drive something that matters, set the secret.

### Duplicates

Nephia retries a failed delivery at +0s, +30s and +120s, and n8n retries a
failed execution on its own terms. The trigger remembers the `event.id`s it
has seen for 24 hours and drops the repeats, but that is best-effort: if
running twice would be expensive, stay idempotent on `event.id` downstream.

### When the keyword is paused

A paused keyword (out of credits, outside your plan, paused by support) looks
exactly like a quiet one. Both modes re-read it with `GET /v1/keywords/{id}` once an
hour and emit a distinct item when the reason changes:

```json theme={null}
{
  "type": "nephia.trigger.paused",
  "keywordId": "9f8e7d6c-5b4a-4c3d-8e2f-1a0b9c8d7e6f",
  "pausedReason": "insufficient_credits",
  "isActive": false,
  "occurredAt": "2026-08-26T09:00:00.000Z"
}
```

Branch on `type` to alert yourself. `pausedReason` says what unblocks it, see
[Pause and resume](/keywords#pause). This item is produced by the node itself,
which is why its `type` is `nephia.trigger.paused` and not `keyword.paused`: in
Webhook mode the [`keyword.paused` webhook](/webhooks#keyword-events) leaves the
node on the same output, with a different envelope.

<Note>
  In **Webhook** mode the built-in **Poll Times** field is used only for this
  hourly check; events still arrive over HTTP.
</Note>

## Nephia (action node)

Pick a **Resource** and an **Operation**. The operation dropdown shows the
credit cost from the spec, so you can price a run before making it.

* **Required fields** sit at the top level; everything else is under
  **Additional Fields**.
* **Return All** follows pagination (cursor, page + per page, or page,
  whichever the operation speaks) up to **Max Pages** (default 5). Every page
  costs credits; the node logs a warning when the cap stopped it early.
* **Split Into Items** (on by default) emits one item per result. Turn it off
  to get the raw response, cursor included, as a single item.
* POSTs carry an `idempotency-key` that is reused across retries, so a retried
  create never makes a second keyword.
* `429` and upstream `503 RATE_LIMITED` are retried with `Retry-After`;
  `402` says to top up rather than to try again ([Errors](/errors)).

The **Keywords** resource covers the keyword routes: list, get, create, update,
pause, resume, results, events and activity. It is useful for listing, pausing,
resuming, or replaying events from a workflow that did not create the keyword.

## Templates

Four starting points ship with the package under `templates/`, and are
published on n8n.io:

| Template | What it does |
| - | - |
| Reddit mention → Slack, classified | Classifies the post, then posts the verdict. |
| Hacker News mention → Notion | Rows with points, author and the discussion link. |
| Daily digest of a keyword → email | Free replay of the last 24 hours. |
| Vinted price drop → Discord | Filters `listing.price_changed` down to actual drops. |

## Limits

* One keyword, with one Source, per node. Several Sources means several trigger
  nodes, and your plan's keyword cap applies ([Limits](/limits)).
* The action node's AI resource is not included; run an
  [agent step](/ai) on the keyword instead, and read it from `event.ai`.
* Copying a workflow to another instance re-creates the keyword on first
  activation, because the old one points at the old URL.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.