Skip to main content
fluent-commerce icon

Fluent Commerce Connector

Sourcenpm · v0.0.1API DocsAPI ChangelogConnector Changelog

Description​

Fluent Commerce is an order management system for tracking customers, orders and inventory.

This component allows creating customers and products, looking up a customer by email address, retrieving the authenticated user, and sending custom GraphQL queries and mutations. A polling trigger reports new and updated orders on a schedule.

API Documentation​

This component was built using the Fluent Commerce GraphQL API.

Fluent Commerce offers a GraphQL-based API. This provides flexibility and control over what data is sent to Fluent, and what data is requested back.

While this component offers some actions that wrap common GraphQL queries and mutations, there are many more queries and mutations for which there aren't dedicated actions. To run a query or mutation that is not represented by an action, use the Generic GraphQL Request action.

Connections​

Fluent Commerce OAuth 2.0 Password Grant​

key: fluent-password-grant

Fluent uses OAuth 2.0 password grant type for authentication. Authenticating with Fluent requires a Client ID and Client Secret from Fluent, and end users must enter their username and password.

Prerequisites​

  • A Fluent Commerce retailer account with a username and password
  • The Fluent API host URL for the retailer
  • An OAuth 2.0 Client ID and Client Secret issued by Fluent

Setup Steps​

  1. Contact Fluent support to request an OAuth 2.0 Client ID and Client Secret for the retailer.
  2. Gather the Fluent API host URL, the retailer username, and the retailer password.

Configure the Connection​

Create a connection of type Fluent Commerce OAuth 2.0 Password Grant and enter the following:

  • Fluent Host: Enter the retailer's Fluent API endpoint, for example https://REPLACE-ME.api.fluentretail.com.
  • Retailer Username: Enter the retailer's username.
  • Retailer Password: Enter the retailer's password.
  • OAuth 2.0 Client ID: Enter the client ID obtained from Fluent support.
  • OAuth 2.0 Client Secret: Enter the client secret obtained from Fluent support.
InputNotesExample
OAuth 2.0 Client ID

A client ID obtained from Fluent support

OAuth 2.0 Client Secret

A client secret obtained from Fluent support

Fluent Host

The retailer's Fluent API endpoint

https://REPLACE-ME.api.fluentretail.com
Retailer Password

The retailer's password

Retailer Username

The retailer's username

john_doe

Triggers​

New and Updated Records​

Retrieves existing and ongoing orders from Fluent Commerce. Load history once, check for changes on a schedule, or both. | key: pollChangesTrigger

InputNotesExample
Connection

The Fluent Commerce connection to use.

Look-back Date

The date the initial sync starts from, in YYYY-MM-DD format. Cannot be a future date. Leave empty to start from the first recurrence with no backfill. When set, the initial sync seeds each record modified on or after this date once, ignoring the field and visibility filters.

2026-01-01
Retailer ID

Optional Fluent retailer ID to scope the polling query. When omitted, the connection's default tenant scope applies.

34
Show New Records

When enabled, orders whose createdOn falls after the last poll will be emitted in the created array.

true
Show Updated Records

When enabled, orders whose updatedOn falls after the last poll but were created earlier will be emitted in the updated array.

true

This trigger polls Fluent Commerce for new and updated orders on a scheduled basis.

How It Works​

  1. The trigger runs on the configured schedule.
  2. It queries Fluent for orders whose updatedOn falls between the last recurrence and the current time. When Retailer ID is set, only that retailer's orders are returned. Otherwise the connection's default tenant scope applies.
  3. Each returned order is classified as created when its createdOn is after the last recurrence, and otherwise as updated.
  4. Outside an initial sync, Show New Records and Show Updated Records each gate one of the two arrays. Turning either off leaves that array empty.
  5. Once the whole window has been read, the trigger stores the window's upper bound as its position for the next recurrence.

Both bounds of the window are inclusive, so an order updated exactly on a boundary can be returned by two consecutive recurrences.

Initial Sync

An initial sync seeds a complete starting state rather than a change feed, so inputs that narrow which changes are reported would leave gaps in it: Show New Records and Show Updated Records are ignored while it runs. It begins on the first recurrence when a Look-back Date (YYYY-MM-DD, not a future date) is set, and returns every order updated on or after that date. Left empty, there is no initial sync and the first recurrence starts from the time it runs.

The upper bound of the sync window is fixed when the sync begins, so orders updated mid-drain are picked up by the first scheduled recurrence after the sync completes. The trigger stores that bound as its position once the window is fully read, and the first incremental recurrence resumes from exactly there. Nothing in the payload marks the handoff. With batching off, the sync reads up to 20 pages of 50 orders per recurrence and resumes the same window on the next recurrence until it is drained. With batching on, the sync is drained within one recurrence.

Retailer ID still applies throughout the sync.

Batching

Batching is enabled per flow on this trigger: each changed record is dispatched as its own execution, or grouped by the configured batch size. Batch size and batch concurrency can both be overridden per instance. Raising concurrency increases the request volume sent to Fluent Commerce.

To turn it on, select the flow's trigger, open the Flow control tab, and switch on Enable Batching. Under Batch Size, keep Trigger default or choose Custom batch size. Batch Concurrency is optional; leave it blank for no batch-level limit.

With batching on, the trigger reads one page of 50 orders per round and the platform continues from the returned cursor, so a window larger than one page is drained within the same recurrence. With batching off, a window larger than 20 pages is resumed one recurrence at a time.

With batching off, a downstream step reads body.data.created and body.data.updated. With batching on, those fields do not exist: each execution receives one { "changeType": ..., "record": ... } item, or an array of them when the batch size is greater than 1. Any step reading the older shape must be updated before batching is enabled, or it breaks the moment the switch is flipped. Because batching is enabled per flow, that change is scoped to the flow rather than to the component or to other flows using the same trigger.

