Fulfillment and inventory objects
On this page
This domain answers two separate questions: how much of something there is, and how it reaches the customer. Use this article to find the object you need before you query stock or configure shipping.
Stock is a quantity per location
There is no stock field on a product. A Stock Level record holds the quantity of one product at one Stock Location, so a product stocked in three places has three records.
That is the single most important fact in this domain, and it has two consequences:
- To read inventory, query Stock Level, not Product2. Filter by location, or sum across the locations a store can sell from.
- A store sells from the locations assigned to it. Store Stock Location makes a location available to a store and sets its priority, which is how one warehouse can serve several storefronts.
Stock changes through records rather than edits. Stock Adjustment logs a change and its reason, Manual Stock Adjustment is a batch of hand-entered corrections, and Stock Transfer moves stock between locations.
Fulfillment continues what the cart started
Delivery method is chosen on the cart, as a Cart Fulfillment. After checkout the work becomes a Fulfillment Item per order item and, for anything posted, a Shipment carrying the tracking details.
Where that work happens is routed by category. A product carries a fulfillment category, a Fulfillment Station is a physical place, and Fulfillment Category Station connects the two. Pick and pack lists follow those assignments.
Zones scope almost everything geographic
A Zone is a named area, built by adding countries, states, cities, or postcodes to it through four join objects. Zones are what Shipping Rates and taxes are scoped by, so a rate applies to a zone rather than to a list of countries.
:::tip If a shipping rate is not offering at checkout, the usual cause is the delivery address not falling in any zone the rate is scoped to. Check the zone’s join records before checking the rate. :::
Objects in this domain
| Object | API name | Purpose |
|---|---|---|
| Shipment | s_c__Shipment__c |
A dispatch of goods to a customer, with its tracking details |
| Fulfillment Item | s_c__Fulfillment_Item__c |
One order item being fulfilled, and the quantity |
| Fulfillment Category | s_c__Fulfillment_Category__c |
A class of fulfillment work, used to route items to the right station |
| Fulfillment Station | s_c__Fulfillment_Station__c |
A physical place where fulfillment work is done |
| Fulfillment Category Station | s_c__Fulfillment_Category_Station__c |
Assigns a fulfillment category to a station |
| Product Fulfillment Category | s_c__Product_Fulfillment_Category__c |
Gives a product a fulfillment category, so it routes correctly |
| Allocated Fulfillment Payment | s_c__Allocated_Fulfillment_Payment__c |
Allocates payment to one fulfillment, for part-shipped orders |
| Stock Location | s_c__Stock_Location__c |
A warehouse, store room, or shop floor that holds stock |
| Store Stock Location | s_c__Store_Stock_Location__c |
Makes a stock location available to a store, and sets its priority |
| Stock Level | s_c__Stock_Level__c |
The quantity of one product at one location. The record inventory is read from |
| Stock Adjustment | s_c__Stock_Adjustment__c |
A change to a stock level, with its reason |
| Manual Stock Adjustment | s_c__Manual_Stock_Adjustment__c |
A batch of hand-entered stock corrections |
| Manual Stock Adjustment Item | s_c__Manual_Stock_Adjustment_Item__c |
One product and quantity within a manual adjustment |
| Stock Transfer | s_c__Stock_Transfer__c |
A movement of stock between two locations |
| Stock Transfer Item | s_c__Stock_Transfer_Item__c |
One product and quantity within a transfer |
| Shipping Provider | s_c__Shipping_Provider__c |
A carrier integration and its credentials |
| Shipping Provider Product | s_c__Shipping_Provider_Product__c |
A named service offered by a provider, such as express or standard |
| Shipping Carrier Product | s_c__Shipping_Carrier_Product__c |
A carrier’s own product code for a service |
| Shipping Rate | s_c__Shipping_Rate__c |
A price for shipping, scoped by zone, weight, or order value |
| Zone | s_c__Zone__c |
A named geographic area, used to scope shipping rates and taxes |
| Zone Country | s_c__Zone_Country__c |
Puts a country in a zone |
| Zone State | s_c__Zone_State__c |
Puts a state in a zone |
| Zone City | s_c__Zone_City__c |
Puts a city in a zone |
| Zone Postcode | s_c__Zone_Postcode__c |
Puts a postcode in a zone |
| Country | s_c__Country__c |
A country, and whether the store sells to it |
| State | s_c__State__c |
A state or province within a country |
| City | s_c__City__c |
A city, used for zone and delivery matching |
| Postcode | s_c__Postcode__c |
A postcode, used for zone and delivery matching |
| Collection Point | s_c__Collection_Point__c |
A place a customer can collect an order, such as a locker or shop |
| Delivery Window | s_c__Delivery_Window__c |
A bookable delivery slot |
| Product Delivery Window | s_c__Product_Delivery_Window__c |
Limits a product to particular delivery windows |
| Location Group | s_c__Location_Group__c |
A named set of locations, used to scope availability |
| Location Group Account | s_c__Location_Group_Account__c |
Puts an account in a location group |
Where it meets other domains
- Catalog. Stock levels and fulfillment categories both point at Product2. See catalog objects.
- Orders and checkout. Cart fulfillments, payments allocated per fulfillment, and tax scoped by zone all sit on the checkout side. See order and checkout objects.
- Point of sale. An outlet sells from a stock location, through Outlet Stock Location, and POS fulfillment routes through the same stations. See POS objects.
Zones, stations, and stock locations are all reached through join records. Junction objects explains what that means for querying and importing.
Was this article helpful?
Thanks for your feedback! It helps us improve our docs.