Description
n8n-nodes-weclapp
An n8n community node for the Weclapp ERP/CRM platform. It lets you read and write Weclapp data — customers, orders, articles, shipments, documents, and more — directly from your n8n workflows, and react to Weclapp events in real time with the built-in trigger node.
Installation
In your n8n instance, open Settings → Community Nodes → Install and enter:
n8n-nodes-weclapp
n8n will install the package and restart. The Weclapp and Weclapp Trigger nodes will appear in the node palette.
> Requires n8n ≥ 0.187.0 (community node support).
Credentials
1. Log in to your Weclapp account.
2. Click your avatar (top-right) → My Settings → API.
3. Copy your API token.
4. In n8n, create a new Weclapp API credential:
– Subdomain — the part before .weclapp.com in your URL (e.g. mycompany for mycompany.weclapp.com).
– API Token — the token you copied above.
n8n will test the credential automatically against the /user/count endpoint.
Weclapp Node
Performs CRUD operations on the following Weclapp resources:
| Resource | Create | Get by ID | Search | Count | Update | Delete | Download |
|—|:—:|:—:|:—:|:—:|:—:|:—:|:—:|
| Party (Customer / Contact) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Article | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Article Category | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Sales Order | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Quotation | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Sales Invoice | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Sales Open Item | | ✓ | ✓ | ✓ | | ✓ | |
| Shipment | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Purchase Order | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Purchase Invoice | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Incoming Goods | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Comment | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Currency | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Document | | ✓ | ✓ | ✓ | | | ✓ |
| Manufacturer | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Accounting Transaction | | ✓ | ✓ | ✓ | | | |
| Variant Article | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Warehouse Stock | | ✓ | ✓ | ✓ | | | |
| Warehouse Stock Movement | | ✓ | ✓ | ✓ | | | |
| User | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
> Read-only resources — Document, Accounting Transaction, Warehouse Stock, and Warehouse Stock Movement do not support Create, Update, or Delete.
Operations
#### Get by ID
Fetches a single record by its Weclapp internal ID.
Example — look up a customer:
- Resource:
Party (Customer / Contact) - Operation:
Get by ID - Record ID:
{{ $json.partyId }} - Custom Query — Weclapp filter syntax, e.g.
salesChannel-eq=NET1&createdDate-gt=1700000000000. Multiple conditions are ANDed by default; useor-/orGroupN-prefixes for OR logic (see Weclapp Query Syntax). - Sort — field name, prefix with
-for descending, e.g.-lastModifiedDate. - Return All — when enabled, fetches every page automatically. When disabled, use Page and Page Size to paginate manually.
- Resource:
Sales Order - Operation:
Search - Custom Query:
orderStatusId-eq=OPEN&lastModifiedDate-gt={{ Date.now() - 3600000 }} - Return All:
true - Resource:
Party (Customer / Contact) - Custom Query:
customerNumber-eq=K10001
#### Search
Returns a list of records, with optional filtering, sorting, and pagination.
Fields:
Example — find all open sales orders modified in the last hour:
Example — search for a customer by number:
##### Including referenced entities
Weclapp can return referenced records (e.g. the unit behind an article’s unitId) in the same request. Add includeReferencedEntities to the Custom Query field with a comma-separated list of reference properties:
includeReferencedEntities=unitId,articleCategoryId
Weclapp returns a single, de-duplicated referencedEntities pool shared across the whole result set — it is not aligned to individual records. Rather than attaching that whole pool to every item, the node resolves each record’s foreign keys against the pool and attaches only the matching entity inline: a field named is resolved to a single object under , and a field named to an array under . This works for any reference whose base name matches a pool key, so each item carries just its own references. When Return All is enabled, the pool is merged across pages and de-duplicated by id before resolution.
> Note: matching is done by id. If you narrow the response with properties and use the entity:prop selection syntax, include the entity’s id too (e.g. unit:id,unit:name), otherwise the pooled entities have no id to match against and nothing will be resolved.
Example output for article with Custom Query includeReferencedEntities=unitId:
{
"id": "1001",
"articleNumber": "EPM242J",
"unitId": "2770",
"unit": { "id": "2770", "name": "Stk." }
}
##### Requesting additional properties
Some Weclapp fields are calculated or complexly determined and must be explicitly requested. Add additionalProperties to the Custom Query field with a comma-separated list of property names:
additionalProperties=currentSalesPrice
Weclapp returns an additionalProperties object where each property holds an array whose index aligns with the matching entity. The node maps each record’s slice back onto that record under an additionalProperties key, so every item carries its own values. When Return All is enabled, the arrays are concatenated across pages in order to preserve that alignment.
Example output for article with Custom Query additionalProperties=currentSalesPrice:
{
"id": "1001",
"articleNumber": "EPM242J",
"additionalProperties": {
"currentSalesPrice": {
"articleUnitPrice": "39.95",
"currencyId": "256",
"quantity": "1",
"reductionAdditionItems": []
}
}
}
#### Count
Returns the number of records matching an optional filter, without fetching the records themselves. Accepts the same Custom Query filter syntax as Search (and the required entity filters for Comment / Document). The output is a single item { "count": .
Example — count open sales orders:
Sales OrderCountorderStatusId-eq=OPEN#### Create
Creates a new record. Map the fields you want to set in the Additional Fields section using n8n expressions or fixed values.
Example — create a sales order:
Sales OrderCreatecustomerId: {{ $json.customerId }}#### Update
Updates an existing record by ID. Only the fields you map are sent — unset fields are left unchanged.
Example — mark a shipment as dispatched:
ShipmentUpdate{{ $json.id }}status: SHIPPED#### Delete
Deletes a record by ID (available for writable resources only). Returns { "success": true, "id": " on success.
Example — delete a quotation:
QuotationDelete{{ $json.id }}#### Dry Run
Create, Update, and Delete expose a Dry Run toggle. When enabled, Weclapp runs its business logic and validates the payload but persists nothing — useful for validating input before committing changes. On success the response is returned without meta properties (id, version, createdDate, lastModifiedDate).
#### Download Document
Downloads a Weclapp document as a binary file (available for the Document resource only). The binary output can be passed to a Write Binary File node or an email attachment.
Example — attach a PDF invoice to an email:
1. Weclapp node: Resource Document, Operation Download Document, Record ID {{ $json.documentId }}
2. Send Email node: attach {{ $binary.data }}
Weclapp Trigger Node
Starts a workflow automatically whenever a Weclapp entity is created, updated, or deleted. It registers a webhook in Weclapp on activation and removes it on deactivation — no manual webhook setup required.
Configuration:
Created, Updated, Deleted.Example — notify Slack when a new sales order arrives:
1. Weclapp Trigger: Resource Sales Order, Events Created
2. Slack node: post New order {{ $json.orderNumber }} from {{ $json.customerName }}
Example — sync customer updates to a CRM:
1. Weclapp Trigger: Resource Party (Customer / Contact), Events Updated
2. HTTP Request node: PUT https://crm.example.com/contacts/{{ $json.id }}
Example — alert on shipment deletion:
1. Weclapp Trigger: Resource Shipment, Events Deleted
2. Send Email node: notify the logistics team
> Tip: Before your first live run, use n8n’s Pin Data feature on the trigger node to capture a sample payload. This enables field autocompletion in downstream nodes (IF, Switch, Set, etc.) without waiting for a real event.
Weclapp Query Syntax
The Custom Query field uses Weclapp’s native filter format:
fieldName-operator=value&anotherField-operator=value
Common operators:
| Operator | Meaning |
|—|—|
| eq | equals |
| ne | not equals |
| lt / gt | less / greater than |
| le / ge | less / greater than or equal |
| like | wildcard match (% = any chars) |
| null | field is null (true/false) |
Timestamps are Unix milliseconds (e.g. 1700000000000).
OR conditions
By default, multiple conditions are combined with AND. To combine conditions with OR, prefix them with or-:
or-name-eq=charlie&or-name-eq=chaplin
To mix AND and OR, assign conditions to numbered groups with orGroupN-. Conditions within the same group are ORed together, and separate groups are ANDed with each other:
orGroup1-shippingCarrierId-eq=213305372&orGroup1-shippingCarrierId-eq=113291681&orGroup2-status-eq=CANCELLED&orGroup2-status-eq=INCOMING_CANCELLED
This matches records whose carrier is one of the two IDs and whose status is CANCELLED or INCOMING_CANCELLED. Repeating the same key is required and fully supported — every value is sent to Weclapp.
> Note: Weclapp only allows filtering on filterable properties; computed Name fields (e.g. shippingCarrierName) are generally not filterable in API v2 — filter by the corresponding Id instead. Unknown filter properties are silently ignored by Weclapp, but unknown sort or properties values return an error. When Weclapp rejects a request, the node surfaces its exact message and the offending parameter.
See the Weclapp API documentation for the full list of filterable fields per entity.
License
MIT — see LICENSE.