Admin GraphQL API / 2026-07

Market-driven shipping Admin API
A new API that attaches shipping settings directly to markets

Starting with API version 2026-07, the Market object gains delivery.shipping was added. You can now configure shipping rates and delivery methods per market via GraphQL, without creating a separate shipping profile.

On this page
  1. What actually changes (understand in 30 seconds)
  2. How it works: shipping hangs off the Market
  3. The 4 shipping option types
  4. Inheritance model: null / isEnabled / removeShipping
  5. Operations overview (read, create, update, delete)
  6. Required permission scopes
  7. 5 points engineers should keep in mind
  8. 3 use cases you can apply to your business
  9. A one-line summary you can use in a pitch

1What actually changes

Until now, to vary shipping strategy per market you had to create separate shipping profile resources .
From 2026-07 onward, shipping settings can be held directly on the Market object (Market.delivery.shipping) ). Apps can implement per-market shipping without adding more profiles.

Before: linked via a separate resource

When you wanted to serve different shipping per market, you created an independent shipping profile. Resources ended up scattered, making app management more complex.

shipping

New: attached directly to the market

Market.delivery.shipping read and write.marketCreate/marketUpdate handled entirely with existing mutations.

2How it works: shipping hangs off the Market

Market Example: Japan / EU delivery .shipping ShippingConfiguration isEnabled : true / false activeOptionDefinitionsCount optionDefinitions[] currency / freeDeliveryMinimumValue OptionDefinition Flat / Value / Weight / CarrierCalculated rateGroups → rates → conditions
There are no queries or mutations at the root level.There are no dedicated top-level operations for market shipping settings; reads and writes always go through Market marketCreate marketUpdate .

3The 4 shipping option types

Shipping options are DeliveryOptionDefinitionCreateInput / DeliveryOptionDefinitionUpdateInput Managed here. The API supports these four types.

¥¥
Flat
DeliveryFlatRateOptionDefinition
Fixed price. Can hold multiple rate groups
Value
DeliveryValueBasedOptionDefinition
Rate is determined by cart value. Multiple groups allowed
kg
Weight
DeliveryWeightBasedOptionDefinition
Rate is determined by weight. Groups areexactly one
Carrier
DeliveryCarrierCalculatedOptionDefinition
Calculated by the carrier service. Groups aresingle
Each option has a currency and a isActive and can optionally set a freeDeliveryMinimumValue(the minimum amount that qualifies for free shipping). A rate group can be limited to specific product collections or origin locations via conditionspossible.

4Inheritance model: null / isEnabled / removeShipping

Expresses "don't set", "set but don't show", and "revert to inheriting from the parent" as three separate fields. Don't confuse them.

StateSettingHow customers see it
Unset = inherit from parent Market.delivery.shipping is null Inherit Inherits the parent market's shipping. A market with no parent inherits the shop default (= no shipping)
Keep the setting but stop showing it shipping.isEnabled: false Hidden Don't present shipping options at checkout. App-managed shipping is disabled at the same time
Delete the market-specific setting delivery.removeShipping: true Revert to inheriting Discard your own setting and return to inheriting shipping from the parent
isEnabled: false and removeShipping: true are different. The formerkeeps the setting but only stops displaying it, the latterdeletes the setting itself and reverts to inheriting. Use "temporarily not selling" versus "remove this market's custom rules" accordingly.

5Operations (read, create, update, delete)

What you want to doInput fields to use
A market's delivery settingsReadMarket.delivery.shipping(isEnabled / activeOptionDefinitionsCount / optionDefinitions)
Delivery at creation timeAddMarketCreateInput.delivery.shipping
An existing market's deliveryUpdateMarketUpdateInput.delivery.shipping
Per-market deliveryDelete (revert to inherited)MarketUpdateInput.delivery.removeShipping
An optionCreateshipping.optionDefinitionsToCreate(flatRate / valueBased / weightBased / carrierCalculated)
An optionUpdateoptionDefinitionsToUpdate(by id; flat can be updated individually via rateGroupsToUpdate)
An optionDeleteoptionDefinitionsToDelete(an array of option IDs)
Flat and Value-based can havemultiplerate groups. Weight-based hasexactly onerate group, and Carrier-calculated also has asinglerate group that references an existing carrier service (carrierServiceId/autoIncludeNewServices/percentageAdjustment).

6Required permission scopes

read (Query)

read_markets is required.

write (Mutation)

read_markets and write_markets ofbothare required.

75 key points for developers

1. Per-market delivery without profiles

You can attach delivery directly to a Market without creating a separate resource (shipping profile). Apps can implement different delivery strategies for different markets with fewer resources.

no root

2. No top-level operations

There is no root query or standalone mutation for market delivery. You always Market / marketCreate / marketUpdate access it via, by design.

3. null means "inherit"

shipping When null is not "unset" butinherited from the parent. If there's no parent, it inherits the shop default (no shipping). Building logic that treats it as empty leads to false positives.

OFF DEL

4. Don't confuse disabling with deleting

isEnabled:false keeps the settings but only stops the display (app-managed shipping also stops).removeShipping:true removes the settings and reverts to inheritance. The behavior is fundamentally different.

5. The rate group count constraint varies by type

Flat / Value-based can have multiple rate groups, butWeight-based must have exactly one,Carrier-calculated is single. Furthermore, rate groups can be scoped with conditions to aproduct collectionororigin location. When implementing, branch the group-count validation per type.

8Three use cases to apply in practice

USE CASE 1

Cross-border commerce: manage per-country shipping rate tables in bulk with code

Challenge
In a store with multiple markets, you want to serve different flat, weight-based, and value-based shipping rates per country, but shipping profiles proliferate and become painful to maintain.
Approach
Set marketUpdate on each Market with delivery.shipping . Feed flat and weight-based rates per market, and manage the configuration IaC-style with GraphQL scripts.
Result
Avoid profile proliferation and consolidate shipping rules into a single, code-reviewable source.
Technical note
Note that Weight-based has the constraint of exactly one rate group. Flat can also do per-collection with multiple groups + conditions.
Free shipping threshold
USE CASE 2

Cart-value-based free shipping campaigns per market

Challenge
You want to offer "free shipping over ¥X" with a different threshold and currency per market, but manual setup is error-prone and operationally heavy.
Approach
Build min/max amount-based rates with the Value-based option, and set the free-shipping floor per market withfreeDeliveryMinimumValue . Switch it over via API only during the campaign period.
Result
Run per-market free-shipping lines programmatically as a CVR tactic. Revert with optionDefinitionsToUpdate when it ends.
Technical note
Match the currency to each option's currency . Specify amounts explicitly with amount / currencyCode.
+10%
USE CASE 3

Connect carrier real-time rates per market + adjust margins

Problem
You want to show carrier-calculated live rates for specific markets only, and avoid manual work every time a new service is added.
Solution
Reference an existing carrierServiceId with the Carrier-calculated option.autoIncludeNewServices:true auto-imports new services, andpercentageAdjustment adds a margin on top.
Impact
Automatically run cost-based shipping rates plus an optional margin per market, preventing shipping-cost leakage.
Technical notes
Carrier-calculated uses a single rate group. The carrier service must be set up in advance.

9One-line summary for pitches

"With the 2026-07 Admin API, you can attach shipping directly to a Market. Configure all four types—flat, price-based, weight-based, and carrier-calculated—
per marketwithout adding shipping profiles.Use three states as needed:
null inherits from the parent, isEnabled:false stops display, and removeShipping restores inheritance ."