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

# ShippingMethodInput

> Configuration written to create or replace a shipping method.

<ResponseField name="addLandedCostsOverride" type="Boolean">
  Add landed costs (duties and import fees) to this method's price, overriding the experience-level setting.
</ResponseField>

<ResponseField name="carrierServices" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-carrier-service-input">[ShippingMethodCarrierServiceInput!]</a>}>
  Dynamic methods only. The carrier services to quote live rates from. Required unless `serviceLevel` is set.

  <Expandable title="fields" lazyRender>
    <ResponseField name="carrier" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-carrier">ShippingCarrier!</a>} required>
      Carrier to quote live rates from. Values are display-cased, e.g. 'FedEx', 'UPS', 'USPS'.
    </ResponseField>

    <ResponseField name="enabled" type="Boolean">
      Whether this carrier service is quoted. Defaults to true.
    </ResponseField>

    <ResponseField name="markup" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-carrier-service-markup-input">ShippingMethodCarrierServiceMarkupInput</a>}>
      Markup applied to this carrier service specifically.

      <Expandable title="fields" lazyRender>
        <ResponseField name="amount" type={<a href="/docs/api-reference/v3/reference/common/decimal">Decimal</a>}>
          Flat markup for this service, as a decimal string.
        </ResponseField>

        <ResponseField name="percentage" type={<a href="/docs/api-reference/v3/reference/common/decimal">Decimal</a>}>
          Percentage markup for this service, as a decimal string.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="service" type="String!" required>
      Carrier-specific service code, e.g. 'FEDEX\_GROUND' for FedEx or 'Ground' for UPS. The valid set differs per carrier; read an existing dynamic method with checkoutExperience(id:) to see the codes this store already uses.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="coverageTypes" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-coverage-types-input">ShippingMethodCoverageTypesInput</a>}>
  Redo coverage bundled into this shipping method.

  <Expandable title="fields" lazyRender>
    <ResponseField name="packageProtection" type="Boolean">
      Include package protection with this method.
    </ResponseField>

    <ResponseField name="return" type="Boolean">
      Include return coverage with this method.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="description" type="String!" required>
  Shopper-facing description shown next to the method at checkout. Like `name`, it may contain customer-name template variables.
</ResponseField>

<ResponseField name="excludedCarriers" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-carrier">[ShippingCarrier!]</a>}>
  Dynamic methods only. Carriers excluded from this method's candidate set.
</ResponseField>

<ResponseField name="fallbackDescription" type="String">
  Shopper-facing description used in place of `description` under the same condition as `fallbackName`.
</ResponseField>

<ResponseField name="fallbackName" type="String">
  Shopper-facing name used in place of `name` when `name` contains customer-name template variables and the shopper's name is not available at quote time. Ignored when `name` has no variables.
</ResponseField>

<ResponseField name="fulfillmentDelayDaysOverride" type="Int">
  Dynamic methods only. Days Redo assumes an order takes to ship when it estimates delivery dates for this method, overriding the experience's `fulfillmentDelayDaysOverride`. Omit it to use the experience's value. A whole number of days, zero or more.
</ResponseField>

<ResponseField name="markup" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-markup-input">ShippingMethodMarkupInput</a>}>
  Dynamic methods only. Markup applied to every live carrier rate on this method.

  <Expandable title="fields" lazyRender>
    <ResponseField name="amount" type={<a href="/docs/api-reference/v3/reference/common/decimal">Decimal</a>}>
      Flat markup as a decimal string.
    </ResponseField>

    <ResponseField name="currency" type="String">
      Currency of the flat markup. Required when `amount` is set.
    </ResponseField>

    <ResponseField name="percentage" type={<a href="/docs/api-reference/v3/reference/common/decimal">Decimal</a>}>
      Percentage markup as a decimal string, e.g. '10' for +10%.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="name" type="String!" required>
  Shopper-facing name of the shipping method as it appears at checkout, e.g. 'Standard'. May contain customer-name template variables — '\{customer\_name}', '\{customer\_name:first}', '\{customer\_name:last}' — which are substituted per shopper. Send them back verbatim when you are not deliberately changing them, or you will silently strip the merchant's personalization.
</ResponseField>

<ResponseField name="orderTags" type="[String!]">
  Tags applied to the order when this method is bought.
</ResponseField>

