Description
n8n-nodes-fulfillmenttools
This is an n8n community node package for the
fulfillmenttools REST API. It lets you manage
your fulfillmenttools tenant directly from n8n workflows.
Installation · Operations · Trigger · Credentials · Development · Resources
Installation
Follow the
community nodes installation guide
and use the package name @fulfillmenttools/n8n-nodes-fulfillmenttools.
> Unverified community nodes can only be installed on self-hosted n8n. On n8n
> Cloud the package must first be published and verified by n8n.
Operations
Facility
- Create Managed Facility (
POST /api/facilities) — creates a - Create Supplier Facility (
POST /api/facilities) — creates aSUPPLIER. - Get (
GET /api/facilities/{id}) — retrieves a single facility. Select it - Get Many (
GET /api/facilities) — retrieves many facilities with optional - Search (
POST /api/facilities/search) — condition builder over the full - Update (
PATCH /api/facilities/{id}) — updates a facility. Requires the - Delete (
DELETE /api/facilities/{id}) — deletes a facility. Optional - Create (
POST /api/orders) — creates an order. Required: order date and - Get (
GET /api/orders/{id}) — retrieves a single order. Select it **From - Get Many (
GET /api/orders) — retrieves many orders with optional filters - Search (
POST /api/orders/search) — condition builder over the full - Update (
PATCH /api/orders/{id}) — updates an order. Requires the current - Create (
POST /api/carriers) — creates a carrier. Required: key (the CEP - Get (
GET /api/carriers/{id}) — retrieves a single carrier. Select it - Get Many (
GET /api/carriers) — retrieves many carriers with **Return - Update (
PATCH /api/carriers/{id}) — updates a carrier. Requires the - Create (
POST …/carriers/{carrierRef}) — connects a carrier to the - Get (
GET …/carriers/{carrierRef}) — retrieves a single connection. - Get Many (
GET …/carriers) — retrieves all carrier connections of the - Update (
PUT …/carriers/{carrierRef}) — updates a connection. Requires - Get Many (
GET /api/handoverjobs) — retrieves many handover jobs with - Get (
GET /api/handoverjobs/{handoverjobId}) — retrieves a single handover - Create (
POST /api/handoverjobs) — creates a handover job, covering the - Search (
POST /api/handoverjobs/search) — condition builder over the full - Update (
PATCH /api/handoverjobs/{handoverjobId}) — updates a handover - Create (
POST /api/inboundprocesses) — creates an inbound process. - Add Receipt (
POST /api/inboundprocesses/{id}/receipts) — adds a goods - Get (
GET /api/inboundprocesses/{id}) — retrieves a single inbound - Get Many (
GET /api/inboundprocesses) — retrieves many inbound processes - Search (
POST /api/inboundprocesses/search) — condition builder over the - Update (
PATCH /api/inboundprocesses/{id}) — updates an inbound process. - Update Purchase Order (
PUT /api/inboundprocesses/{id}/purchaseorder) — - Delete (
DELETE /api/inboundprocesses/{id}) — deletes an inbound process. - Get (
GET /api/processes/{processId}) — retrieves a single process. - Get by Reference (
GET /api/process) — retrieves the process belonging to - Search (
POST /api/processes/search) — condition builder over the full - Get History Logs (
GET /api/processes/{processId}/historylogs) — retrieves - Get Document (
GET …/documents/{documentId}) — retrieves the metadata of a - Create Document (
POST …/documents) — attaches a document. Requires - Update Document File (
PUT …/documents/{documentId}/file) — replaces the - Download Document File — downloads the file as n8n binary data into the
- Get Many (
GET …/facilities/{facilityId}/listings) — retrieves the - Get (
GET …/listings/{tenantArticleId}) — retrieves a single listing. - Search (
POST /api/listings/search) — condition builder over the full - Update (
PATCH …/listings/{tenantArticleId}) — updates a single listing. - Create and Update per Facility (
PUT …/facilities/{facilityId}/listings) — - Create and Update (
PUT /api/listings) — bulk upserts listings independent - Delete (
DELETE …/listings/{tenantArticleId}) — deletes a single listing. - Get Many (
GET /api/pickjobs) — retrieves many pick jobs with optional - Get (
GET /api/pickjobs/{pickJobId}) — retrieves a single pick job. - Create (
POST /api/pickjobs) — creates a pick job, covering the full - Search (
POST /api/pickjobs/search) — condition builder over the full - Get Delivery Note (
GET /api/pickjobs/{pickJobId}/deliverynote) — - Get Pick Run (
GET /api/pickruns/{pickRunId}) — retrieves a single pick - Create Pick Run (
POST /api/pickruns) — creates a pick run. Required: - Update Pick Run (
PATCH /api/pickruns/{pickRunId}) — modifies pick-run - Update Pick Run Pick Jobs (
PATCH /api/pickruns/{pickRunId}/pickjobs) — - Get Many (
GET /api/packjobs) — retrieves many pack jobs with optional - Get (
GET /api/packjobs/{packJobId}) — retrieves a single pack job. - Create (
POST /api/packjobs) — creates a pack job, covering the full - Search (
POST /api/packjobs/search) — condition builder over the full - Update (
PATCH /api/packjobs/{packJobId}) — updates a pack job. Requires - Get Delivery Note (
GET …/deliverynote), Get Return Note - List Parcels (
GET /api/parcels) — retrieves many parcels with **Return - Get Parcel (
GET /api/parcels/{parcelId}) — retrieves a single parcel. - Create Parcel (
POST /api/shipments/parcels) — creates a standalone - Create Shipment Parcel (
POST /api/shipments/{shipmentId}/parcels) — the - Update Parcel (
PATCH /api/parcels/{parcelId}) —ModifyParcel(status, - Search Parcels (
POST /api/parcels/search) — condition builder over - Get Parcel Delivery Note / Label / Return Note / Transfer Label
- List Shipments (
GET /api/shipments) — retrieves many shipments with - Get Shipment (
GET /api/shipments/{shipmentId}) — retrieves a single - Create Shipment (
POST /api/shipments) — creates a shipment, covering the - Update Shipment (
PATCH /api/shipments/{shipmentId}) —ModifyShipment - Search Shipments (
POST /api/shipments/search) — condition builder over - Get Shipment Delivery Note (
GET /api/shipments/{shipmentId}/deliverynote) - Create Return Note (
POST /api/returnnotes) — required order information - List Item Return Jobs (
GET /api/itemreturnjobs) — retrieves many item - Create Item Return Job (
POST /api/itemreturnjobs) — creates an item - List Item Returns (
GET …/{jobId}/itemreturns) — retrieves the item - Create Item Return (
POST …/{jobId}/itemreturns) — adds an item return. - Get Item Return (
GET …/itemreturns/{itemReturnId}) — retrieves a single - Update Returned Line Items (
PUT …/returnedlineitems) — replaces the - Update Returned Line Item (
PATCH …/returnedlineitems/{id}) — updates a - Get Item Returns (
GET /api/itemreturns) — retrieves many item returns - List (
GET /api/routingplans) — retrieves routing plans, optionally - Get (
GET /api/routingplans/{id}) — retrieves a single routing plan by ID. - Search (
POST /api/routingplans/search) — condition builder over the full - List Graphs (
GET /api/routingplansgraph) — retrieves the routing plans - List Service Jobs (
GET /api/servicejobs) — retrieves many service jobs - Get Service Job (
GET /api/servicejobs/{serviceJobId}) — retrieves a - Create Service Job (
POST /api/servicejobs) — creates a service job, - List Linked Service Jobs (
GET /api/linkedservicejobs) — retrieves many - Get Linked Service Jobs (
GET /api/linkedservicejobs/{id}) — retrieves a - Create Service Job Link (
POST …/{id}/servicejoblinks) — adds a service - Create Nested Service Job Link (
POST …/{id}/servicejoblinks/{linkId}) — - Search Linked Service Jobs (
POST /api/linkedservicejobs/search) — - List Custom Services (
GET /api/customservices) — retrieves many custom - Get Custom Service (
GET /api/customservices/{id}) — retrieves a single - Create Custom Service (
POST /api/customservices) — creates a custom - Update Custom Service (
PATCH /api/customservices/{id}) — updates a custom - List Facility Custom Services (
GET /api/facilities/{facilityId}/customservices) - Get Facility Custom Service
- Match — whether results must satisfy all conditions (
and) or any of them - Conditions — repeatable Field → Operator → Value rows. The field list
- Custom Attribute Conditions — query free-form
customAttributesby name, - Sort — one sort rule (field + direction), which is all the API accepts.
- Return All / Limit — results are cursor-paginated via
- Simplify — same reduced output as Get / Get Many.
- Additional Query Fields (JSON) — raw JSON merged into the query for
MANAGED_FACILITY. Required: name and address (company name, street, city,
postal code, country). Optional: contact, phone/email addresses, picking
methods, services, picking times, scanning rules, closing days, tags,
operative cost, coordinates/time zone, and additional fields (tenant facility
ID, status, location type, capacity, fulfillment buffer, custom attributes).
Required: name, company name, country. Optional: address details,
phone/email addresses, tags, operative cost, status, tenant facility ID,
custom attributes.
From list or By ID (a facility ID or a tenantFacilityId URN). Supports
Simplify.
filters (order by, status, type, tenant facility ID), Return All /
Limit, and Simplify.
FacilitySearchQuery: ID, name, tenant facility ID, status, type, location
type, every address and contact field, service, tags, and the key of a
connected carrier. Sort by name, status, type, location type, last modified,
city/country/postal code, service or a custom attribute. See
Search operations.
current Version (optimistic locking — get it first with Get). Exposes
the common scalar fields plus structured Address, Contact, Tags,
Picking Methods, Services, Picking Times, Scanning Rules and
Closing Days (the same widgets as Create), plus a raw-JSON field for
advanced properties (configs).
Force Deletion to cascade without pre-condition checks. Returns
{ "deleted": true }.
Order
one or more order line items (tenant article ID, title, quantity, plus
optional scannable codes and custom attributes). Optional: tenant order ID,
consumer (ID, email, addresses, facility ref, tenant facility ID, custom
attributes), status, valid-until (promises), Payment Info (currency,
localized method), Tags, Status Reasons, custom attributes, and a
raw-JSON field for advanced properties (delivery preferences, source,
stickers, custom services, pricing).
list or By ID. Supports Simplify**.
(tenant order ID, consumer ID), Return All / Limit, and Simplify.
OrderSearchQuery: tenant order ID, status, order date, every consumer
address field plus consumer ID, delivery preferences (collect facility ref
and paid flag, desired delivery time, service level), order line item article
ID/title, payment method and currency, and tags. Sort by order date or
status. See Search operations.
Version (optimistic locking — get it first with Get). Exposes comment,
preferred handling time, custom attributes, a structured Consumer, and
Order Line Items (the sent set replaces all existing line items), plus a
raw-JSON field for advanced properties (pricing).
Carrier
integration, e.g. DHL_V2) and name. Optional: status, logo URL, product
value needed, default parcel dimensions, structured **Parcel Label
Classifications (localized name, dimensions, bulky goods) and Credentials**
(key plus carrier-specific JSON values), plus a raw-JSON field for any further
advanced properties.
From list or By ID. Supports Simplify.
All / Limit and Simplify**.
current Version (optimistic locking — get it first with Get). Exposes
name, status, delivery type, lifecycle, logo URL, product value needed and
default parcel dimensions, plus a raw-JSON field for advanced properties.
Facility Carrier Connection
Connects a carrier to a facility (/api/facilities/{facilityId}/carriers). All
operations take a Facility (From list or by ID); get/create/update also take
a Carrier.
facility. Optional: name, status, structured Valid Delivery Targets,
Cutoff Time (hour/minute), Delivery Areas (country/postal code),
Tags and Parcel Label Classifications (localized name, dimensions,
bulky goods), dedicated Configuration / Credentials JSON fields, plus a
raw-JSON field for the remaining advanced properties (weekday cutoff times).
Supports Simplify.
facility. Supports Simplify.
the current Version (optimistic locking — get it first with Get).
Exposes name, status and the same structured fields as Create (valid delivery
targets, cutoff time, delivery areas, tags, parcel label classifications,
configuration, credentials), plus a raw-JSON field for advanced properties.
Handover Job
Handover jobs (/api/handoverjobs).
optional filters (search term, facility/pick-job/shipment ref, tenant order ID,
assigned user, channel, carrier refs, status, anonymized, and a target-time
range), Return All / Limit, and Simplify.
job. Supports Simplify.
full non-deprecated HandoverjobForCreation schema. Required: Facility,
Channel (delivery/collect), Order Date, Target Time. Three
structured line-item collections — Handover Job Line Items (with handed-over
quantity, status, refused/substitute JSON), Expected and Missing — each
exposing the article (tenant ID, title, image URL, weight, title-localized,
attributes), quantities, measurement units, scannable codes, tags, recordable
attributes and custom attributes. Plus structured Tags, Assigned Users,
Transfers, full Invoice/Recipient address collections, **Parcel
Info (carrier/parcel/shipment refs), Workflow Information**, and scalar
additional fields (identifiers, refs, status, cancel reason, paid, custom
attributes), with JSON fields for stickers.
HandoverJobSearchQuery: ID, facility ref, status, channel, anonymized, full/
short identifiers, tenant order ID, pick job ref, assigned users, invoice and
recipient names/emails/companies, line item article ID/title, and parcel
carrier/shipment refs. Sort by target time. See
Search operations.
job. Requires the current Version. Update Fields (status, custom
attributes) build a ModifyHandoverjob action; extra raw actions can be
appended as JSON.
Inbound
Inbound processes (/api/inboundprocesses).
Required: facility. Optional: tenant inbound process ID, on hold, scannable
codes, custom attributes, a structured Purchase Order (order date,
requested date, status, supplier) with Purchase Order Line Items (article,
quantity), and a single Receipt (received date, status) with **Received
Items** (article, accepted/rejected quantity). Multiple receipts remain
available via the raw-JSON field.
receipt to an inbound process: received date, status, ASN ref, comment, and
received items (article, accepted/rejected quantity, storage location).
process. Select it From list or By ID. Supports Simplify.
with optional filters (sort, status, facility ref, scannable code, search
term), Return All / Limit, and Simplify.
full InboundProcessSearchQuery: ID, tenant inbound process ID, status,
facility ref, inbound date, scannable codes, the purchase order (ID, status,
order date, requested date and type, supplier name, transfer ID, article ID)
and receipts (ID, status, received date). Sort by last modified, purchase
order created/requested date/supplier, or a custom attribute. See
Search operations.
Requires the current Version (optimistic locking — get it first with
Get). Exposes on hold, scannable codes and custom attributes. Returns the
updated process.
creates or replaces the purchase order of an inbound process. Requires the
current Version (optimistic locking — get it first with Get) and the
same structured Purchase Order / Purchase Order Line Items fields as
Create. Returns the updated process.
Returns { "deleted": true }.
Process
Covers the Processes (Core) endpoints. A process ties together the order, pick
jobs, shipments and returns that belong to one fulfillment. Operations that take
a Process offer it From list (searched by tenant order ID) or By ID.
Supports Simplify.
a Reference Type (tenant order ID, order, pick job, shipment, handover job
or return ref) and its value. Supports Simplify.
ProcessSearchQuery: process ID, created date, all the entity refs (order,
pick/pack/handover/service jobs, shipments, returns, routing plans, documents,
external actions, flat refs), the status/operative/DOMS/inventory/return
statuses, tags, a full-text Search Term, and cross-entity referenced
filters (article ID, service type, target time). Sort by process ID, any
status, active facility name/country, or referenced target time / parcel
tracking status. See Search operations.
the process history with optional filters (type, username, facility name,
order by, collapse consecutive duplicates) plus Return All / Limit.
document attached to the process. Both Process and Document ID are
required, matching the endpoint’s two path parameters; a process lists its
documents under documentRefs.
Document Type (PDF, PNG, JPG, GIF, JPEG, XML, JSON, ZPL) and Section
(order, pick job, pack job, handover job, parcel, packing target container).
The file is optional and comes from an input Binary Field, a **Base64
String, or is omitted entirely; Priority** is available under Options.
file of a document. Requires the current Version (optimistic locking — get
it first with Get Document) and a file from a binary field or base64.
field named in Put Output File in Field. Look Up By picks the endpoint:
Process and Document (GET …/processes/{processId}/documents/{documentId}/file)
or Document Only (GET /api/documents/{documentId}/file). The two require
different API permissions (DOCUMENTSETREAD vs PROCESS_READ), so pick
whichever your API user is granted. The output file name comes from the
response’s content-disposition header, falling back to the document ID plus
an extension derived from the content type.
Listing
Listings (/api/facilities/{facilityId}/listings and /api/listings). A listing
is uniquely identified by its facility plus tenantArticleId. Operations that
address a single facility offer it From list or By ID.
listings of a facility with an optional Tenant Article IDs filter,
Return All / Limit, and Simplify.
Optional Locale resolves localized fields. Supports Simplify.
ListingSearchQuery: ID, tenant article ID, facility ref, status, out-of-stock
behaviour, price and weight (numeric operators), measurement unit key, category
refs, tags, created and availability-timeframe dates. Sort by tenant article
ID, last modified, or a custom attribute. See Search operations.
Requires the current Version (optimistic locking — get it first with
Get). The Update Fields collection is wrapped in one ModifyListing
action; extra raw actions can be appended as JSON.
creates or replaces the listings of one facility. The Listings collection
takes one entry per listing (tenant article ID required, plus the shared
fields and an optional version).
Every listing (here and in Create and Update and Update) exposes the
full non-deprecated ListingForCreation schema as proper form fields: scalars
(title, status, image URL, measurement unit key, out-of-stock behaviour, legal
HS code), comma-separated lists (category refs, scannable codes), structured
Tags (ID + value), Title Localized (locale + value translations),
Attributes (key, value, type, category, priority), Scanning Rules
(type + priority), Stock Properties (key, input type, required, default),
Recordable Attributes (localized key, recording rule, value — not on bulk),
Stock Available Until (calculation base + modifier), and the Alpha
out-of-stock config (preorder availability start, restockable-in-days, plus a
JSON field for the by-context behaviours). Custom Attributes stays JSON (it
is free-form), and an Additional Fields (JSON) hatch covers anything else.
of facility. Each Listings entry needs a tenant article ID and title, and a
Targeting Strategy: Single Facility (a facility ref or tenant facility ID
plus optional version) or Multi Selector (a JSON array of facility selectors).
Entries times selectors must not exceed 25.
Returns { "deleted": true }.
Pick Job
Picking (Operations) endpoints — pick jobs, their delivery notes, and pick runs.
filters (search term, facility/order ref, tenant order ID, assigned user,
consumer name, channel, status, and order-date / target-time ranges),
Return All / Limit, and Simplify.
Supports Simplify.
non-deprecated PickJobForCreation schema. Required: Facility, **Order
Date, and one or more Pick Line Items**. Each line item exposes the article
(tenant ID, title, image URL, weight, structured Title Localized and
Article Attributes), quantity and secondary quantity, measurement unit keys,
global line item ID, scannable codes, structured Tags and **Recordable
Attributes**, and dedicated JSON fields for the deep structures (allowed
substitutes, partial stock locations, measurement validation, stickers).
Top-level: order/tenant-order refs, short ID, status, operative process ref,
routing plan ref, process ID, preferred picking methods, payment currency,
picking start-latest-at, custom attributes, structured Tags, **Assigned
Users (by ID or username) and Transfers**, plus named JSON fields for
Delivery Information, Expected Pick Line Items, Stickers and
Workflow Information.
PickJobSearchQuery: ID, facility/order ref, tenant order ID, consumer name,
status, preferred picking method, tenant article ID, transfer ID, and the
created / last-modified / target-time dates. Sort by created, last modified,
target time or tenant order ID. See Search operations.
downloads the delivery-note PDF as n8n binary data into the field named in
Put Output File in Field. Optional Locale.
run.
Facility and comma-separated Pick Job Refs. Optional pick run type
(batch / multi order) and status.
line items. Requires the current Version; each Line Item Modification
(line item ID, picked / secondary-picked quantities, status) becomes a
ModifyPickRunLineItem action, and extra raw actions can be appended as JSON.
removes a pick job from a pick run. Requires the current Version and the
Pick Job Ref to Remove; returns the updated pick run.
Pack Job
Packing (Operations) endpoints — pack jobs and their documents.
filters (search term, facility/order/pick-job ref, process ID, tenant order ID,
short ID, article title, assigned/modified-by user, channel, source container
codes, status, anonymized, and order-date / target-time ranges), Return All
/ Limit, and Simplify.
Supports Simplify.
non-deprecated PackJobForCreation schema. Required: Facility, one or more
Line Items, and Workflow Information (defaults to not part of a
workflow). Each line item exposes the article (tenant ID, title, image URL,
weight, structured Title Localized and Article Attributes, custom
attributes), quantities and measurement units, global line item ID, scannable
codes, service job refs, structured Tags and Recordable Attributes, and
JSON fields for stickers. Top-level: order/pick-job/process refs, tenant order
ID, short ID, recipient name, status, delivery channel, order date, target time,
operative process ref, custom attributes, structured Tags, **Assigned
Users, Transfers, and full Invoice/Recipient** address collections
(street, city, coordinates, phone numbers, etc.).
PackJobSearchQuery: ID, facility ref, status, short ID, tenant order ID,
invoice and recipient names/emails/companies, line item article ID/title,
packing source container codes, and order-date / last-modified / target-time
dates. Sort by last modified, order date or target time. See
Search operations.
the current Version. Update Fields (status, custom attributes) build a
ModifyPackJob action; Line Item Modifications (line item ID + packed)
build ModifyPackLineItem actions; Pause Pack Job adds a PausePackJob
action with optional packed-amount updates; and extra raw actions can be
appended as JSON.
(GET …/returnnote), Get Transfer Label (GET …/transferlabel) — download
the respective PDF as n8n binary data into the field named in **Put Output File
in Field**.
Shipment
Covers both parcels and shipments (Shipping endpoints). All PDF downloads land in
the binary field named in Put Output File in Field.
Parcels:
All / Limit and Simplify**.
parcel, covering the full non-deprecated ParcelForCreation schema: Items
(article + description), structured Invoice/Recipient addresses,
Dimensions, Services (11 flags), Pick-Up Information, Transfers,
scalar fields (carrier ref/product, product value + currency + type, payment
currency, short ID, status, tenant/parcel IDs, load unit refs, shipping
container number), and JSON fields for sender, return address and result.
same parcel fields for an existing shipment (carrier ref is ignored here).
carrier product, product values, dimensions, services, pick-up info, result)
plus a ModifyParcelLoadUnit action from Load Unit Refs; extra raw actions
as JSON.
ParcelSearchQuery (ID, carrier/facility/shipment refs, status, short ID,
tenant order ID, invoice/recipient names, item article, carrier tracking
number, dates). See Search operations.
(GET /api/parcels/{parcelId}/{deliverynote|labels/{type}|returnnote|transferlabel})
— PDF downloads. The label operation adds a Label Document picker (send /
return / customs / all, PDF or ZPL).
Shipments:
filters (search term, facility/carrier/pick-job refs, carrier keys, status,
parcel status, tenant order ID, target-time range, anonymized), Return All
/ Limit and Simplify.
shipment.
full non-deprecated ShipmentForCreation schema: required facility, order date
and target time; Line Items (article, tags, recordable attributes),
structured Invoice/Postal/Target addresses, Transfers, Tags,
scalar fields, and JSON fields for source address and carrier services.
(status, carrier ref/product, pick job ref, payment currency, target address);
extra raw actions as JSON.
ShipmentSearchQuery (ID, carrier key/ref, facility/pick-job refs, status,
parcel status, tenant order ID, anonymized, dates). See
Search operations.
— PDF download.
Return notes:
and Items (title, quantity, substitutes); optional company and delivery
addresses, QR code content, and a JSON field for typed delivery addresses.
Return
Item return jobs and item returns (Returns (Operations) endpoints).
return jobs with filters (facility ID, job/return scannable codes, job/return
status, search term, anonymized), Return All / Limit and Simplify.
return job, covering the full ItemReturnJobForCreation schema. Required:
Origin Facility Refs, Status, at least one Consumer Address, and at
least one Returnable Line Item. Line items expose the article (tenant ID,
title, image URL, weight, localized title, attributes), delivered quantity,
global line item ID, scannable codes, service job refs and recordable
attributes. Also Not Returnable Line Items and scalar fields.
returns of a job. Supports Simplify.
Requires the current Item Return Job Version, Return Facility Ref,
Status, and Returned Line Items (line item ref, status, tenant article
ID, localized item condition, decision reason, scanned codes, recordable
attributes, and a JSON field for reasons).
item return. Supports Simplify.
returned line items of an item return. Requires the job version and the same
Returned Line Items collection.
single returned line item. Requires the job version; Update Fields exposes
status, localized decision reason + comment, and a refund (status plus either a
percent or a value + currency).
across jobs with filters (search term, item-return and line-item status, order
by, facility refs, anonymized), Return All / Limit and Simplify.
Routing Plan
Routing plans (Routing Plans (DOMS) endpoints). All read-only.
filtered by an Order Ref. Supports Simplify.
Supports Simplify.
RoutingPlanSearchQuery: order/pick-job refs, process ID, priority, split
count, reroute reason, status, order date, provisioning time, delivery
preferences (collect facility/paid, preferred/supplying facilities, target
time), earliest/latest picking start (carrier ref + date), order line item ID,
target address (city/country/province/street) and history created date. Sort by
order date/ref, process ID, provisioning time, status or anonymized. See
Search operations.
graph ({ nodes, edges }) for a process, optionally filtered by a **Process
Ref**.
Service
Covers service jobs and linked service jobs (Services endpoints).
with filters (facility ref, status, channel, target-time range, order by,
search term, assigned user), Return All / Limit and Simplify.
single service job.
covering the full ServiceJobForCreation schema. Required: Facility and
Target Time. Structured Line Items and Required Line Items (article,
quantities, measurement units, recordable attributes), **Additional
Information (ref/tenant ref + typed value), Assigned Users**, and scalar
fields (custom service ref, tenant custom service ID, service job link ref,
process refs, short ID, tenant order ID, custom attributes).
linked service jobs groups with filters (facility IDs, status, channel,
target-time range, order by, search term, modified-by user), Return All /
Limit and Simplify.
single group.
job (by Service Job Ref) to a linked service jobs group.
adds a service job link nested under an existing link.
condition builder over LinkedServiceJobsSearchQuery (ID, facility ref,
status, channel, consumer name, invoice/shipping address, article titles,
service name, additional information, linked ref, tenant order ID, last
modified, target time). See Search operations.
Custom services:
services with an optional Tenant Custom Service ID filter, Return All /
Limit and Simplify.
custom service.
service, covering the full CustomServiceForCreation schema. Required:
localized Name, Status (active/inactive), and Items Required
(mandatory/none). Optional localized Description, structured **Additional
Information** (localized name/description, value type, mandatory flag, tenant
ID), execution time, image refs, items-returnable flag, tenant custom service
ID and custom attributes.
service (via CustomServiceForUpdate). Requires the current Version;
Update Fields exposes localized name/description, status, items required,
items returnable, execution time, tenant custom service ID and custom
attributes.
— retrieves the custom services connected to a facility, with Return All /
Limit and Simplify.
(GET /api/facilities/{facilityId}/customservices/{customServiceId}) —
retrieves a single facility custom service connection.
Search operations
Facility, Order, Inbound, Process, Listing, Pick Job, Pack Job, Handover Job,
Shipment (parcels and shipments), Service (linked service jobs) and Routing Plan
each have a Search operation backed by the fulfillmenttools search API
(POST /api/{entity}/search), which is far more expressive than the fixed **Get
Many** filters. They share the
same UI:
(or).
is the resource’s full queryable schema, and both the operator list and the
value widget adapt to the field you pick:
| Field type | Operators | Value widget |
| —————- | ——————————————————————– | ————— |
| Text | Equals, Not Equals, Is One Of, Is Not One Of | text |
| Text (searchable)| the above plus Matches Regex | text |
| Fixed values | Equals, Not Equals, Is One Of | multi-select |
| Full-text | Matches Regex | text |
| True/false | Equals, Not Equals | toggle |
| Number | Equals, Not Equals, Is One Of, Is Not One Of, Greater/Less Than (or Equal) | text |
| Date | Equals, Not Equals, Before, After, On or Before, On or After, Relative | date or -P1D |
For Is One Of / Is Not One Of, separate text values with commas. The
relative date operators take an ISO-8601 duration relative to now (-P1D for
yesterday, P1W for next week).
with a type (string, number, boolean, date) and a comparison operator. Names
containing a period or starting with $ are rejected, as the API requires.
Not shown for Process, whose query schema has no custom attributes.
pageInfo.endCursor behind the scenes; Limit stops early.
anything not exposed above, such as nested and / or groups or map-valued
filters (stock properties, localized titles).
Unsupported operator/field combinations (for example Matches Regex on a field
the API models as an exact-match string) are rejected before the request with an
error naming the parameter.
Trigger
The fulfillmenttools Trigger node starts a workflow when a tenant event is
delivered to its webhook. On activation it registers a WEBHOOK subscription in
fulfillmenttools (POST /api/subscriptions); on deactivation it removes the
subscription. Pick one Event to subscribe to and optionally name the
subscription.
Supported events span order, pick job, pack job, stow job, handover job,
shipment, parcel, routing plan, return, inventory/stock, listing, storage
location, inbound delivery/process, facility, facility group, service job,
expiry entity, external action, process, and user lifecycle events — see the
node’s Event dropdown for the full list. See the
fulfillmenttools eventing docs
for details.
> Webhook triggers need a callback URL reachable from fulfillmenttools. On n8n
> Cloud this is automatic. For local development, expose n8n with a public URL
> (the bundled npm run dev:local starts a Cloudflare tunnel and wires
> WEBHOOK_URL).
Credentials
fulfillmenttools authenticates against Google Identity Platform. The node
exchanges your API user credentials for a short-lived JWT and sends it as a
Bearer token on every request. n8n refreshes the token automatically when it
expires.
Create a fulfillmenttools API credential with:
| Field | Description |
| —————- | ————————————————————————— |
| API Base URL | https:// (no trailing slash) |
| Auth Key | The Google Identity Platform API key (AUTHKEY) provided for your tenant |
| Username (Email) | Email address of the API user (e.g. user@ocff-) |
| Password | Password of the API user |
n8n tests the credential by calling GET /api/facilities.
Compatibility
Built and tested against the current n8n community node tooling
(@n8n/node-cli). Requires Node.js 20.15 or later.
Development
This package uses the official n8n-node CLI:
npm install # install dependencies
npm run dev # official runner (starts n8n via npx n8n@latest)
npm run build # compile + bundle assets into dist/
npm run lint # run the n8n node lint rules (add :fix to autofix)
npm test # build, then validate the built node descriptions
npm run scan # run n8n's approval scanner against the working tree
npm run verify # the full release gate: lint + test + scan
npm run release # verify, then changelog, tag and publish to npm
Before releasing
npm run verify is the gate that decides whether n8n will approve the release.
CI runs it on every push and pull request, and npm run release runs it before
touching the version.
The important part is npm run scan. It executes n8n’s own approval scanner
(@n8n/scan-community-package) locally, against both the sources and the packed
tarball. The scanner ignores eslint-disable comments, so npm run lint can
pass while the review fails — that is exactly what happened to 1.2.0. Never
silence an n8n lint rule with a disable comment; fix the code instead.
npm provenance is the one check that needs a published version, so the publish
workflow runs the real scanner CLI against the release right after it lands and
fails the run if it would be rejected.
Local run helper (dev:local)
If npm run dev fails to start n8n in your environment (recent Node versions
crash npx n8n@latest), use the bundled helper instead. In one command it:
links this package into n8n’s custom-extensions folder, builds, watches
TypeScript for hot reload, starts a Cloudflare tunnel, and starts a
globally-installed n8n (npm install -g n8n@1) wired to the tunnel URL:
npm run dev:local # link + build + watch + tunnel + n8n
npm run dev:local:no-tunnel # same, without the tunnel (action nodes only)
The tunnel (on by default) needs cloudflared (brew install cloudflared) and
gives fulfillmenttools a public callback URL so the Trigger node can receive
events. The URL is printed on startup and changes each run — re-activate
trigger workflows after restarting. If cloudflared isn’t installed,
dev:local still starts n8n, just without the tunnel. Stop with Ctrl+C.
Extending the package
Adding a new resource is a three-step pattern:
1. Add a description file under nodes/Fulfillmenttools/descriptions/ exporting
the resource’s operations and fields (see FacilityDescription.ts).
2. Re-export it from descriptions/index.ts and register the resource option in
Fulfillmenttools.node.ts.
3. Add a branch to the execute router that builds the request body and calls
fulfillmenttoolsApiRequest.
All requests share the authenticated fulfillmenttoolsApiRequest helper in
GenericFunctions.ts. For list endpoints use fulfillmenttoolsApiRequestAllItems
(startAfterId paging); for the POST /api/{entity}/search endpoints use
fulfillmenttoolsSearchRequest, which handles the pageInfo.endCursor cursor
paging and an optional result limit.
Binary downloads (the …/file endpoints) use fulfillmenttoolsApiRequestFile,
which returns the raw bytes plus the response headers so the caller can build
n8n binary data with a sensible file name and MIME type.
Adding a Search operation to a resource needs no new UI or request code:
describe its queryable fields and sort keys once in SearchConfigs.ts, then
export createSearchFields( from descriptions/SearchDescription.ts
and register the config in searchConfigs. SearchFunctions.ts turns the same
registry into the request body, and the node’s execute router dispatches every
search operation through it.