Fluent Commerce Logo
Docs

Configure Multi-Customer-Tier Sourcing Logic

How-to Guide

Author:

Kirill Gaiduk

Changed on:

2 Oct 2025

Key Points

  • Use the Responsive Sourcing Framework to tailor sourcing by Customer tier, Order value, and campaign windows
  • Use the `createSourcingProfile` mutation to create new versions of Sourcing Profiles, which are immutable
  • Activate relevant Sourcing Profiles versions with the `activateSourcingProfile` mutation
  • Reference Sourcing Profiles within the corresponding Workflows
No alt text provided

Steps

Step arrow right iconCreate Sourcing Profile

1. Use the `createSourcingProfile` mutation to create a new Sourcing Profile, including its:

  • Primary Sourcing Strategies with their
  • Sourcing Conditions and Criteria

2. Configure your Sourcing Profile using the `CreateSourcingProfileInput` fields:

  • Assign a unique Reference for the Profile (for example, `USA_TIERED`)
  • Set Default Virtual Catalog to `BASE:USA` (or as required)
  • Set Default Network to `USA` (or as required)
  • Set Default Max Split to 5

3. Configure Primary Sourcing Strategies for:

  • Q3 Boost Strategy: Active only during the September campaign window; prioritizes proximity for Any-tier Customers
  • Gold Strategy: Preferred proximity for Gold-tier Customers; uses the Profile’s default flexibility for splitting Fulfillments when needed
  • Silver (Big) Strategy: For Silver Orders with total price ≥ 1000; applies banded distance and daily-capacity ranking. Allows up to 4 Fulfillments (`maxSplit` 3) to maintain service quality for higher-value Silver Orders
  • Silver (Small) Strategy: For Silver Orders with total price < 1000; applies distance exclusion, inventory-availability banding, and daily-capacity ranking. Limits to up to 2 Fulfillments (`maxSplit` 1) to reduce operational cost and complexity for smaller Orders
  • Bronze Strategy: For Bronze Customers; enforces distance and location-type exclusions with inventory-availability ranking. Restricted to a single Fulfillment only (`maxSplit` 0) to keep the most economical tier simple and cost-efficient

4. Organize Strategies in the `"sourcingStrategies": []` array to reflect the priority order:

  • Priority 1 → `Q3_Boost`
  • Priority 2 → `Gold`
  • Priority 3 → `Silver_Big`
  • Priority 4 → `Silver_Small`
  • Priority 5 → `Bronze`

5. Define Sourcing Conditions:

  • `orderCreationDateBetween` for campaign windows
  • `customerTierIn` for tier-based routing
  • `totalPriceGreaterThanOrEquals` and `totalPriceLessThan` for Order monetary value segmentation

6. Define Sourcing Criteria:

  • `locationDistance`, `locationDistanceBanded`, or `locationDistanceExclusion` to enforce distance rules
  • `locationDailyCapacity` to apply capacity-aware ranking
  • `inventoryAvailability` or `inventoryAvailabilityBanded` to ensure sufficient stock
  • `locationTypeExclusion` to prevent warehouse use for specific tiers
