---
title: "Tutorial: Setting up a fulfillment configuration"
slug: "tutorial-setting-up-a-fulfillment-configuration-2"
tags: ["dellivery", "Easypost", "routing rules", "warehouse fulfillment", "Associate App", "integration", "shipping", "newstore platform", "international shipping", "provider rates", "platform", "stock on hand", "order fulfillment", "onboarding", "store fulfillment", "fulfillment", "routing", "tutorial", "api", "preorder"]
updated: 2026-07-07T10:14:15Z
published: 2026-07-07T10:14:15Z
canonical: "docs.newstore.com/tutorial-setting-up-a-fulfillment-configuration-2"
---

> ## Documentation Index
> Fetch the complete documentation index at: https://docs.newstore.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tutorial: Setting up a fulfillment configuration (v2)

> [!NOTE]
> Important
> 
> This guide focuses on using the [Routing ruleset](https://docs.newstore.net/api/integration/delivery/fulfillment_config_routing_ruleset_api/), [Service levels](https://docs.newstore.net/api/integration/delivery/service_levels_api), and [Provider rates](https://docs.newstore.net/api-portal#/http/fulfillment/provider-rates/replace-provider-rate) APIs to set up your fulfillment configuration.
> 
> 
> 
> If you still need to set up a fulfillment configuration completely via the [fulfillment configuration API v1](https://docs.newstore.net/api/integration/order-management/newstore_ff_config_api), see this [guide](/v1/docs/tutorial-setting-up-a-fulfillment-configuration-legacy-method#tutorial_fulfillment-config) instead.

> [!CAUTION]
> Important
> 
> The [legacy fulfillment configuration](https://docs.newstore.net/api/integration/order-management/newstore_ff_config_api) will be sunset on **March 31, 2027**. You must migrate to the new fulfillment configuration (v2) before that date. For more information on the sunset timeline for the legacy fulfillment configuration, see this deprecation notice.

The aim of this tutorial is to guide you through the process of setting up a basic fulfillment strategy for an imaginary business based in New York City that has the following characteristics:

- One store located in New York City, whose `fulfillment_node_id` is `store1_NYC`.
- One DC, whose `fulfillment_node_id` is `DC01`.
- Domestic delivery.
- (Optional) International delivery.
- (Optional) Transfers from the store to the DC.
- **No in-store pickup orders.** A fulfillment configuration cannot manage in-store pickup orders. To enable in-store pickup, see [Tutorial: Setting up an in-store pickup configuration](/v1/docs/tutorial-setting-up-an-in-store-pickup-configuration#tuto-instorepickup).

This business offers the following shipping methods:

- Same-day and traditional delivery from the store to New York City addresses.
- Traditional delivery from the DC to the USA, including New York City.
- International delivery from the store to Germany and France.
- Traditional delivery for transferred inventory from the store to the DC.

> [!TIP]
> Note
> 
> This is an example of how a fulfillment configuration works. Business scenarios may involve hundreds of stores and warehouses across multiple locations, so keep that in mind when creating your fulfillment strategy. For more information on how order fulfillment works in general, see [About order fulfillment](/v1/docs/about-order-fulfillment#about-ffment).

You **can revert** to an older format of the fulfillment configuration even after you have set up a fulfillment configuration using the new process. However, reverting to the legacy version of the fulfillment configuration may include setting up a lot of information such as fulfillment location groups or zip code regions from scratch. **Proceed with caution!**

For more information, see the guide on [changing versions](/v1/docs/tutorial-setting-up-a-fulfillment-configuration#switching-to-another-version-of-the-fulfillment-configuration).

## Pre-requisites

Before getting started with this tutorial, ensure that you:

1. Understand how routing works at NewStore. See [About order routing](/v1/docs/about-order-routing#routing).
2. Have created at least 1 store. See [Tutorial: Setting up a store](/v1/docs/tutorial-setting-up-a-store#tuto-create-store).
3. Imported master data into your store and DC. See [Tutorial: Importing products](/v1/docs/tutorial-importing-products#tuto-import-product).

This tutorial involves using 3 different APIs to set up the fulfillment configuration:

- Use the [Routing ruleset](https://docs.newstore.net/api/integration/delivery/fulfillment_config_routing_ruleset_api/) and [Service levels](https://docs.newstore.net/api/integration/delivery/service_levels_api) APIs to set up your routing configuration and service levels, including the priority of service levels for your fulfillment configuration. This includes fulfillment locations, shipping options, geographic regions, and the priority of [service levels](/v1/docs/glossary#service-level).
- Use [Provider rates](https://docs.newstore.net/api-portal#/http/fulfillment/provider-rates/replace-provider-rate) API to set up the delivery configuration for your business. This includes setting up [provider rates](/v1/docs/glossary#provider-rate), which are part of the new fulfillment configuration strategy mentioned above.

## Setting up the shipping strategy

First, let's define the shipping strategy for our business. You can see another example of shipping strategy in [About order routing](/v1/docs/about-order-routing#routing).

In the case of our small business, the shipping options are: `Same-day`, `Traditional`, and `International`.

To leverage these shipping options, the shipping strategy is:

| Country | Zip code | Fulfillment node id | Supported shipping options |
| --- | --- | --- | --- |
| US | 10* | store1_NYC | Same-day and traditional |
| US | * | DC01 | Traditional |
| DE | * | store1_NYC | International |
| FR | * | store1_NYC | International |

## Developing an adapter

Since we know the shipping methods we want to offer, we can choose the shipping provider(s) that supports these shipping methods amongst all the shipping providers on the market. In our case, let's imagine that UPS can perform both traditional and same-day shipping and has been selected as our provider.

We must develop an adapter to allow integration between UPS and NewStore. This adapter enables NewStore to get shipping offers, book them, cancel them, etc. Both our store and our DC will receive shipment offers from this adapter.

To learn more about shipping adapters, see [Integrating a shipping provider](/v1/docs/integrating-a-shipping-provider#integ-shipment).

> [!TIP]
> Note
> 
> If you are working with several shipping providers, create an adapter for each of them.

Once you have developed the adapter, send its URL and the name of the shipping provider to NewStore. When the retailer sends you the URL of the shipping adapter, [add it via the API](/v1/docs/configuring-shipping-settings#adding-shipping-providers).

## Creating the fulfillment configuration

A fulfillment configuration represents your shipping strategy in NewStore. To create one, we use the [Routing ruleset](https://docs.newstore.net/api/integration/delivery/fulfillment_config_routing_ruleset_api/), [Service levels](https://docs.newstore.net/api/integration/delivery/service_levels_api), and [Provider rates](https://docs.newstore.net/api-portal#/http/fulfillment/provider-rates/replace-provider-rate) APIs .

To learn more about these concepts, see [Fulfillment configuration](/v1/docs/about-shipping#fulfillment-configuration). First, let's define each part separately then put them together when we are ready to call the method.

> [!TIP]
> Note
> 
> If inventory transfers are enabled for your business, you can create a shipping configuration for transfer orders based on your fulfillment configuration. See [Shipping transfer orders](/v1/docs/integrating-a-fulfillment-provider#shipping-transfer-orders).

### Service levels

> [!NOTE]
> Importante
> 
> This section uses the [Service levels API](https://docs.newstore.net/api/integration/delivery/service_levels_api). Since service levels have an impact on how your routing rules and shipping configuration works, ensure that you set this up first before configuring routes or provider rates.

A [service level](/v1/docs/glossary#service-level) is a shipping method that the user can select during the checkout process. The selected service level impacts how NewStore routes and fulfills the order after checkout.

For our business case, let's define our shipping methods as follows:

```json
					{
    "service_levels": {
        "SAME_DAY_DELIVERY": {
            "price": 15,
            "tax_code": "",
            "display_name": "Same day delivery",
            "currency_code": "USD",
            "delivery_time": "Today, if order is placed by 2pm.",
            "remorse_period": 120,
            "delivery_time_after_cutoff_hour": "Tomorrow"
        },
        "TRADITIONAL": {
            "price": 0,
            "tax_code": "",
            "display_name": "Traditional delivery",
            "currency_code": "USD",
            "delivery_time": "3-7 business days",
            "delivery_time_after_cutoff_hour": "4-8 business days"
        }
    }
}
```

> [!TIP]
> Note
> 
> The business hours defined for your store have an influence on order routing. See [Store configuration](/v1/docs/about-shipping#store-configuration).

If inventory transfers are enabled for your business, the service levels that you define here are also used for shipping inventory transfers. See [Shipping transfer orders](/v1/docs/integrating-a-fulfillment-provider#shipping-transfer-orders).

> [!NOTE]
> Important
> 
> When requesting shipping options from the NewStore platform, results will only include shipping options for the service levels defined in the `sl_levels_priority` list. See [Routes](/v1/docs/tutorial-setting-up-a-fulfillment-configuration#routes).

### Provider rates

A Provider rate represents the shipping providers offering the service levels we just defined. All service levels must be connected to a provider rate.

> [!TIP]
> Note
> 
> If the value for the flag `use_as_customer_facing_cost` is true, NewStore uses the quote from the shipping provider. The service level cost defined in the fulfillment configuration is ignored, and the shipping provider cost is displayed to the customer. See [Retrieving custom shipping prices for orders](/v1/docs/retrieving-custom-shipping-options#retrieving-custom-shipping-prices-for-orders).

In our example business case here, we have created 2 service levels: `SAME_DAY_DELIVERY` and `TRADITIONAL`, which are both managed by UPS.

When defining provider rates, we can specify the priority in which the provider rates are used to route orders.

To enable prioritization of provider rates, see [Enabling prioritization of provider rates](/v1/docs/enabling-features#enabling-prioritization-of-provider-rates).

> [!NOTE]
> Importante
> 
> It is crucial to specify the priority of provider rates via the `provider_rates_priority` property in the payload for routes. Otherwise you **cannot** use the new fulfillment configuration setup process.
> 
> If `provider_rates_priority` **is not specified in the new configuration process, the APIs calls will be successful, but NewStore will not be able to book shipments** for your orders.

Using the [Create provider rates](https://docs.newstore.net/api-portal#/http/fulfillment/provider-rates/replace-provider-rate) method, let's define our provider rates as follows:

```json
					{
  "provider_rates": {
    "UPS_SAME_DAY_RATE": {
      "service_level": "SAME_DAY_DELIVERY",
      "shipping_type": "same_day_delivery",
      "return_provider_rate": "",
      "shipping_carrier_name": "UPS",
      "use_as_customer_facing_cost": false,
      "carrier_defined_service_level": "ExpressPlus"
    },
    "UPS_TRADITIONAL_RATE": {
      "service_level": "TRADITIONAL",
      "shipping_type": "traditional_delivery",
      "return_provider_rate": "",
      "shipping_carrier_name": "UPS",
      "use_as_customer_facing_cost": false,
      "carrier_defined_service_level": "Ground"
    }
  },
  "provider_rates_priority": {
      "*": {
        "*": {
            "SAME_DAY_DELIVERY": [
              "UPS_SAME_DAY_RATE"
            ],
            "TRADITIONAL": [
              "UPS_TRADITIONAL_RATE"
            ]
        }
      },
      "US": {
        "*": {
            "SAME_DAY_DELIVERY": [
              "UPS_SAME_DAY_RATE"
            ],
            "TRADITIONAL": [
              "UPS_TRADITIONAL_RATE"
            ]
        },
        "DC01": {
            "SAME_DAY_DELIVERY": [
              "UPS_SAME_DAY_RATE"
            ],
            "TRADITIONAL": [
              "UPS_TRADITIONAL_RATE"
            ]
          }
        }
    }
}
```

In our case we have created service levels for only *one* shipping provider (UPS). Therefore, when routing same day delivery and traditional orders:

- In the US, all fulfillment locations, including the store ( `store1_NYC`) and DC ( `DC01`), consider the provider rates `UPS_SAME_DAY_RATE` and `UPS_TRADITIONAL_RATE` as highest priority by default.
- In all other countries, for all fulfillment locations, the provider rates `UPS_SAME_DAY_RATE` and `UPS_TRADITIONAL_RATE` have highest priority by default.

> [!NOTE]
> Important
> 
> When defining provider rates with the same shipping provider, ensure that the `carrier_defined_service_level` is unique for each provider rate. For example, you cannot specify `ExpressPlus` as the `carrier_defined_service_level` for both `UPS_SAME_DAY_RATE` and `UPS_TRADITIONAL_RATE`.

For a detailed list of prioritized provider rates from multiple shipping providers, see the [API payload example](https://docs.newstore.net/api-portal#/http/fulfillment/provider-rates/replace-provider-rate).

### Routes

> [!NOTE]
> Important
> 
> This section uses the [Routing ruleset API](https://docs.newstore.net/api/integration/delivery/fulfillment_config_routing_ruleset_api/).

Now that we have defined the service levels and the provider rates related to them, we can define the routes. A route represents one row of the table containing the shipping strategy, as defined earlier, which specifies the relation between provider rates, shipping zones, and fulfillment location IDs.

Let's take another look at our shipping strategy for this tutorial:

| Country | Zip code | Fulfillment node id | Supported shipping options |
| --- | --- | --- | --- |
| US | 10* | store1_NYC | Same-day and traditional |
| US | * | DC01 | Traditional |
| DE | * | store1_NYC | International |
| FR | * | store1_NYC | International |

> [!TIP]
> Note
> 
> To ship orders internationally, such as to Germany and France, see [*(Optional)* Shipping orders internationally](/v1/docs/tutorial-setting-up-a-fulfillment-configuration#optional-shipping-orders-internationally).

To expand this shipping strategy (for US locations) into a payload version that can be interpreted by the [Routing ruleset API](https://docs.newstore.net/api/integration/delivery/fulfillment_config_routing_ruleset_api/), we will create a data table that looks like this:

| Routes |  |  |  | Zip codes |  | Location groups |  | Service levels priority |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| *Country* | *Destination region* | *Shipping options* | *Location group priority* |  |  |  |  |  |
| US | NY | Traditional, Same-day | Store Group 0 | NY | All | Main DC | Store Group 0 | TRADITIONAL |
| US | All | Traditional | Main DC | 10* | `*` | DC 01 | store1_NYC | SAME_DAY |

For the routing rules to apply, we must now do the following:

1. Group the fulfillment locations and prioritize them, based on which location groups you want to fulfill orders from first, and so on. In our case, we have 2 location groups:

> [!TIP]
> Note
> 
> You can have multiple warehouses or stores fulfilling orders in 1 location group. Also, fulfillment locations can be part of multiple location groups. We have only used 1 in each group to reduce complexity for the tutorial.
  - `Store Group 0`, which contains the store with the fulfillment location ID as `store1_NYC`
  - `Main DC`, which contains the warehouse with the fulfillment location ID as `DC01`
2. For each route, we must now also define the `destination_region`, which is a combination of the country you want to ship orders to ( `US` in our case) and the `zip_code_region`, which is a collection of all relevant zip codes that you want the route to fulfill orders to.
  - For `SAME_DAY_DELIVERY`, we will fulfill orders via the store `store1_NYC` and ship to all zip codes or shipping zones in New York City that start with the numerals `10`.
  - For `TRADITIONAL` routes, we will fulfill orders via the warehouse `DC01`, and ship to all zip codes or shipping zones in the US.

Our shipping strategy then transforms to the following payload sample in JSON:

Routing Ruleset APIRouting Ruleset API v1

The following payload defines a single country per route entry in the routing ruleset.

```json
{
  "routes": [
    {
      "fulfilled_by": {
        "SAME_DAY_DELIVERY": ["Store Group 0"],
        "TRADITIONAL": ["Store Group 0"]
      },
      "destination_region": {
        "country": "US",
        "zip_code_region": "NY"
      }
    },
    {
      "fulfilled_by": {
        "TRADITIONAL": ["Main DC"]
      },
      "destination_region": {
        "country": "US",
        "zip_code_region": "All"
      }
    }
  ],
  "sl_levels_priority": ["TRADITIONAL", "SAME_DAY_DELIVERY"],
  "location_groups": {
    "Main DC": ["DC01"],
    "Store Group 0": ["store1_NYC"]
  },
  "zip_code_regions": {
    "NY": ["10*"],
    "All": ["*"]
  }
}
```

The following payload allows you to define multiple countries per route entry in the routing ruleset.

```json
{
  "routes": [
    {
      "fulfilled_by": {
        "SAME_DAY_DELIVERY": ["Store Group 0"],
        "TRADITIONAL": ["Store Group 0"]
      },
      "destination_region": {
        "countries": ["US"],
        "zip_code_region": "NY"
      }
    },
    {
      "fulfilled_by": {
        "TRADITIONAL": ["Main DC"]
      },
      "destination_region": {
        "countries": ["US"],
        "zip_code_region": "All"
      }
    }
  ],
  "sl_levels_priority": ["TRADITIONAL", "SAME_DAY_DELIVERY"],
  "location_groups": {
    "Main DC": ["DC01"],
    "Store Group 0": ["store1_NYC"]
  },
  "zip_code_regions": {
    "NY": ["10*"],
    "All": ["*"]
  }
}
```

### Final outcome and next steps

Once you have called the new [Routing ruleset](https://docs.newstore.net/api/integration/delivery/fulfillment_config_routing_ruleset_api/) and [Service levels](https://docs.newstore.net/api/integration/delivery/service_levels_api) APIs for setting up service levels and routes, and the [Provider rates API](https://docs.newstore.net/api-portal#/http/fulfillment/provider-rates/replace-provider-rate) to set up provider rates and provider rate priority, orders are routed according to your strategy.

> [!TIP]
> Note
> 
> If you want to enable in-store pickup orders, see [Tutorial: Setting up an in-store pickup configuration](/v1/docs/tutorial-setting-up-an-in-store-pickup-configuration#tuto-instorepickup).

We have completed creating the fulfillment configuration. We can now:

- Update the fulfillment configuration to enable shipping international orders from the store. See [*(Optional)* Shipping orders internationally](/v1/docs/tutorial-setting-up-a-fulfillment-configuration#optional-shipping-orders-internationally).
- Create an **optional** transfer configuration. If you do not want to transfer inventory between stores, you do not need a transfer configuration. See [Tutorial: Setting up a transfer configuration](/v1/docs/tutorial-setting-up-a-transfer-configuration#tuto-ff-conf-transfer-conf).
- If necessary, revert or change to an older version of the fulfillment configuration using the [Fulfillment config history API](https://docs.newstore.net/api/integration/delivery/fulfillment_config_history_api). For more information, see [Switching to another version of the fulfillment configuration](/v1/docs/tutorial-setting-up-a-fulfillment-configuration#switching-to-another-version-of-the-fulfillment-configuration).

You can now also use [Omnichannel Manager](/v1/docs/managing-fulfillment-location-groups#nom-location-management) to manage your fulfillment configuration elements such as priority of fulfillment locations or capacity of stores for fulfillment.

## *(Optional)* Shipping orders internationally

> [!TIP]
> Note
> 
> Ignore this section if you do not need to fulfill orders internationally.

You can set up stores in your business to ship orders internationally, using [EasyPost](https://www.easypost.com/). To enable international shipments from your store, set up and configure an adapter with EasyPost.

To develop the adapter and configure EasyPost for shipping orders in your business, contact the [support team](https://help.newstore.com).

To learn more about shipping adapters, see [Integrating a shipping provider](/v1/docs/integrating-a-shipping-provider#integ-shipment).

### Defining the strategy

Based on [the strategy](/v1/docs/tutorial-setting-up-a-fulfillment-configuration#setting-up-the-shipping-strategy) we created for our business, we have already set up a DC, a store, and a fulfillment configuration.

We can now enable international shipments from our store `store1_NYC` to Germany and France.

### Updating the fulfillment configuration

1. Use the [Service levels](https://docs.newstore.net/api/integration/delivery/service_levels_api) API to create a new [service level](/v1/docs/tutorial-setting-up-a-fulfillment-configuration#service-levels) , for example, `INTERNATIONAL_EXPRESS`. Specify applicable pricing and other details.

> [!TIP]
> Note
> 
> Delivery times can vary, as they are returned by [EasyPost](https://www.easypost.com/).

Let's define our international service level as follows:

```json
																													{
    "service_levels": {
        "INTERNATIONAL_EXPRESS": {
            "price": 100,
            "tax_code": "",
            "display_name": "International delivery",
            "currency_code": "USD",
            "delivery_time": "2 weeks, if order is placed today.",
            "remorse_period": 120,
            "delivery_time_after_cutoff_hour": "3 weeks"
        }
    }
}
```
2. See the [EasyPost guide](https://www.easypost.com/carriers) for provider rates that can fulfill the service level you just defined for international shipments.

The service level we defined, `INTERNATIONAL EXPRESS`, is managed by FedEx. To set up this provider rate and its priority, use the [Provider rates](https://docs.newstore.net/api-portal#/http/fulfillment/provider-rates/replace-provider-rate) API.

Let's define our provider rate for international shipping as follows:

```json
																													{
    "provider_rates": {
        "INTERNATIONAL_PRIORITY": {
            "service_level": "INTERNATIONAL_EXPRESS",
            "shipping_type": "traditional_carrier",
            "return_provider_rate": "",
            "shipping_carrier_name": "FedEx",
            "use_as_customer_facing_cost": false
        }
    }
}
```
3. Create routes for the service level and provider rates, using the same process as described in [Routes](/v1/docs/tutorial-setting-up-a-fulfillment-configuration#routes) using the [Routing ruleset](https://docs.newstore.net/api/integration/delivery/fulfillment_config_routing_ruleset_api/) API, with the following additions:

This is what the updated fulfillment strategy will look like in a tabular format:

| Routes |  |  |  | Zip codes |  | Location groups |  | Service levels priority |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| *Country* | *Destination region* | *Shipping options* | *Location group priority* |  |  |  |  |  |
| US | NY | Traditional, Same-day | Store Group 0 | NY | All | Main DC | Store Group 0 | TRADITIONAL |
| US | All | Traditional | Main DC | 10* | `*` | DC 01 | store1_NYC | SAME_DAY |
| DE | All | International | Store Group 0 |  | `*` |  |  | INTERNATIONAL |
| FR | All | International | Store Group 0 |  | `*` |  |  | INTERNATIONAL |
  - In `destination_region`, specify the country you want to ship to. For example, `DE` or `FR`.
  - Specify the `fulfillment_node_id` of the stores that can fulfill international orders. In our case, this will be the `store1_NYC` store that fulfills all orders in Germany and France.

Routing Ruleset APIRouting Ruleset API v1

Here is a sample payload of the full routing rules using a single country per route entry:

```json
																																						{
    "routes": [
        {
            "fulfilled_by": {
                "SAME_DAY_DELIVERY": ["Store Group 0"],
                "TRADITIONAL": ["Store Group 0"]
            },
            "destination_region": {
                "country": "US",
                "zip_code_region": "NY"
            }
        },
        {
            "fulfilled_by": {
                "TRADITIONAL": ["Main DC"]
            },
            "destination_region": {
                "country": "US",
                "zip_code_region": "All"
            }
        },
        {
            "fulfilled_by": {
                "INTERNATIONAL_EXPRESS": ["Store Group 0"]
            },
            "destination_region": {
                "country": "DE",
                "zip_code_region": "All"
            }
        },
        {
            "fulfilled_by": {
                "INTERNATIONAL_EXPRESS": ["Store Group 0"]
            },
            "destination_region": {
                "country": "FR",
                "zip_code_region": "All"
            }
        }
    ],
    "sl_levels_priority": ["SAME_DAY_DELIVERY", "TRADITIONAL", "INTERNATIONAL_EXPRESS"],
    "location_groups": {
        "Main DC": ["DC01"],
        "Store Group 0": ["store1_NYC"]
    },
    "zip_code_regions": {
        "NY": ["10*"],
        "All": ["*"]
    }
}
```

Here is a sample payload of the full routing rules using multiple countries per route entry:

```json
																																						{
    "routes": [
        {
            "fulfilled_by": {
                "SAME_DAY_DELIVERY": ["Store Group 0"],
                "TRADITIONAL": ["Store Group 0"]
            },
            "destination_region": {
                "countries": ["US"],
                "zip_code_region": "NY"
            }
        },
        {
            "fulfilled_by": {
                "TRADITIONAL": ["Main DC"]
            },
            "destination_region": {
                "countries": ["US"],
                "zip_code_region": "All"
            }
        },
        {
            "fulfilled_by": {
                "INTERNATIONAL_EXPRESS": ["Store Group 0"]
            },
            "destination_region": {
                "countries": ["DE"],
                "zip_code_region": "All"
            }
        },
        {
            "fulfilled_by": {
                "INTERNATIONAL_EXPRESS": ["Store Group 0"]
            },
            "destination_region": {
                "countries": ["FR"],
                "zip_code_region": "All"
            }
        }
    ],
    "sl_levels_priority": ["SAME_DAY_DELIVERY", "TRADITIONAL", "INTERNATIONAL_EXPRESS"],
    "location_groups": {
        "Main DC": ["DC01"],
        "Store Group 0": ["store1_NYC"]
    },
    "zip_code_regions": {
        "NY": ["10*"],
        "All": ["*"]
    }
}
```

#### Final outcome and next steps

Once you have called the new APIs for setting up service levels, provider rates and their priority, and shipping routes, orders are routed according to your strategy. You can now also use [Omnichannel Manager](/v1/docs/managing-fulfillment-location-groups#nom-location-management) to manage your fulfillment configuration elements such as priority of fulfillment locations or capacity of stores for fulfillment.

We have now completed updating the fulfillment config to ship orders internationally. Before we can start shipping orders to Germany and France though, there are some pre-requisites for your business that must be fulfilled. See [*(Optional)* Booking an international shipment](/v1/docs/integrating-a-shipping-provider#optional-booking-an-international-shipment).

If you want to transfer inventory between stores, create an **optional** transfer config. See [Tutorial: Setting up a transfer configuration](/v1/docs/tutorial-setting-up-a-transfer-configuration#tuto-ff-conf-transfer-conf).

## *(Optional)* Preferred Source Routing

> [!NOTE]
> Important
> 
> Available in Associate App Early Access Release. Contact your Customer Success Manager, to join the Early Access cohort.

Preferred Source Routing allows Fulfillment Managers to designate one or more preferred fulfillment locations within a location group, typically a distribution center (DC). When configured, the routing engine runs a two-step process:

- Route as many items as possible to the preferred location(s) - typically DCs
- Route any remaining items that the preferred location cannot fulfill to other locations using the existing routing logic.- typically stores

Key principles:

- **Opt-in** - existing routing behavior is unchanged unless a preferred location is explicitly configured
- **Non-breaking** - built on top of existing routing logic, not a replacement. Not a third routing strategy alongside Priority-based Routing or Intelligent Routing
- **Real-time** - once a location is added or removed as a preferred location, the change takes effect with the next order to be routed

**Configuring preferred source**

Fulfillment Managers can designate preferred locations in the `Routing` > `Locations` page in Omnichannel Manager. The preferred locations can also be set via the [Ruleset](https://developer.newstore.com/#/http/order-management/routing-ruleset/replace-routing-ruleset) endpoint.

**Impacts to be aware of:**

- Orders may result in more split shipments - items that cannot be fulfilled from the preferred location will ship separately from a secondary location
- Retailers with shipment limits configured may see orders placed on hold more frequently, as split shipments are more likely to exceed those limits

## Switching to another version of the fulfillment configuration

> [!CAUTION]
> Important
> 
> The [legacy fulfillment configuration](https://docs.newstore.net/api/integration/order-management/newstore_ff_config_api) will be sunset on **March 31, 2027**. You must migrate to the new fulfillment configuration (v2) before that date. For more information on the sunset timeline for the legacy fulfillment configuration, see this deprecation notice.

To switch to an older or newer version of the fulfillment configuration, use the [Fulfillment config history API](https://docs.newstore.net/api/integration/delivery/fulfillment_config_history_api).

> [!NOTE]
> Important
> 
> If you are using the newer process to set up your fulfillment configuration (using the [Routing ruleset](https://docs.newstore.net/api/integration/delivery/fulfillment_config_routing_ruleset_api/), [Service levels](https://docs.newstore.net/api/integration/delivery/service_levels_api), and [Provider rates](https://docs.newstore.net/api-portal/#/http/fulfillment/provider-rates/list-provider-rates) APIs), we **do not recommend** switching to an older version of the config that was set up using the [legacy fulfillment configuration API](https://docs.newstore.net/api/integration/order-management/newstore_ff_config_api), as this may cause unexpected behavior or need you to set up lot of information such as fulfillment location groups or zip code regions from scratch.

To view other versions of the fulfillment configuration that have been set up for your business, use the [Get all revisions](https://docs.newstore.net/api/integration/delivery/fulfillment_config_history_api#operation/get-config-revisions) or [Get a specific revision](https://docs.newstore.net/api/integration/delivery/fulfillment_config_history_api#operation/get-config-revision-by-id) methods.

**Related topics**

- [Tutorial: Setting up a transfer configuration](/v1/docs/tutorial-setting-up-a-transfer-configuration#tuto-ff-conf-transfer-conf)
- [Tutorial: Setting up a store](/v1/docs/tutorial-setting-up-a-store#tuto-create-store)
- [Tutorial: Setting up an in-store pickup configuration](/v1/docs/tutorial-setting-up-an-in-store-pickup-configuration#tuto-instorepickup)
- [Shipping transfer orders](/v1/docs/integrating-a-fulfillment-provider#shipping-transfer-orders)
- [Migrating from the legacy fulfillment configuration to the new fulfillment configuration](/v1/docs/migrating-from-the-legacy-fulfillment-configuration-to-the-new-fulfillment-configuration#migration-guide-fulfillment-config)

In the context of shipping, a provider rate defines a provider able to deliver a specific Service level in a specific area. For example, the service level same day delivery can be provided by Deliv in Boston or Uber Rush in NYC. See How shipping options are calculated.