<ResponseField name="priceBounds" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-price-bounds-input">ShippingMethodPriceBoundsInput</a>}>
  Dynamic methods only. Hard clamp applied after markup and rounding.

  <Expandable title="fields" lazyRender>
    <ResponseField name="currency" type="String!" required>
      Currency of the bounds.
    </ResponseField>

    <ResponseField name="maximum" type={<a href="/docs/api-reference/v3/reference/common/decimal">Decimal</a>}>
      Highest price ever shown, as a decimal string.
    </ResponseField>

    <ResponseField name="minimum" type={<a href="/docs/api-reference/v3/reference/common/decimal">Decimal</a>}>
      Lowest price ever shown, as a decimal string.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="priceConstraints" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-price-constraints-input">ShippingMethodPriceConstraintsInput</a>}>
  Bounds the final price this method may be sold at, after every other pricing rule has run. Omit to leave the method's existing constraint untouched; send one to replace it outright. There is no way to clear a constraint through this API.

  <Expandable title="fields" lazyRender>
    <ResponseField name="absoluteMinimumPrice" type="Float">
      Floor applied after the relative bound: the effective minimum is the greater of this and the referenced price plus `byAtLeast`. 'RELATIVE\_TO\_OTHER\_RATE\_TABLE' constraints only.
    </ResponseField>

    <ResponseField name="byAtLeast" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-price-inequality-input">ShippingMethodPriceInequalityInput</a>}>
      How far above the referenced method's price this method must sit. 'RELATIVE\_TO\_OTHER\_RATE\_TABLE' constraints only.

      <Expandable title="fields" lazyRender>
        <ResponseField name="amount" type="Float">
          Absolute amount of the bound. Omit when unset.
        </ResponseField>

        <ResponseField name="percentage" type="Float">
          Percentage form of the bound. Omit when unset.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="byAtMost" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-price-inequality-input">ShippingMethodPriceInequalityInput</a>}>
      How far above the referenced method's price this method may sit. 'RELATIVE\_TO\_OTHER\_RATE\_TABLE' constraints only.

      <Expandable title="fields" lazyRender>
        <ResponseField name="amount" type="Float">
          Absolute amount of the bound. Omit when unset.
        </ResponseField>

        <ResponseField name="percentage" type="Float">
          Percentage form of the bound. Omit when unset.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="currency" type="String!" required>
      Currency all bounds are expressed in.
    </ResponseField>

    <ResponseField name="kind" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-price-constraint-kind">ShippingMethodPriceConstraintKind!</a>} required>
      How the bounds are expressed: 'DEFAULT' bounds the price absolutely, 'RELATIVE\_TO\_OTHER\_RATE\_TABLE' bounds it against another shipping method's price.
    </ResponseField>

    <ResponseField name="marginAtLeast" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-price-inequality-input">ShippingMethodPriceInequalityInput</a>}>
      Suggested lower margin bound. Omit when there is none.

      <Expandable title="fields" lazyRender>
        <ResponseField name="amount" type="Float">
          Absolute amount of the bound. Omit when unset.
        </ResponseField>

        <ResponseField name="percentage" type="Float">
          Percentage form of the bound. Omit when unset.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="marginAtMost" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-price-inequality-input">ShippingMethodPriceInequalityInput</a>}>
      Suggested upper margin bound. Omit when there is none.

      <Expandable title="fields" lazyRender>
        <ResponseField name="amount" type="Float">
          Absolute amount of the bound. Omit when unset.
        </ResponseField>

        <ResponseField name="percentage" type="Float">
          Percentage form of the bound. Omit when unset.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="maxPrice" type="Float">
      Highest price this method may be sold at. 'DEFAULT' constraints only.
    </ResponseField>

    <ResponseField name="minPrice" type="Float">
      Lowest price this method may be sold at. 'DEFAULT' constraints only.
    </ResponseField>

    <ResponseField name="relativeToMethodId" type="ID">
      ID of the shipping method this method's price is bounded against, from the same checkout experience. Required for, and only valid on, 'RELATIVE\_TO\_OTHER\_RATE\_TABLE' constraints.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="rateSelection" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-rate-selection">ShippingMethodRateSelection</a>}>
  Dynamic methods only. Which of the eligible live rates to show the shopper. Values are CHEAPEST, FASTEST, and CUSTOM.
</ResponseField>

<ResponseField name="rates" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-rate-input">[ShippingMethodRateInput!]</a>}>
  Fixed methods only, and required for them. One entry per price. A single entry with no `conditions` is a flat price; multiple entries express weight or cart-value ranges and free-shipping thresholds.

  <Expandable title="fields" lazyRender>
    <ResponseField name="conditions" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-condition-input">[ShippingMethodConditionInput!]</a>}>
      Cart weight or cart value ranges this rate applies to. Omit or pass an empty array for a flat price that applies to every cart.

      <Expandable title="fields" lazyRender>
        <ResponseField name="currency" type="String">
          Currency of the cart value bounds. Price conditions only.
        </ResponseField>

        <ResponseField name="maxGrams" type="Float">
          Inclusive upper bound of cart weight. Weight conditions only.
        </ResponseField>

        <ResponseField name="maxPrice" type="Float">
          Inclusive upper bound of cart value. Price conditions only.
        </ResponseField>

        <ResponseField name="minGrams" type="Float">
          Inclusive lower bound of cart weight. Weight conditions only.
        </ResponseField>

        <ResponseField name="minPrice" type="Float">
          Inclusive lower bound of cart value. Price conditions only.
        </ResponseField>

        <ResponseField name="type" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-condition-type">ShippingMethodConditionType!</a>} required>
          What this condition is measured against: WEIGHT for cart weight, PRICE for cart value.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="currency" type="String!" required>
      ISO currency code for `price`, e.g. 'USD'.
    </ResponseField>

    <ResponseField name="enabled" type="Boolean">
      Whether this rate is active. Defaults to true.
    </ResponseField>

    <ResponseField name="price" type={<a href="/docs/api-reference/v3/reference/common/decimal">Decimal!</a>} required>
      Price for this rate as a decimal string, e.g. '5.99'. Use '0' for free shipping.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="rounding" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-rounding">ShippingMethodRounding</a>}>
  Dynamic methods only. How to round the marked-up price before showing it.
</ResponseField>

<ResponseField name="serviceCode" type="String">
  Identifier the storefront platform uses for this shipping option at checkout.
</ResponseField>

<ResponseField name="serviceLevel" type={<a href="/docs/api-reference/v3/reference/checkout/shipping-method-service-level">ShippingMethodServiceLevel</a>}>
  Dynamic methods only. Quote the cheapest carrier service delivering within this service level's window instead of pinning carrier services.
</ResponseField>

<ResponseField name="type" type={<a href="/docs/api-reference/v3/reference/checkout/writable-shipping-method-type">WritableShippingMethodType!</a>} required>
  How the price is produced. FIXED is a merchant-set price served by Redo with no carrier involved and requires `rates`. DYNAMIC quotes live carrier rates through Redo and requires either `carrierServices` or `serviceLevel`. Custom (script-priced) methods cannot be created or edited here.
</ResponseField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.