Sample createSourcingProfile Payload
1mutation createSourcingProfile($input: CreateSourcingProfileInput) {
2    createSourcingProfile (input: $input) {
3        id
4        ref
5        version
6        versionComment
7        name
8        description
9        status
10        user {
11            id
12        }
13        createdOn
14        updatedOn
15        retailer {
16            id
17        }
18        defaultVirtualCatalogue {
19            ref
20        }
21        defaultNetwork {
22            ref
23        }
24        defaultMaxSplit
25        sourcingStrategies {
26            id
27            ref
28            sourcingProfile {
29                id
30            }
31            name
32            description
33            status
34            priority
35            createdOn
36            updatedOn
37            virtualCatalogue {
38                ref
39            }
40            network {
41                ref
42            }
43            maxSplit
44            sourcingConditions {
45                name
46                type
47                params
48            }
49            sourcingCriteria {
50                name
51                type
52                params
53            }
54        }
55        sourcingFallbackStrategies {
56            id
57            ref
58            sourcingProfile {
59                id
60            }
61            name
62            description
63            status
64            priority
65            createdOn
66            updatedOn
67            virtualCatalogue {
68                ref
69            }
70            network {
71                ref
72            }
73            maxSplit
74            sourcingConditions {
75                name
76                type
77                params
78            }
79            sourcingCriteria {
80                name
81                type
82                params
83            }
84        }
85    }
86}
1{
2  "input": {
3    "ref": "USA_TIERED",
4    "versionComment": "First version of USA_TIERED SP",
5    "name": "USA tiered",
6    "description": "USA tiered SP",
7    "retailer": {
8      "id": 1
9    },
10    "defaultVirtualCatalogue": {
11      "ref": "BASE:USA"
12    },
13    "defaultNetwork": {
14      "ref": "USA"
15    },
16    "defaultMaxSplit": 5,
17    "sourcingStrategies": [
18      {
19        "ref": "Q3_Boost",
20        "name": "Q3 Boost",
21        "description": "Q3 Boost SS",
22        "status": "ACTIVE",
23        "sourcingConditions": [
24          {
25            "name": "orderCreationDateBetween",
26            "type": "fc.sourcing.condition.path",
27            "params": {
28              "path": "createdOn",
29              "operator": "between",
30              "value": ["2025-09-01T00:00:00Z", "2025-09-30T23:59:59Z"]
31            }
32          }
33        ],
34        "sourcingCriteria": [
35          {
36            "name": "locationDistance",
37            "type": "fc.sourcing.criterion.locationDistance"
38          }
39        ]
40      },
41      {
42        "ref": "Gold",
43        "name": "Gold",
44        "description": "Gold SS",
45        "status": "ACTIVE",
46        "sourcingConditions": [
47          {
48            "name": "customerTierIn",
49            "type": "fc.sourcing.condition.path",
50            "params": {
51              "path": "customer.attributes.byName.tier",
52              "operator": "in",
53              "value": ["Gold"]
54            }
55          }
56        ],
57        "sourcingCriteria": [
58          {
59            "name": "locationDistance",
60            "type": "fc.sourcing.criterion.locationDistance"
61          }
62        ]
63      },
64      {
65        "ref": "Silver_Big",
66        "name": "Silver (Big)",
67        "description": "Silver (Big) SS",
68        "status": "ACTIVE",
69        "maxSplit": 3,
70        "sourcingConditions": [
71          {
72            "name": "customerTierIn",
73            "type": "fc.sourcing.condition.path",
74            "params": {
75              "path": "customer.attributes.byName.tier",
76              "operator": "in",
77              "value": ["Silver"]
78            }
79          },
80          {
81            "name": "totalPriceGreaterThanOrEquals",
82            "type": "fc.sourcing.condition.path",
83            "params": {
84              "path": "totalPrice",
85              "operator": "greater_than_or_equals",
86              "value": 1000
87            }
88          }
89        ],
90        "sourcingCriteria": [
91          {
92            "name": "locationDistanceBanded",
93            "type": "fc.sourcing.criterion.locationDistanceBanded",
94            "params": {
95              "value": [50, 150, 300, 600, 1000, 1400],
96              "valueUnit": "miles"
97            }
98          },
99          {
100            "name": "locationDailyCapacity",
101            "type": "fc.sourcing.criterion.locationDailyCapacity"
102          }
103        ]
104      },
105      {
106        "ref": "Silver_Small",
107        "name": "Silver (Small)",
108        "description": "Silver (Small) SS",
109        "status": "ACTIVE",
110        "maxSplit": 1,
111        "sourcingConditions": [
112          {
113            "name": "customerTierIn",
114            "type": "fc.sourcing.condition.path",
115            "params": {
116              "path": "customer.attributes.byName.tier",
117              "operator": "in",
118              "value": ["Silver"]
119            }
120          },
121          {
122            "name": "totalPriceLessThan",
123            "type": "fc.sourcing.condition.path",
124            "params": {
125              "path": "totalPrice",
126              "operator": "less_than",
127              "value": 1000
128            }
129          }
130        ],
131        "sourcingCriteria": [
132          {
133            "name": "locationDistanceExclusion",
134            "type": "fc.sourcing.criterion.locationDistanceExclusion",
135            "params": {
136              "value": 300,
137              "valueUnit": "miles"
138            }
139          },
140          {
141            "name": "inventoryAvailabilityBanded",
142            "type": "fc.sourcing.criterion.inventoryAvailabilityBanded",
143            "params": {
144              "value": [50, 75, 100]
145            }
146          },
147          {
148            "name": "locationDailyCapacity",
149            "type": "fc.sourcing.criterion.locationDailyCapacity"
150          }
151        ]
152      },
153      {
154        "ref": "Bronze",
155        "name": "Bronze",
156        "description": "Bronze SS",
157        "status": "ACTIVE",
158        "maxSplit": 0,
159        "sourcingConditions": [
160          {
161            "name": "customerTierIn",
162            "type": "fc.sourcing.condition.path",
163            "params": {
164              "path": "customer.attributes.byName.tier",
165              "operator": "in",
166              "value": ["Bronze"]
167            }
168          }
169        ],
170        "sourcingCriteria": [
171          {
172            "name": "locationDistanceExclusion",
173            "type": "fc.sourcing.criterion.locationDistanceExclusion",
174            "params": {
175              "value": 150,
176              "valueUnit": "miles"
177            }
178          },
179          {
180            "name": "locationTypeExclusion",
181            "type": "fc.sourcing.criterion.locationTypeExclusion",
182            "params": {
183              "value": ["Warehouse"]
184            }
185          },
186          {
187            "name": "inventoryAvailability",
188            "type": "fc.sourcing.criterion.inventoryAvailability"
189          }
190        ]
191      }
192    ],
193    "sourcingFallbackStrategies": []
194  }
195}
1{
2    "data": {
3        "createSourcingProfile": {
4            "id": "5018",
5            "ref": "USA_TIERED",
6            "version": 1,
7            "versionComment": "First version of USA_TIERED SP",
8            "name": "USA tiered",
9            "description": "USA tiered SP",
10            "status": "ACTIVE",
11            "user": {
12                "id": "1982"
13            },
14            "createdOn": "2025-09-27T12:56:14.788Z",
15            "updatedOn": "2025-09-27T12:56:14.788Z",
16            "retailer": {
17                "id": "1"
18            },
19            "defaultVirtualCatalogue": {
20                "ref": "BASE:USA"
21            },
22            "defaultNetwork": {
23                "ref": "USA"
24            },
25            "defaultMaxSplit": 5,
26            "sourcingStrategies": [
27                {
28                    "id": "9741",
29                    "ref": "Q3_Boost",
30                    "sourcingProfile": {
31                        "id": "5018"
32                    },
33                    "name": "Q3 Boost",
34                    "description": "Q3 Boost SS",
35                    "status": "ACTIVE",
36                    "priority": 1,
37                    "createdOn": "2025-09-27T12:56:14.800Z",
38                    "updatedOn": "2025-09-27T12:56:14.800Z",
39                    "virtualCatalogue": null,
40                    "network": null,
41                    "maxSplit": null,
42                    "sourcingConditions": [
43                        {
44                            "name": "orderCreationDateBetween",
45                            "type": "fc.sourcing.condition.path",
46                            "params": {
47                                "path": "createdOn",
48                                "value": [
49                                    "2025-09-01T00:00:00Z",
50                                    "2025-09-30T23:59:59Z"
51                                ],
52                                "operator": "between"
53                            }
54                        }
55                    ],
56                    "sourcingCriteria": [
57                        {
58                            "name": "locationDistance",
59                            "type": "fc.sourcing.criterion.locationDistance",
60                            "params": null
61                        }
62                    ]
63                },
64                {
65                    "id": "9744",
66                    "ref": "Gold",
67                    "sourcingProfile": {
68                        "id": "5018"
69                    },
70                    "name": "Gold",
71                    "description": "Gold SS",
72                    "status": "ACTIVE",
73                    "priority": 2,
74                    "createdOn": "2025-09-27T12:56:14.799Z",
75                    "updatedOn": "2025-09-27T12:56:14.799Z",
76                    "virtualCatalogue": null,
77                    "network": null,
78                    "maxSplit": null,
79                    "sourcingConditions": [
80                        {
81                            "name": "customerTierIn",
82                            "type": "fc.sourcing.condition.path",
83                            "params": {
84                                "path": "customer.attributes.byName.tier",
85                                "value": [
86                                    "Gold"
87                                ],
88                                "operator": "in"
89                            }
90                        }
91                    ],
92                    "sourcingCriteria": [
93                        {
94                            "name": "locationDistance",
95                            "type": "fc.sourcing.criterion.locationDistance",
96                            "params": null
97                        }
98                    ]
99                },
100                {
101                    "id": "9742",
102                    "ref": "Silver_Big",
103                    "sourcingProfile": {
104                        "id": "5018"
105                    },
106                    "name": "Silver (Big)",
107                    "description": "Silver (Big) SS",
108                    "status": "ACTIVE",
109                    "priority": 3,
110                    "createdOn": "2025-09-27T12:56:14.799Z",
111                    "updatedOn": "2025-09-27T12:56:14.799Z",
112                    "virtualCatalogue": null,
113                    "network": null,
114                    "maxSplit": 3,
115                    "sourcingConditions": [
116                        {
117                            "name": "customerTierIn",
118                            "type": "fc.sourcing.condition.path",
119                            "params": {
120                                "path": "customer.attributes.byName.tier",
121                                "value": [
122                                    "Silver"
123                                ],
124                                "operator": "in"
125                            }
126                        },
127                        {
128                            "name": "totalPriceGreaterThanOrEquals",
129                            "type": "fc.sourcing.condition.path",
130                            "params": {
131                                "path": "totalPrice",
132                                "value": 1000,
133                                "operator": "greater_than_or_equals"
134                            }
135                        }
136                    ],
137                    "sourcingCriteria": [
138                        {
139                            "name": "locationDistanceBanded",
140                            "type": "fc.sourcing.criterion.locationDistanceBanded",
141                            "params": {
142                                "value": [
143                                    50,
144                                    150,
145                                    300,
146                                    600,
147                                    1000,
148                                    1400
149                                ],
150                                "valueUnit": "miles"
151                            }
152                        },
153                        {
154                            "name": "locationDailyCapacity",
155                            "type": "fc.sourcing.criterion.locationDailyCapacity",
156                            "params": null
157                        }
158                    ]
159                },
160                {
161                    "id": "9743",
162                    "ref": "Silver_Small",
163                    "sourcingProfile": {
164                        "id": "5018"
165                    },
166                    "name": "Silver (Small)",
167                    "description": "Silver (Small) SS",
168                    "status": "ACTIVE",
169                    "priority": 4,
170                    "createdOn": "2025-09-27T12:56:14.798Z",
171                    "updatedOn": "2025-09-27T12:56:14.798Z",
172                    "virtualCatalogue": null,
173                    "network": null,
174                    "maxSplit": 1,
175                    "sourcingConditions": [
176                        {
177                            "name": "customerTierIn",
178                            "type": "fc.sourcing.condition.path",
179                            "params": {
180                                "path": "customer.attributes.byName.tier",
181                                "value": [
182                                    "Silver"
183                                ],
184                                "operator": "in"
185                            }
186                        },
187                        {
188                            "name": "totalPriceLessThan",
189                            "type": "fc.sourcing.condition.path",
190                            "params": {
191                                "path": "totalPrice",
192                                "value": 1000,
193                                "operator": "less_than"
194                            }
195                        }
196                    ],
197                    "sourcingCriteria": [
198                        {
199                            "name": "locationDistanceExclusion",
200                            "type": "fc.sourcing.criterion.locationDistanceExclusion",
201                            "params": {
202                                "value": 300,
203                                "valueUnit": "miles"
204                            }
205                        },
206                        {
207                            "name": "inventoryAvailabilityBanded",
208                            "type": "fc.sourcing.criterion.inventoryAvailabilityBanded",
209                            "params": {
210                                "value": [
211                                    50,
212                                    75,
213                                    100
214                                ]
215                            }
216                        },
217                        {
218                            "name": "locationDailyCapacity",
219                            "type": "fc.sourcing.criterion.locationDailyCapacity",
220                            "params": null
221                        }
222                    ]
223                },
224                {
225                    "id": "9740",
226                    "ref": "Bronze",
227                    "sourcingProfile": {
228                        "id": "5018"
229                    },
230                    "name": "Bronze",
231                    "description": "Bronze SS",
232                    "status": "ACTIVE",
233                    "priority": 5,
234                    "createdOn": "2025-09-27T12:56:14.795Z",
235                    "updatedOn": "2025-09-27T12:56:14.795Z",
236                    "virtualCatalogue": null,
237                    "network": null,
238                    "maxSplit": 0,
239                    "sourcingConditions": [
240                        {
241                            "name": "customerTierIn",
242                            "type": "fc.sourcing.condition.path",
243                            "params": {
244                                "path": "customer.attributes.byName.tier",
245                                "value": [
246                                    "Bronze"
247                                ],
248                                "operator": "in"
249                            }
250                        }
251                    ],
252                    "sourcingCriteria": [
253                        {
254                            "name": "locationDistanceExclusion",
255                            "type": "fc.sourcing.criterion.locationDistanceExclusion",
256                            "params": {
257                                "value": 150,
258                                "valueUnit": "miles"
259                            }
260                        },
261                        {
262                            "name": "locationTypeExclusion",
263                            "type": "fc.sourcing.criterion.locationTypeExclusion",
264                            "params": {
265                                "value": [
266                                    "Warehouse"
267                                ]
268                            }
269                        },
270                        {
271                            "name": "inventoryAvailability",
272                            "type": "fc.sourcing.criterion.inventoryAvailability",
273                            "params": null
274                        }
275                    ]
276                }
277            ],
278            "sourcingFallbackStrategies": []
279        }
280    }
281}

Step arrow right iconUpdate your Workflow

Ensure the Sourcing Profile `ref` is specified in the `sourcingProfileRef` parameter of the CreateFulfilmentWithSourcingProfile Rule.

1{
2  "name": "SourceOrder",
3  "description": "Creates fulfilments at a location based on sourcing profile. If there are unfulfilled items in the order, trigger an event for sourcing from another location to fulfil remaining items",
4  "type": "ORDER",
5  "eventType": "NORMAL",
6  "rules": [
7    {
8      "name": "[[account.id]].order.CreateFulfilmentWithSourcingProfile",
9      "props": {
10        "sourcingProfileRef": "USA_TIERED"
11      }
12    },
13    {
14      "name": "{{account}}.order.CreateRejectedFulfilment",
15      "props": {
16        "systemRejectedLocationRef": "RJT_USA"
17      }
18    }
19  ],
20  "triggers": [
21    {
22      "status": "BOOKED"
23    },
24    {
25      "status": "PICK_PACK"
26    }
27  ],
28  "userActions": []
29}