> ## 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.

# PurchaseCarrierShipmentInput

> A shipment to buy: the rate request plus the selected carrier/service/account.

<ResponseField name="carrier" type="String!" required>
  Carrier of the selected rate, as returned by the quote.
</ResponseField>

<ResponseField name="carrierAccountId" type="String!" required>
  Carrier account the selected rate was quoted on.
</ResponseField>

<ResponseField name="idempotencyKey" type="String">
  Unique key for this purchase (max 400 characters). Retrying with the same key returns the original result instead of buying twice. Keys expire; do not reuse one for a new purchase. If omitted, every call buys a new label.
</ResponseField>

<ResponseField name="request" type={<a href="/docs/api-reference/v3/reference/shipping/outbound-shipment-request-input">OutboundShipmentRequestInput!</a>} required>
  The shipment to buy a label for.

  <Expandable title="fields" lazyRender>
    <ResponseField name="contentsSummary" type={<a href="/docs/api-reference/v3/reference/shipping/contents-summary-input">ContentsSummaryInput</a>}>
      Total declared contents. Required by carriers that want a declaration even with no customs items.

      <Expandable title="fields" lazyRender>
        <ResponseField name="description" type="String!" required>
          Plain-language description of everything in the shipment.
        </ResponseField>

        <ResponseField name="value" type={<a href="/docs/api-reference/v3/reference/common/money-input">MoneyInput!</a>} required>
          Total declared value of the shipment.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="customs" type={<a href="/docs/api-reference/v3/reference/shipping/outbound-customs-input">OutboundCustomsInput</a>}>
      Customs declaration. Required for international shipments; carriers reject them without one.

      <Expandable title="fields" lazyRender>
        <ResponseField name="aesExemptionCode" type={<a href="/docs/api-reference/v3/reference/shipping/aes-exemption-code">AesExemptionCode</a>}>
          AES exemption to cite when your account files by exemption. Ignored if your account files by ITN; defaults to `NOEEI_30_37_A`.
        </ResponseField>

        <ResponseField name="contentsExplanation" type="String">
          Description of the contents to print on the form. Defaults to your configured description, or the item descriptions joined together.
        </ResponseField>

        <ResponseField name="contentsType" type={<a href="/docs/api-reference/v3/reference/shipping/customs-contents-type">CustomsContentsType</a>}>
          What the shipment holds. Defaults to `MERCHANDISE`.
        </ResponseField>

        <ResponseField name="items" type={<a href="/docs/api-reference/v3/reference/shipping/outbound-customs-item-input">[OutboundCustomsItemInput!]!</a>} required>
          The declared lines (max 100).
        </ResponseField>

        <ResponseField name="itn" type="String">
          Internal Transaction Number for a shipment you filed with AES, e.g. "AES X20260827123456". Used only if your account is configured to file by ITN.
        </ResponseField>

        <ResponseField name="nonDeliveryOption" type={<a href="/docs/api-reference/v3/reference/shipping/customs-non-delivery-option">CustomsNonDeliveryOption</a>}>
          What to do if the shipment cannot be delivered. Defaults to `RETURN`.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="deliveredDutyPaid" type="Boolean">
      Assigns who is billed for duties and import taxes: the sender (DDP) or the recipient (DAP). Does not affect the quoted or charged rate — duties are billed separately after the shipment moves. Omit to leave the choice to your carrier configuration.
    </ResponseField>

    <ResponseField name="fromAddress" type={<a href="/docs/api-reference/v3/reference/shipping/outbound-address-input">OutboundAddressInput!</a>} required>
      Ship-from address.

      <Expandable title="fields" lazyRender>
        <ResponseField name="city" type="String" />

        <ResponseField name="country" type="String!" required />

        <ResponseField name="email" type="String" />

        <ResponseField name="name" type="String" />

        <ResponseField name="phone" type="String" />

        <ResponseField name="state" type="String" />

        <ResponseField name="street1" type="String" />

        <ResponseField name="street2" type="String" />

        <ResponseField name="zip" type="String!" required />
      </Expandable>
    </ResponseField>

    <ResponseField name="parcels" type={<a href="/docs/api-reference/v3/reference/shipping/outbound-parcel-input">[OutboundParcelInput!]!</a>} required>
      The parcels in the shipment (max 5).

      <Expandable title="fields" lazyRender>
        <ResponseField name="height" type={<a href="/docs/api-reference/v3/reference/catalog/dimension-input">DimensionInput!</a>} required />

        <ResponseField name="length" type={<a href="/docs/api-reference/v3/reference/catalog/dimension-input">DimensionInput!</a>} required />

        <ResponseField name="weight" type={<a href="/docs/api-reference/v3/reference/catalog/weight-input">WeightInput!</a>} required />

        <ResponseField name="width" type={<a href="/docs/api-reference/v3/reference/catalog/dimension-input">DimensionInput!</a>} required />
      </Expandable>
    </ResponseField>

    <ResponseField name="returnAddress" type={<a href="/docs/api-reference/v3/reference/shipping/outbound-address-input">OutboundAddressInput</a>}>
      Return address, if different from the ship-from address.

      <Expandable title="fields" lazyRender>
        <ResponseField name="city" type="String" />

        <ResponseField name="country" type="String!" required />

        <ResponseField name="email" type="String" />

        <ResponseField name="name" type="String" />

        <ResponseField name="phone" type="String" />

        <ResponseField name="state" type="String" />

        <ResponseField name="street1" type="String" />

        <ResponseField name="street2" type="String" />

        <ResponseField name="zip" type="String!" required />
      </Expandable>
    </ResponseField>

    <ResponseField name="taxIdentifiers" type={<a href="/docs/api-reference/v3/reference/shipping/tax-identifier-input">[TaxIdentifierInput!]</a>}>
      Tax identifiers for the shipment, e.g. an IOSS number for EU-bound goods.

      <Expandable title="fields" lazyRender>
        <ResponseField name="entity" type={<a href="/docs/api-reference/v3/reference/shipping/tax-identifier-entity">TaxIdentifierEntity!</a>} required>
          Which party the identifier belongs to.
        </ResponseField>

        <ResponseField name="issuingCountry" type={<a href="/docs/api-reference/v3/reference/common/country-code">CountryCode!</a>} required>
          Country of the authority that issued it.
        </ResponseField>

        <ResponseField name="type" type={<a href="/docs/api-reference/v3/reference/shipping/tax-identifier-type">TaxIdentifierType!</a>} required>
          The kind of identifier.
        </ResponseField>

        <ResponseField name="value" type="String!" required>
          The identifier itself.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="toAddress" type={<a href="/docs/api-reference/v3/reference/shipping/outbound-address-input">OutboundAddressInput!</a>} required>
      Ship-to address.

      <Expandable title="fields" lazyRender>
        <ResponseField name="city" type="String" />

        <ResponseField name="country" type="String!" required />

        <ResponseField name="email" type="String" />

        <ResponseField name="name" type="String" />

        <ResponseField name="phone" type="String" />

        <ResponseField name="state" type="String" />

        <ResponseField name="street1" type="String" />

        <ResponseField name="street2" type="String" />

        <ResponseField name="zip" type="String!" required />
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="service" type="String!" required>
  Service level of the selected rate, as returned by the quote.
</ResponseField>


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