Returned Data​

With batching off, the trigger returns an object with two arrays: created for new orders and updated for modified orders. Fields shown are representative. The full response object includes additional properties.

Example Response
{
"data": {
"created": [
{
"id": "ORD-1042",
"ref": "WEB-000142",
"type": "STANDARD",
"status": "CREATED",
"createdOn": "2026-05-26T14:30:00.000Z",
"updatedOn": "2026-05-26T14:30:00.000Z"
}
],
"updated": [
{
"id": "ORD-980",
"ref": "WEB-000087",
"type": "STANDARD",
"status": "FULFILLED",
"createdOn": "2026-04-12T09:00:00.000Z",
"updatedOn": "2026-05-26T15:45:00.000Z"
}
]
}
}

With batching on, each execution receives one order tagged with how it changed, or an array of such items when the batch size is greater than 1. The created and updated arrays are not part of this shape.

Batched Item
{
"changeType": "created",
"record": {
"id": "ORD-1042",
"ref": "WEB-000142",
"type": "STANDARD",
"status": "CREATED",
"createdOn": "2026-05-26T14:30:00.000Z",
"updatedOn": "2026-05-26T14:30:00.000Z"
}
}
Example Payload for New and Updated Records⤓
Loading…

Actions​

Create Customer​

Create a new customer | key: createCustomer

InputNotesExample
Attributes

Custom attributes to apply to the customer. Each key becomes the attribute name, and each value is stored as a STRING attribute.

Connection

The Fluent Commerce connection to use.

Country

The customer's country

Australia
Customer Email

The email address of the customer

test@example.com
First Name

The first name of the customer (required)

John
Last Name

The last name of the customer

Doe
Phone Number

The customer's phone number

+61412345678
Promotion Opt In

When true, the customer is opted in to receive promotional communications.

false
Retailer ID

The ID of the retailer (a number)

34
Time Zone

The customer's time zone

UTC+5
Example Payload for Create Customer⤓
Loading…

Create Product​

Create a new standard product | key: createProduct

InputNotesExample
Connection

The Fluent Commerce connection to use.

Global Trade Item Number (GTIN)

The global trade number of the product

012345678905
Price Currency

Type of currency the price is in (USD, YEN, GBP, etc)

USD
Price Value

The price of the product (must be a floating-point number)

1300
Product Catalogue Ref (ID)

The reference ID (ref) of an existing product catalog

FCRG:PC:MASTER
Product Name

The name of the product (not required to be unique)

Widget
Product Ref ID

The reference ID (ref) of the new product (must be unique)

TESTPRD
Product Summary / Description

A short description of the product, stored as the product's summary.

Widgets: the new whatsits
Product Type

The type of the product

STANDARD
Example Payload for Create Product⤓
Loading…

Generic GraphQL Request​

Issue any GraphQL query or mutation with variables | key: genericRequest

InputNotesExample
Connection

The Fluent Commerce connection to use.

Query or Mutation

The GraphQL query or mutation to send to the Fluent Commerce API.

{
  me {
    id
    username
    primaryEmail
  }
}
Variables

Key-value pairs passed to the query as GraphQL variables.

Variables Object

A JSON object of GraphQL variables, for values that are not strings. Merged with Variables; on a shared key, this value wins.

{"retailerId": "34"}
Example Payload for Generic GraphQL Request⤓
Loading…

Get Current User​

Get information about the currently authenticated user | key: getCurrentUser

InputNotesExample
Connection

The Fluent Commerce connection to use.

Example Payload for Get Current User⤓
Loading…

Get Customer by Email​

Find a customer by their email address | key: getCustomerByEmailAddress

InputNotesExample
Connection

The Fluent Commerce connection to use.

Customer Email Address

The customer's email address

test@example.com
Example Payload for Get Customer by Email⤓
Loading…

Changelog​

2026-11-03​

Published the component as an npm package, so code-native integrations can install it and call its actions, triggers and data sources from code with TypeScript types

2026-10-22​

  • Fixed the New and Updated Records trigger skipping previously created orders that were modified since the last recurrence
  • Fixed Debug Mode printing the connection's password, client secret and access token to the execution logs while authenticating with Fluent Commerce
  • Fixed the Attributes input on the Create Customer action so configured attributes are sent to Fluent Commerce instead of being silently dropped
  • Updated Create Customer to omit Last Name, Phone Number, Country, and Time Zone when left empty instead of sending them to Fluent Commerce as empty text
  • Updated the Fluent Commerce OAuth 2.0 Password Grant connection to report a clear error when Fluent Commerce returns no access token
  • Updated Debug Mode to log each GraphQL request's query and variables for the actions
  • Added inline action calling support to the Get Current User, Get Customer by Email, Create Customer, and Create Product actions for improved example output during configuration
  • Added output schemas to the Get Current User, Get Customer by Email, Create Customer, and Create Product actions for improved field mapping during configuration

2026-10-21​

  • Added opt-in batching to the New and Updated Records trigger, dispatching each changed record individually or in configured batches so large backlogs drain in one recurrence; enabling it changes the shape a downstream step receives
  • Added an optional Look-back Date input for performing an initial sync of records. The initial sync backfills every record modified on or after the specified date, beginning on the first recurrence and seeding each record once while ignoring the visibility filters. Leave it empty to start from the first recurrence with no backfill

2026-05-28​

Added New and Updated Records polling trigger that monitors orders for changes, branching newly created orders to created and previously existing orders to updated, with an optional Retailer ID input to scope the query in multi-tenant environments

2026-04-30​

Updated spectral version

2026-04-07​

Added global debug support across all actions for improved troubleshooting