Configure Multi-Customer-Tier Sourcing Logic
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

Prerequisites
Steps
Create 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
`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}
Update 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}