Skip to content

API Solutions for Taxes and Shipping in Shopify

Shopify has no tax or shipping endpoint to call. Here are today's options: Shopify Tax and partner apps, duties, live carrier rates, delivery Functions and the GraphQL objects behind them.

API Solutions for Taxes and Shipping in Shopify

Shopify has no tax or shipping calculation endpoint to call. Taxes come from the tax service you choose in Settings > Taxes and duties (Shopify Tax, a partner app such as Avalara or Vertex, or manual rates), and shipping comes from delivery profiles, carrier service apps with live rates, and Shopify Functions that rename, sort or hide delivery options.

REST calls such as /admin/api/2021-01/taxes/calculate.json, still quoted in older guides, are not in Shopify's current API reference, and the REST Admin API has been legacy since October 1, 2024. Below are today's options, their plan limits and the GraphQL Admin API objects that matter, checked against API version 2026-10.

Which tax services can a Shopify store use?

Service Where What to know
Shopify Tax US, EU, UK, Canada Calculates tax from each product's category, adds VAT invoices and VAT validation for the EU and UK, and offers automated filing. Free up to USD 100,000 in sales, then a per-transaction fee that is lower on Shopify Plus.
Tax partner apps Depends on the partner Installed from the Tax apps section of Settings > Taxes and duties. The Shopify Tax Platform page lists Avalara and Vertex.
Basic Tax Other countries and some older setups Shopify's default rates. US stores can no longer newly enroll.
Manual Tax Any region You maintain the rates. Does not work with duties at checkout or Managed Markets.

According to Choose a tax service, switching services can be permanent in the US, Canada, EU and UK, so decide before you save. You also cannot plug your own tax engine into checkout: the Tax Platform is "available by invitation only to select tax software companies."

What can you control through the API for taxes?

  • Product taxability: ProductVariant.taxable turns tax on or off per variant. Shopify Tax reads the product category, so keep categories accurate when you sync products from an ERP or PIM.
  • Customer exemptions: Customer.taxExempt for a full exemption, or customerAddTaxExemptions for specific exemption codes.
  • Overrides: tax overrides are set in the admin for manually built collections and for shipping by region. They take precedence over product categories.
  • Previews: draftOrderCalculate returns totals, including totalTaxSet, without creating a draft order. It is the closest replacement for the old "calculate" calls.

In headless builds, totalTaxAmount and totalDutyAmount on the Storefront API CartCost object are deprecated, and final tax is calculated in checkout. See handling taxes in headless Shopify checkout.

How do duties and import taxes work?

Turn them on in Settings > Taxes and duties, under Duties and import taxes. Shopify calculates duties from each product's HS code and country of origin, so both must be filled in, and charges a fee per order with duties that depends on whether you use Shopify Payments. The limitations: no duties in the Rest of world zone, no tax overrides or manual rates, no Shopify Fulfillment Network, and not every carrier supports DDP labels.

To avoid registering for tax abroad, Managed Markets makes Global-e the merchant of record: it remits tax, handles duties and offers local payment methods. It is open to merchants based in the continental US and to certain stores in Canada and the UK.

How do you show live carrier rates at checkout?

With the Carrier Service API. An app registers a callback URL with carrierServiceCreate (scope write_shipping). At checkout Shopify posts the cart and destination to that URL, and the app returns a rates array.

mutation CarrierServiceCreate($input: DeliveryCarrierServiceCreateInput!) {
  carrierServiceCreate(input: $input) {
    carrierService { id name callbackUrl active }
    userErrors { field message }
  }
}

Each rate needs service_name, description, service_code, currency and total_price in subunits (500 means 5.00). The DeliveryCarrierService reference says there is no retry: a timeout or error shows backup rates instead.

Plan limits: third-party carrier-calculated shipping is included on Advanced and Shopify Plus. Grow stores can add it for a monthly fee or with annual billing. If a store drops below these plans, its carrier service is deactivated.

How do you rename, sort or hide delivery options?

With a Delivery Customization Function. It returns deliveryOptionRename, deliveryOptionMove and deliveryOptionHide operations, for example to hide express shipping for oversized items. It cannot change a rate's price. An app activates it with deliveryCustomizationCreate, and a store can run up to 25. Any plan can use public App Store apps with functions, but custom apps with Shopify Functions need Shopify Plus.

How do local pickup, local delivery and labels fit in?

Both local methods are set per location under Settings > Shipping and delivery > Additional delivery methods. Pickup in store sets a pickup time and instructions, which apps can also do with locationLocalPickupEnable. Local delivery allows up to 10 zones per location, by postal code or a radius of up to 160 km, each with its own price and optional minimum order.

Shipping labels in Shopify are bought from the admin for eligible fulfillment locations. Carriers depend on the country and discounts depend on your plan.

Which GraphQL Admin API objects matter?

Object or mutation What it does
DeliveryProfile, deliveryProfileCreate, deliveryProfileUpdate Which products ship from which locations, to which zones, at which rates
DeliveryCarrierService, carrierServiceCreate, carrierServiceUpdate Live third-party rates from a callback URL
DeliveryCustomization, deliveryCustomizationCreate Activates a delivery customization function
DeliveryLocalPickupSettings, locationLocalPickupEnable Local pickup per location
Customer.taxExemptions, customerAddTaxExemptions Customer tax exemptions
draftOrderCalculate Totals and tax for a draft order without saving it

On the storefront, Cart.deliveryGroups returns the available options, each with a handle, title and estimatedCost.

We build carrier service apps, delivery customization functions and ERP rate integrations for Shopify Plus stores. See our Shopify API integration service if you need one.

FAQ

Can I still use taxes/calculate.json or calculate_shipping_rates.json?

No. Neither is in Shopify's current API reference, and the REST Admin API has been legacy since October 1, 2024. Use draftOrderCalculate to preview tax and totals, and a carrier service for live rates.

Which Shopify plans can use third-party carrier-calculated shipping?

Advanced and Shopify Plus include it. Grow stores can add it for a monthly fee or by switching to annual billing. Basic does not support it.

Can I connect Avalara or Vertex to Shopify checkout?

Yes. Both are listed on Shopify's tax platform page. Install the partner app from the Tax apps section of Settings > Taxes and duties, then choose it as the tax service for the region.

Can a Shopify Function change the price of a shipping rate?

A Delivery Customization Function cannot. It only renames, sorts or hides options. To set the price, use delivery profile rates or a carrier service that returns your own rates.

Connecting Shopify to another system?

We build Shopify API integrations that connect your store to your ERP, CRM, PIM, warehouse, fulfilment and accounting systems.

The checklist we run before touching a client's code

Get it by email, plus a few short notes over the next two weeks: what we see most often on Shopify stores and what actually fixes it.

No spam. Unsubscribe anytime. Privacy Policy

Want more of our posts in your Google results? Add Codersy as a preferred source.

Add Codersy on Google(opens in a new tab)