Skip to main content

Order and Inventory Error Codes

Error and warning codes for orders, draft orders, and inventory transfers.

Altera shows a code such as ABC001 with each error or warning. This article explains the codes for this area of the app and how to resolve them. For codes from other areas, see Error and warning codes.

Order Codes

Error and warning codes that occur when dealing with orders

ORD001 - ID or Name Column Missing (Warning)

Order sheets work best with either a Name or ID column for grouping. When neither column is present, the system will fall back to using "Top Row" column markers for grouping, or group all rows into a single order if no Top Row column exists.

ORD002 - Required Column Missing

Required columns, such as the Line: Type column are missing from the source file.

ORD003 - Invalid 'Line: Type' Value

A row of the order has a blank or unknown value in the Line: Type column. The app didn't import the order. The other orders in the file are imported.

The message shows the value that isn't valid:

  • "Line: Type" values [<empty>] are not valid means that a cell is blank. When the Line: Type column is in the file, every row of the order needs a value

  • "Line: Type" [Foo] is unknown means that the value isn't a line type. The app stops at the first unknown value, so the rows after it aren't checked

Orders accept these values:

  • Line Item

  • Discount

  • Shipping Line

  • Refund Line

  • Refund Shipping

  • Transaction

  • Fulfillment Line

  • Ignore

Draft orders accept Line Item, Discount, Shipping Line, and Ignore.

Case, extra spaces, and a - or _ between the words don't matter, so line item, LINE ITEM, and Line-Item are all read as Line Item. The words must be separate: LineItem is unknown.

  • Fill the blank cells or correct the values, and import the order again

  • To keep a row in the file that the app must not read, for example a row with formulas, set its Line: Type to Ignore

A new, updated, or replaced order fails. A DELETE row doesn't check the Line: Type column. With REPLACE, the existing order isn't deleted when this error occurs.

ORD004 - Order Import Email Notifications

Importing orders will trigger Shopify Admin staff notifications for each order unless they are disabled. Shopify does not provide a way for apps to detect if notifications are already turned off.

To disable order notifications, open up the Shopify admin and go to Settings > Notifications > Staff notifications and turn them off before importing large batches of orders.

Additionally, importing orders may trigger other applications that are configured to process new orders on Shopify. We recommend testing with 1-2 orders before importing large batches of orders.

ORD006 - Editing Orders Not Supported

Editing existing orders is not currently supported through the application. You may need to delete the existing order and create a new one with your desired changes.

ORD007 - Missing Line Item Data

This error occurs when processing a refund with insufficient line item data. When processing refunds, make sure to include all required line item information to properly associate the refund with the correct items.

ORD008 - Trial/Development Store Rate Limit

Shopify limits new orders to 5 per minute on trial and development stores. If your store is on a trial or development plan, order imports will run more slowly due to this limitation. To increase the import speed, consider upgrading to a paid Shopify plan. A file where every Command is DELETE does not show this warning, because it creates no orders. IGNORE rows count the same.

ORD010 - Invalid Date/Time Value

The date/time columns in your order import ('Processed At', 'Transaction: Processed At', 'Fulfillment: Processed At') must contain valid date/time values or be left blank. This error occurs when these columns contain text or other values that cannot be parsed as valid dates. Use standard date formats like 2024-01-15, 2024-01-15 14:30:00, or Jan 15, 2024 2:30 PM. Ensure all values in these columns are either empty or contain properly formatted date/time values.

ORD011 - Payment Terms Due Date Required

When importing orders with fixed date payment terms, the 'Payment Terms: Due At' column must be provided and cannot be empty. This error occurs when you have specified a payment terms template that requires a fixed due date, but the corresponding 'Payment Terms: Due At' column is missing or empty. Ensure that for fixed date payment terms, you include the 'Payment Terms: Due At' column with a valid date/time value specifying when the payment is due.

ORD013 - Multiple Fulfillments Without ID

You can only update a single fulfillment per order when the Fulfillment ID is not specified. If you need to update multiple fulfillments for the same order, you must provide the specific Fulfillment ID for each fulfillment you want to update.

ORD015 - Incomplete Address Information

When importing orders, if you provide any shipping or billing address information, you must provide all required address fields. This error occurs when some address fields are filled but others are missing. The message names the row and the fields that are blank.

Required shipping address fields:

  • Shipping: Address 1

  • Shipping: City

  • Shipping: Country Code

Required billing address fields:

  • Billing: Address 1

  • Billing: City

  • Billing: Country Code

The check uses the Country Code column (for example EG or US), not the Country name column. If Country Code is filled, you can leave Country blank.

The check runs on the first row of each order and stops at the first order with an incomplete address. After you fix that row, check the same columns in the other orders of the file.

How to fix this:

  • Either fill in all required address fields for the address type you're importing

  • Or remove the partial address data if the address is not needed

  • Ensure that when you provide any address field, you also provide the other required fields for that address type

ORD017 - Cannot Edit International Currency Order

Shopify does not allow editing orders that are recorded in a currency different from your store's currency, for example orders from before the store changed its currency. The order's Shop Currency column shows the currency it is recorded in.

To resolve this:

  • Make sure you are only trying to edit line items of orders recorded in your store's currency

  • Orders that customers paid in another currency (Currency differs from Shop Currency) can be edited, except that a custom line item can't be added to them (ORD057)

Note: Shopify doesn't allow adding Line Items to an Archived Order – the app will automatically unarchive the order, add the line items, and then re-archive it if it was originally archived.

ORD018 - No Line Items to Add

When using the Line: Command column with the MERGE value to add line items to an order, you must include at least one line item row in your spreadsheet.

To resolve this:

  • Make sure you have at least one row in your spreadsheet with Line: Type set to "Line Item"

  • Make sure the Line: Command column is set to "MERGE" for the line items you want to add

  • Verify that your line items have the required fields filled in (such as SKU or Product Handle to identify the product)

ORD019 - Invalid Fulfillment Line Item Quantity

The fulfillment request contains an invalid line item quantity. This typically happens when:

  • Line item already fulfilled: You are trying to fulfill a line item that has already been fulfilled. Shopify does not allow fulfilling the same line item twice.

  • Quantity exceeds available: The quantity you are trying to fulfill is greater than the unfulfilled quantity remaining on the line item.

How to fix this:

  • Check if the line items in your import have already been fulfilled in Shopify

  • Ensure the fulfillment quantity does not exceed the ordered quantity minus any already-fulfilled quantity

  • If re-importing fulfillments, remove rows for line items that were already fulfilled in a previous import

ORD020 - Refund Amount Adjusted for Fully Refunded Order

Shopify rejected the refund because the recorded refund amount in shop currency was greater than the net payment received on the destination order. This typically happens with multi-currency orders where the exchange rate drifted between sale time and refund time on the source store - the customer paid and was refunded the same presentment amount, but the recorded shop-currency values differ.

When the source order was fully refunded (Price: Current Total = 0, Price: Total Outstanding = 0, Payment: Status = refunded) and there is exactly one sale and one refund transaction, the import retries with the refund amount adjusted to match the sale so the order settles cleanly on the destination.

This is informational; no action is required. The destination order will show as fully refunded.

ORD021 - Company Link Could Not Be Resolved

The order specifies a B2B company link, but Altera couldn't unambiguously resolve the company and/or location. The row fails so the order isn't created with the wrong association.

This code is raised in any of the following situations:

  • A Company: column (ID, External ID, or Name) is set but no company on the store matches it

  • A Company: Location column is set but no location matches it

  • Company: Location ID resolves to a location that belongs to a different company than the Company: column on the same row

  • Company: Location Name is set without a Company: column and more than one company on the store has a location by that name

  • Company: Location External ID is set without a Company: column and more than one company on the store has a location with that external ID

  • A Company: column is set but no Company: Location column is set

To fix:

  • Import the company and its locations before importing orders that reference them

  • Check that the values in the Company: and Company: Location columns match existing records exactly

  • When Company: Location Name or Company: Location External ID may not be unique across companies, also set Company: ID, Company: External ID, or Company: Name to scope the lookup

  • Make sure Company: Location ID and the Company: column on the same row point at the same company

ORD022 - Company Location Requires a Customer

A Company: Location is set but no customer could be resolved for the order. Shopify only creates a B2B order when both a customer and a company location are provided, and the customer has an active role at that location. The row fails.

  • Set Customer: ID or Customer: Email to a customer that exists on this store

  • Make sure that customer has been assigned as a contact at the company location with an "Ordering only" or "Location admin" role (see the Companies import guide)

ORD023 - Company Link Ignored on Existing Order

A Company: column was set on a row using MERGE or UPDATE, but Shopify's order update API doesn't support changing the company location of an existing order. The company link was ignored and the order's existing company association was preserved.

  • Use REPLACE (delete and recreate) if you need to change the company link on an existing order

  • Otherwise, leave the Company: columns blank for MERGE/UPDATE rows

ORD024 - Customer Has No Role at Company Location

The order specifies both a customer and a company location, but the customer isn't assigned as a contact at that location. Shopify only accepts a B2B order when the customer has an active role at the linked company location, so the row fails.

  • Open the company location in Shopify Admin and add the customer as a contact with an "Ordering only" or "Location admin" role

  • Or import the contact role first using the Companies import (see the Companies import guide), then re-run the order import

  • Make sure Customer: ID / Customer: Email and the Company: Location columns point to a customer/location pair that already has a role assigned

ORD025 - Total Shipping Price Not Imported

The row sets Price: Total Shipping to a non-zero value, but no row for this order has Line: Type set to Shipping Line. Shopify's order creation API has no field for a total shipping amount - shipping charges can only be added to an order through a Shipping Line row. The order was created without any shipping charge, even if a transaction on the order included the shipping amount.

  • Add a row with Line: Type set to Shipping Line for the order, with Line: Title set to a shipping method name and Line: Price set to the shipping amount

  • Price: Total Shipping is informational only (used on export) and is never used to create shipping charges on import

ORD026 - Line Item Has No Matching Variant and No Title

A line item on the order could not be matched to a product variant on this store (the Line: SKU or Line: Variant ID value doesn't exist), and the row has no Line: Title value. Shopify requires every line item to have a title, so the order fails to import with a "Line items Title can't be blank" error.

The error message includes the SKU and/or variant ID from the row so you can find the problem line in your file.

  • Check the Line: SKU / Line: Variant ID value in the error message and correct it so it matches a variant that exists on this store

  • Or, if the line item is intentionally not linked to a product, add a Line: Title value so it can be imported as a custom line item

ORD027 - Line Fulfillment Status Ignored on Existing Order

A row using MERGE or UPDATE set Line: Fulfillment Status to fulfilled on an order that already exists, but no Fulfillment Line rows were included. The Line: Fulfillment Status column only creates a fulfillment when the order is first created. When updating an existing order, that column is ignored, so no fulfillment was created and the order stays unfulfilled even though the import reports success.

  • To fulfill the whole order, add a single row with Line: Type set to Fulfillment Line and Fulfillment: Status set to success. Leave Fulfillment: ID empty and you do not need to list the individual items; the whole order is fulfilled. Add one such row per order

  • To fulfill only some of the items (a partial fulfillment), include one Fulfillment Line row per item with a Fulfillment: ID (any value like F1 groups the lines into one fulfillment), Fulfillment: Status set to success, and the item's Line: SKU / Line: Title / Line: Price (or Line: ID) so it can be matched

  • The simplest route for a migration is to re-export the orders from Altera, which produces correctly shaped Fulfillment Line rows, then re-import that file with MERGE

  • This is a warning only - the rest of the order update still applies

ORD028 - Order Details Read from First Line Item Row

The first row for this order has Line: Type set to something other than Line Item (for example Discount or Shipping Line), and that row's order-level cells are blank. Order details like the customer email, billing and shipping addresses, and processed date are normally read from the first row of each order, so the app filled the missing details from the order's first Line Item row instead.

  • This is informational only - the order imported with the details from the Line Item row

  • To avoid the message, order the rows in your file so a Line Item row (the one carrying the email, addresses, and dates) is the first row for each order

ORD029 - Order Created but Not Cancelled

The row has Cancelled At or Cancel: Reason set, so the app created the order and then tried to cancel it. Shopify does not allow cancelling an order that is both paid and fulfilled. Normally the app handles this automatically by cancelling the order's fulfillments and retrying (see ORD034), but that automatic step failed here, so the order was left uncancelled.

  • The order itself was created successfully and remains open

  • To cancel it, first cancel its fulfillments in the Shopify admin, then run an UPDATE import for the order with Cancel: Reason set

  • Shopify sets the cancellation date to the time of the import, so the Cancelled At value from the file is not preserved

ORD030 - Zero-Amount Transaction Skipped

The row has a transaction with Transaction: Amount set to 0. Shopify doesn't accept zero-amount transactions when creating an order, so the app skipped the transaction and imported the order without it.

  • The order itself imported normally, including its Payment Status, so a fully discounted or voucher-paid order still shows as paid

  • If only part of the order was free, set Transaction: Amount to the amount that was actually charged instead of 0

  • To avoid the message, leave the Transaction: columns blank on orders where nothing was charged

ORD031 - Refund Line Doesn't Match a Line Item

The order has a Refund Line row that the app couldn't tie to any line item of the order, so it couldn't tell Shopify which item was refunded.

  • On a new order, set Line: ID on the Refund Line row to the same value as the Line Item row it refunds

  • On an existing order (UPDATE), set Line: ID on the Refund Line row to the ID of the line item it refunds. An export of the order shows this in the Line: ID column

  • If Line: ID is blank, the app falls back to matching on Line: Variant ID and then Line: SKU, so one of those must match a Line Item row on a new order, or a line item of the existing order

  • On a new order, a Refund Line row for an item that has no Line Item row of its own can't be imported, because the item is never created and there is nothing to refund

  • The order itself is still created or updated; only the refund fails

ORD032 - Refund Line Matches More Than One Line Item

The order has a Refund Line row with no Line: ID, and the Line: SKU or Line: Variant ID it does have appears on more than one line item of the same order. The app doesn't guess which one was refunded, because attaching a refund to the wrong line item gives the order incorrect financial records.

  • On a new order, set Line: ID on the Refund Line row to the same value as the Line Item row it refunds

  • On an existing order (UPDATE), set Line: ID on the Refund Line row to the ID of the line item it refunds. An export of the order shows this in the Line: ID column

  • This is common when an order has the same product on several lines, for example the same SKU bought in two separate lines at different prices

  • The order itself is still created or updated; only the refund fails

ORD033 - Order Archived at Current Time

The row updated an existing open order and had a value in the Closed At column, so the app archived (closed) the order. Shopify only lets an existing order be archived at the moment the request is made, so the archive date on the order is the time of the import, not the value from the Closed At cell.

  • This is informational; the order was archived as requested

  • The exact Closed At timestamp is only applied when the order is first created, so to preserve historical archive dates, include the Closed At column in the import that creates the order

  • Cancelling an order does not archive it, so include Closed At on rows that cancel orders too; fully refunded or fulfilled orders can be archived automatically depending on the store's settings

ORD034 - Fulfillments Cancelled to Cancel Order

The row cancels an order that is both paid and fulfilled. Shopify does not allow cancelling such an order, so the app cancelled the order's fulfillments first and then cancelled the order. Shopify cannot represent an order that is paid, fulfilled, and cancelled at the same time.

  • This is informational; the order was cancelled as requested

  • The order shows as unfulfilled because its fulfillments were cancelled; tracking details remain visible on the cancelled fulfillments in the order's timeline

  • Orders that are fulfilled but not paid can be cancelled without this step and keep their fulfillments

ORD035 - Refund Transaction Skipped Without Kind or Amount

The order has a refund row where both Transaction: Kind and Transaction: Amount are blank, but another Transaction: column (usually Transaction: Gateway) has a value. Shopify requires the kind and amount on every refund transaction, so the app skipped the transaction and imported the refund without it.

  • The refund itself was still created and records the returned items; only the payment transaction was left out

  • This is usually the right outcome for zero-value returns where no money moved; to avoid the message, leave all Transaction: columns blank on those rows

  • If money was refunded on the row, set Transaction: Kind to refund and fill in Transaction: Amount, then re-import with MERGE

ORD036 - Refund Transaction Missing Amount

The order has a refund row where a Transaction: column such as Transaction: Currency is filled in, but Transaction: Amount is blank. A refund transaction can't be created without an amount, so the transaction was not imported.

  • The refund itself may still have been created for the returned items, but without the payment transaction, so the refunded amount is missing from the order's financial records

  • Fill in Transaction: Amount on the row and re-import with MERGE

  • If no money was refunded, leave all Transaction: columns blank on the row instead

ORD037 - Discounts Ignored on Existing Order

The row updates an existing order but includes discount data, either a Discount row or Line: Discount values. Shopify only applies discounts when an order is created and has no way to add or change a discount on an existing order, so the discount was skipped.

  • To apply the discount, re-import the order with the REPLACE command, which deletes and re-creates the order, or delete the order in Shopify first and import it again

  • Shopify doesn't support per-line discounts on imported orders: the discount is applied as one order-level discount that Shopify spreads across the line items

ORD038 - Fulfillment Service Not Found on Store

The Line: Fulfillment Service value doesn't match any fulfillment service registered on this store, so the line item was assigned Shopify's default manual fulfillment service instead. The rest of the order, including its fulfillments and tracking information, is imported normally.

  • This usually happens when importing orders exported from a different store: fulfillment services belong to a specific store, so the source store's services don't exist on the destination store

  • The manual fallback only affects which service the line item is associated with; tracking numbers and fulfillment statuses come from the Fulfillment: columns and are unaffected

  • To keep a third-party fulfillment service assignment, install and set up that fulfillment service on the destination store before importing, or clear the Line: Fulfillment Service column to accept the manual service without warnings

ORD039 - Shopify Source Value Skipped

The Source value is one of Shopify's own channel values (web, pos, iphone, android, shopify_draft_order, checkout_one, checkout_next). Shopify doesn't allow apps to set these protected values when creating an order, and sending one makes the whole order fail, so the value was skipped and the order was created without it.

  • These values appear in files exported from Shopify, so this warning is common when copying orders between stores

  • The order itself is imported normally; only the source value is left unset

  • To keep channel information on the order, use a custom Source value that isn't in the protected list, or add a tag and filter the order list by tag

ORD040 - Refund Transaction Generated by Default

The file has Refund Line or Refund Shipping rows for this refund but no Transaction row linked to the same Refund: ID, and the Refund: Generate Transaction column is missing or blank. The app treats a missing value as TRUE, the same as Matrixify, so it generated the refund's payment transaction from Shopify's suggested refund for the refunded lines: the unit price times the refunded quantity, plus the tax on those units, plus any refunded shipping. The transaction uses the gateway of the original payment and is linked to it as its parent.

  • This is an informational message; the refund and the transaction were created as described

  • To record a refund without returning any money, add the Refund: Generate Transaction column and set it to FALSE

  • To refund a different amount, add a Transaction row with the same Refund: ID, Transaction: Kind set to refund, and the amount in Transaction: Amount (see How to bulk partially refund Shopify orders for a specific amount)

  • Explicitly setting the column to TRUE generates the transaction in the same way without this message

ORD041 - Refund Transaction Not Generated

Refund: Generate Transaction was TRUE (or missing) for a refund with no Transaction row, but Shopify couldn't suggest a payment transaction for it, so the refund was created with its refund lines only and no money was returned. The message names the order and the reason. The message is only shown when the refund was created.

Common reasons:

  • The order has no successful payment to refund against, for example an order that was imported as pending or unpaid

  • The refunded lines have already been refunded in full, so nothing is left to refund

  • Shopify returned an error for the suggested refund lookup

To return money on this order, check the order in the Shopify admin and, if it still has a refundable balance, import a Transaction row with the same Refund: ID, Transaction: Kind set to refund, and the amount in Transaction: Amount.

ORD042 - Fulfillment Line Doesn't Match a Line Item

A Fulfillment Line row couldn't be tied to exactly one line item of the order: it matches no line item, or more than one.

  • On a new order, the order is created without that fulfillment, also when its other rows matched. Fix the row and add the fulfillment with an update

  • On an existing order, only that row is skipped. The rest of the fulfillment is still created if its other rows matched

  • Set Line: ID on the Fulfillment Line row to the ID of the line item it fulfills. An export of the order shows this in the Line: ID column

  • If Line: ID is blank, the app matches on the Line: SKU, Line: Title, and Line: Variant Title values the row has, and they must match the line item exactly. A row with none of them (for example only Line: Quantity) matches nothing

  • When two line items have the same SKU and title, add Line: Price to the row to say which one it fulfills

  • Each line item is matched at most once per import, so two Fulfillment Line rows for the same item need Line: ID to tell them apart

ORD043 - Amount Missing in One Currency

The order's Currency (what the customer paid) is different from its Shop Currency, but an amount is only in one of the two currencies, so the order wasn't created. The app doesn't convert between currencies, because it can't know the exchange rate the order was placed at. The message lists every missing column.

  • Each amount column (for example Line: Price) holds the amount in the order currency, and its twin with (Shop Currency) at the end (for example Line: Price (Shop Currency)) holds the same amount in the shop currency. Fill in both for line items, shipping lines, transactions, fixed amount discounts, and taxes

  • A refund Transaction row only needs Transaction: Amount, in the order currency. Its Transaction: Amount (Shop Currency) is ignored, because Shopify converts the refund with its own exchange rate. When Transaction: Amount is blank on an order in two currencies, the message is "Transaction: Amount" is required in Order currency

  • A blank or missing Shop Currency column means the store's currency. An older file where Currency held the shop currency of an order in another currency needs a Shop Currency column with that same currency

  • For an order in one currency, set Currency and Shop Currency to the same value (or leave Shop Currency blank for the store's currency). Then only the amount columns are needed

  • With the REPLACE command the existing order is kept, because the new one can't be created

ORD044 - Transaction Currency Isn't the Order Currency

A transaction row has a Transaction: Currency that is different from the order's Currency. Shopify only accepts transactions in the order currency, so the amount in Transaction: Amount was imported as an amount in the order currency. Check the order's payment status after the import. If the amount was in another currency, convert it to the order currency in the file and import the order again.

When the order has one currency and the row has a Transaction: Amount (Shop Currency) value, that value is imported as the amount instead, because it is already in the order currency. Files exported before September 28, 2026 have this shape for orders that the customer paid in another currency.

ORD050 - Order Line Items Edited

The import changed the line items of an existing order. The message counts the line items that were added (rows that aren't on the order, see ORD080), updated (a higher Line: Quantity), and deleted (Line: Command set to DELETE). For example: Order Edit: added [1] Line Items, updated [0], deleted [1].

All the changes for one order are saved together as one order edit in Shopify, and the order timeline shows them. The customer isn't notified. This message is for information only.

ORD051 - Line Item Quantity Not Decreased

The Line: Quantity value is lower than the quantity of the existing line item, so the quantity wasn't changed. Shopify reduces the quantity of an existing line item through a refund, not an edit.

  • To reduce the quantity, add a Refund Line row for the line item with the quantity to remove. See Refunds

  • To remove the whole line item, set Line: Command to DELETE on its row

  • To leave the line item as it is, clear Line: Quantity or set it to the current quantity

ORD052 - Line Item Row Matches More Than One Line Item

The row has no Line: ID, and its Line: Title, Line: Variant ID, or Line: SKU (on a Line: Command DELETE row: its Line: Variant ID or Line: SKU) matches more than one line item on the order, so the app can't tell which line item to change. The row was skipped and the other rows were imported. A row that matches more than one line item isn't added.

  • Set Line: ID on the row to the ID of the line item to change. An export of the order shows it in the Line: ID column

ORD053 - Customer Email Not Changed

The row has a Customer: ID and a Customer: Email that belongs to a different customer, or that is different from the email of that customer. The order is linked to the customer with the Customer: ID, and the email in the file is ignored.

  • An order import can't change a customer's email. To change it, import the customer with a customers import

  • To link the order to the customer with that email, remove the Customer: ID value from the row

ORD054 - New Customer Created

No customer on the store has the Customer: Email from the row, so the app created a new customer with that email and linked the order to it. The new customer also gets the name, phone, and address from the row's Customer: columns. This message is for information only.

ORD055 - Order Customer Not Changed

The row asks to change the order's customer, but no customer on the store matches the Customer: ID or Customer: Phone value, so the order keeps its current customer. The rest of the row was imported.

  • Check that the Customer: ID belongs to a customer on this store. IDs from another store don't match

  • To find the customer by email, or to create a new customer, add the Customer: Email column

  • To remove the customer from the order, leave Customer: ID blank, with no Customer: Email or Customer: Phone value on the row

ORD056 - Unknown Line Command

A row has a Line: Command value that isn't DEFAULT, MERGE, or DELETE (for example a typo like DELTE). The order wasn't created or changed, so that the line items aren't left in a state you didn't ask for.

  • Correct the value and import the order again. Values are case-insensitive

  • Leave the cell blank to keep the line item as it is

ORD057 - Custom Line Item Can't Be Added to a Multi-Currency Order

The row adds a custom line item (a row that isn't on the order, with no product) to an order in two currencies: the order's Currency, which the customer paid in, differs from its Shop Currency. Shopify prices a new custom line item in the order currency and sets the shop currency amount with its own exchange rate, and the app doesn't convert between currencies. The order wasn't changed. The message has the same wording as Matrixify, for example Currency must be EUR.

  • To add a product, use Line: SKU or Line: Variant ID instead. Shopify adds it at the product's price in both currencies

  • To add the custom line item with your own amounts in both currencies, create the order again: import it with the REPLACE command, with Line: Price and Line: Price (Shop Currency) on each line item row. This deletes the order and creates a new one

ORD058 - Unknown Fulfillment Status

A row has a Fulfillment: Status value that can't be imported. The order wasn't created or changed, so that it isn't marked as fulfilled when you didn't ask for it.

An import can create a fulfillment with one of these values (case-insensitive):

  • success creates the fulfillment. A blank cell does the same

  • cancelled creates the fulfillment and cancels it. With a Fulfillment: ID of an existing fulfillment, it cancels that fulfillment

  • error and failure skip the fulfillment (see ORD059)

Shopify no longer supports open and pending for fulfillments, so they also fail the order.

This often happens when the file has a Fulfillment Status column with the order's status, for example unfulfilled or partial from a Shopify export. The app reads that header as Fulfillment: Status. To set the status of the whole order, rename the column to Order Fulfillment Status. To leave the order unfulfilled, remove the column.

ORD059 - Fulfillment Skipped

A row has Fulfillment: Status set to error or failure. Shopify can't create a fulfillment in that state, so the app skipped the fulfillment and imported the rest of the order.

  • To fulfill the items, set Fulfillment: Status to success and import the order again

ORD060 - Fulfillment Cells Ignored

A Line Item row has Fulfillment: cells, for example Fulfillment: Tracking Number or Fulfillment: Location, but Fulfillment: ID and Fulfillment: Status are both empty. The app didn't fulfill the line item and imported the rest of the order.

When an order has no Fulfillment Line rows, the app fulfills a line item from its own row only when Fulfillment: ID or Fulfillment: Status has a value. This stops a row with only tracking details, or only Fulfillment: Send Receipt, from fulfilling the order by accident.

  • To fulfill the line item, set Fulfillment: Status to success on its row and import the file again

  • To fulfill only part of the quantity, or to group line items into several fulfillments, use Fulfillment Line rows instead

ORD062 - Refund Already Exists

An UPDATE or MERGE row group describes a refund that the order has already, so the app skipped it and didn't refund the customer again. The rest of the order was updated as usual. This is the same as Matrixify. A refund is skipped when:

  • Its Refund: ID is the ID of a refund of this order, as in an export of the order. The rows under that ID aren't compared, so a changed quantity or amount under an existing Refund: ID is also skipped

  • It is an exact copy of a refund of this order with another Refund: ID: it has a Refund Line row and a Transaction row, and the Transaction row has the same amount and the same time (to the second) as the existing refund. The time comes from Refund: Created At or Transaction: Processed At on the Transaction row

To add another refund to the order, give it a Refund: ID that isn't a refund of this order (for example 1), and leave out Refund: Created At and Transaction: Processed At. A refund without these times is always created, so importing the same refund file twice refunds twice.

ORD063 - Refund Currency Isn't the Order Currency

A refund Transaction row has a Transaction: Currency that isn't the order's currency (the currency the customer paid in). Shopify only refunds in the order currency, and the app doesn't convert amounts, so the order wasn't changed and no refund was created.

  • Put the refund amount in the order currency in Transaction: Amount, and set Transaction: Currency to the order currency or leave it blank

  • An export of the order shows its currency in the Currency column

ORD064 - Refund Shipping Needs a Transaction Row

A Refund Shipping row is for an order in two currencies (its Currency is different from its Shop Currency), and the refund has no Transaction row. Shopify can't work out the amount to return for shipping on such an order, so the order wasn't changed and no refund was created. Matrixify fails these rows too.

To refund the shipping, add a Transaction row with the same Refund: ID, Transaction: Kind set to refund, and the amount in the order currency in Transaction: Amount. To record the shipping refund without returning money, set Refund: Generate Transaction to FALSE.

ORD065 - Refund More Than the Amount Paid

The refund Transaction rows of an existing order add up to more than the order has left to refund: its successful payments minus the refunds it has already. The message shows both amounts in the order currency. The order wasn't changed and no refund was created.

  • Check the amounts in Transaction: Amount. They are in the order currency, not the shop currency

  • Check the order in the Shopify admin. A refund of the same order that is already there counts against the amount left

ORD067 - Shipping Line Price Missing

A Line Item row has values in Shipping Line: columns, but Shipping Line: Price is empty, so the order wasn't created. The message is: "Shipping Line: Price" is required to create a Shipping Line.

  • Add the shipping price to Shipping Line: Price. Use 0 for free shipping

  • The app reads the Shipping Line: columns from one row only: the first Line Item row of the order that has a value in any of them. Values on other rows aren't added to it, so put the title, price, and tax of the shipping line on the same row

  • When Currency differs from Shop Currency, the order currency amount goes in Shipping Line: Price, and the shop currency amount in Shipping Line: Price (Shop Currency). A shop currency amount alone isn't enough

  • With the REPLACE command the existing order is kept, because the new one can't be created

ORD068 - Shipping Line Value Isn't a Valid Number

A Shipping Line: column that holds a number has a value that isn't a valid number, or a shipping price that is negative, so the order wasn't created. The message names the column and the value, for example "Shipping Line: Price" [-5.00] can't be negative.

  • Shipping Line: Price, Shipping Line: Price (Shop Currency), and Shipping Line: Tax Rate must be 0 or more

  • Shipping Line: Tax Price and Shipping Line: Tax Price (Shop Currency) must be numbers

  • Use a period or a comma as the decimal separator, without a currency symbol

Matrixify imports a negative shipping price as a positive charge. The app fails the order instead, so that the customer isn't charged for shipping by mistake.

ORD069 - Shipping Line Title Missing

A Line Item row has a Shipping Line: Price with a Shipping Line: Code or Shipping Line: Source, but Shipping Line: Title is empty. Shopify needs a title for every shipping line, so the order wasn't created.

  • Add the name of the shipping method to Shipping Line: Title, for example Standard

When the row has only a Shipping Line: Price (no title, code, or source), the order is created without the shipping line and the app shows ORD071.

ORD070 - Shipping Line Tax Title or Rate Missing

A Line Item row has a shipping tax value, but Shipping Line: Tax Title or Shipping Line: Tax Rate is empty, so the order wasn't created. The message names the empty columns.

  • Fill in Shipping Line: Tax Title (for example VAT) and Shipping Line: Tax Rate (for example 0.21 for 21%)

  • Shipping Line: Tax Price is the tax amount. When it's empty, the shipping line gets a tax line of 0.00

  • The shipping tax line is imported as not channel liable

ORD071 - Shipping Line Values Ignored

The file has values in Shipping Line: columns that weren't imported. The rest of the order was imported. The message names the columns and values that were ignored. This happens when:

  • A later Line Item row of the order has other Shipping Line: values. Only the first Line Item row with a value in any Shipping Line: column adds a shipping line. To add a second shipping line, add a row with Line: Type set to Shipping Line

  • The values are on a row that isn't a Line Item row, for example a Transaction or Shipping Line row. Move them to a Line Item row of the order

  • The row has a Shipping Line: Price but no Shipping Line: Title, Shipping Line: Code, or Shipping Line: Source. The order was created without the shipping line. Add a Shipping Line: Title and import the order again with the REPLACE command

  • The row updates an existing order (the UPDATE or MERGE command). The Shipping Line: columns only add a shipping line when an order is created. To add the shipping line, import the order with the REPLACE command. This deletes the order and creates it again

Matrixify ignores the same values without a message.

ORD072 - Tax Lines Left Out of the Export

An order has more tax lines than the export has Tax columns, so its last tax lines aren't in the file. The export finds the number of tax columns from the newest and the oldest orders before it writes the first row. An order with more tax lines in between can have more than that number.

  • Export the order again with a filter that selects it, for example on Name. The export then has a column for each of its tax lines

  • An export has at most 100 tax lines per order, and at most 10 in the order format from before September 28, 2026

ORD073 - Restock Columns Ignored on a Deleted Line Item

A Line Item row with Line: Command set to DELETE also has Refund: Restock TRUE, a Refund: Restock Type, or a Refund: Restock Location. The app deleted the line item and ignored these columns.

When you delete a line item from an existing order, Shopify doesn't restock its units: the stock is written off. The committed and on hand quantities go down, and the available quantity doesn't change. Matrixify does the same.

  • To give the units back to stock, add a Refund Line row for the line item with Refund: Restock set to TRUE instead of the DELETE. See Refunds

  • To delete the line item without a restock, remove the restock columns from the row

ORD074 - Inventory Behaviour Ignored on an Existing Order

The row updates an existing order and has an Inventory Behaviour value other than bypass. Shopify uses the inventory behaviour only when it creates an order, so the value was ignored and the rest of the row was imported. bypass (the value in every export) gives no warning.

A line item that you add to an existing order (Line: Command set to MERGE) or a higher Line: Quantity always takes the units from stock.

  • To stop the warning, clear Inventory Behaviour on update rows

  • To create the order again with another inventory behaviour, import it with the REPLACE command. This deletes the order and creates a new one

ORD075 - Fulfilled Line Item Can't Be Deleted

A Line Item row with Line: Command set to DELETE points to a line item whose units are all fulfilled (or already refunded). Shopify can only remove unfulfilled units from an order, so the line item wasn't changed. When the row has no other line item changes, the row fails. When it has other changes, they are imported and the row gets a warning.

A line item that is only partly fulfilled can be deleted: its unfulfilled units are removed and its fulfilled units stay on the order.

  • To take back fulfilled units, add a Refund Line row for the line item. To put the units back in stock, set Refund: Restock to TRUE. See Refunds

ORD076 - Restock Type Needed for a Partly Fulfilled Line Item

A Refund Line row has Refund: Restock set to TRUE and no Refund: Restock Type, and its line item has both fulfilled and unfulfilled units. The refund takes only some of the units, so the app can't tell which units to restock. The row failed and nothing was refunded.

Without a type, the app restocks like Matrixify: CANCEL when the line item has only unfulfilled units, RETURN when it has only fulfilled units, and both when the refund takes all the units.

  • Set Refund: Restock Type to RETURN to restock fulfilled units, or to CANCEL to restock unfulfilled units

  • To restock both kinds, use two Refund Line rows for the line item, one with each type

ORD077 - No Line Item Row

The app can't create the order, because the order has no Line Item row. Shopify needs at least one line item to create an order.

A row is a Line Item row when its Line: Type is Line Item. When the file has no Line: Type column, no row is a Line Item row, so every new order in the file fails with this error.

  • Add the Line: Type column and set it to Line Item on the rows with the products of the order. Fill Line: Title, Line: Quantity, and Line: Price on those rows

  • To update an existing order without changing its line items, use the UPDATE command. An update doesn't need a Line Item row

ORD080 - Line Item Added to the Order

The row is a Line Item row with a blank or DEFAULT Line: Command on an existing order (order Command set to UPDATE or MERGE), and no line item on the order matches it. The app added it to the order, like a row with Line: Command set to MERGE. The message names the line item, for example Line Item [Gift wrap] is not on the order, so it was added.

The app looks for the line item by Line: ID, then by Line: Title (not case-sensitive, the price doesn't matter), and then by Line: Variant ID or Line: SKU. The added line item raises the order total, so the order shows a balance to collect. A product line item also commits stock. The customer isn't notified.

  • If the line item is already on the order under another title, set Line: ID on the row to its ID. An export of the order shows it in the Line: ID column. A changed title in the file doesn't rename the line item

  • To leave the line items of an order as they are, remove the Line Item rows from the file, or remove the Line: columns

ORD081 - Line Quantity Missing for a New Line Item

A Line Item row adds a line item to an existing order (order Command set to UPDATE or MERGE, and no line item on the order matches the row), but Line: Quantity is empty. The whole order failed and wasn't changed. The message has the same wording as Matrixify, for example "Line: Quantity" must be provided for Line Item [Gift wrap, 3.0, USD].

  • To add the line item, set Line: Quantity and import the file again

  • If the row is for a line item that is already on the order, set Line: ID on the row to its ID. An export of the order shows it in the Line: ID column

ORD082 - Line Price Missing for a New Custom Line Item

A Line Item row adds a custom line item to an existing order: no line item on the order matches the row, no product matches its Line: SKU, Line: Variant ID, or Line: Product Handle, and Line: Price is empty. This applies to every Line: Command value, also MERGE. The whole order failed and wasn't changed, so no line item is added at 0.00. The message has the same wording as Matrixify, for example "Line: Price" must be provided for Line Item [Gift wrap, 1], or linked to a Product Variant.

  • To add a custom line item, set Line: Price and import the file again. Use 0 for a free line item

  • To add a product, check that Line: SKU or Line: Variant ID belongs to a product on the store

  • If the row is for a line item that is already on the order, set Line: ID on the row to its ID

ORD083 - Line Item Not Added Because the Command Is Blank

A Line Item row with a blank or DEFAULT Line: Command matches no line item on an existing order, and the order Command is blank. The app didn't add the line item, and it imported the rest of the order. The message names the line item, for example Line Item [Gift wrap] is not on the order and wasn't added, because the order Command is blank. Set Command to MERGE or UPDATE to add it.

A blank Command updates an order that already has the same name. When no row matches a line item of that order, the file often reuses the name of another order, for example an order number from another system. Adding the rows would put the items of one order on a different order, so the app only adds them when you ask for it.

  • Check that the order name in the file belongs to the order on the store. If it belongs to a different order, give the order in the file a new name

  • To add the line item to the existing order, set Command to MERGE or UPDATE, or set Line: Command to MERGE on the row

ORD084 - Order Name Reused for Another Customer's Order

An order with a blank Command was found by its Name, but the customer in the file (Customer: ID, Customer: Email, Customer: Phone, or Email) is not the customer of that order, and none of the file's Line Item rows matches a line item of the order. The app didn't update the order. The message names the order, for example Order [#1001] exists for another customer and none of its line items match this file, so it was not updated. Set Command to UPDATE or MERGE to change the existing order, or use another Name to create a new order.

A blank Command is MERGE, so an order in the file that has the same name as an order on the store updates that order. When the customer and the line items both differ, the file almost always reuses an order number from another system for a new order of another customer. Updating would move the existing order to the other customer and replace its addresses. Matrixify treats a blank order Command as NEW and fails such rows too.

  • If the order in the file is a new order, give it a name that isn't on the store yet, or leave Name blank so Shopify assigns the next number

  • If you do want to change the existing order, set Command to UPDATE or MERGE

ORD085 - Command Is NEW but the Order Already Exists

The Command is NEW, but an order with the same ID or Name is already on the store. The rows of that order fail and nothing changes, like in Matrixify.

  • To change the existing order, set Command to UPDATE or MERGE

  • To create a new order, give it another Name, or leave Name blank so Shopify assigns the next number

  • To skip orders that already exist without a failure, set Command to IGNORE on those rows

ORD086 - Billing Address Can't Be Changed

The row updates an existing order, and at least one Billing: value is different from the billing address of the order. Shopify doesn't let apps change the billing address of an existing order, so the billing address stays as it is. The rest of the row is imported.

Blank Billing: cells, and values that are the same as the order's, give no warning. A province or country can be a name or a code, and case and extra spaces don't matter, so the re-import of an export stays quiet.

  • To keep the order and its billing address, remove the Billing: columns or make them match the order

  • To change the billing address, re-create the order with Command set to REPLACE

ORD087 - New Order Not Cancelled Without Cancelled At

A new order had Cancel: Reason, Cancel: Refund, or Cancel: Restock set, but Cancelled At was blank, so the order was created and not cancelled. Like in Matrixify, only a Cancelled At value cancels a new order.

  • To create the order as cancelled, set Cancelled At to any date (Shopify uses the time of the import)

  • On an existing order (UPDATE or MERGE), Cancel: Reason alone still cancels the order

ORD088 - Order Has Nothing Outstanding

A Transaction row with the kind sale was not added to the existing order, because the order has nothing left to pay (it is paid, or paid more than its total). This keeps a file that is imported a second time from paying the same orders twice.

  • If the order really got another payment, check the order total first: add the line items that the payment is for, then import the transaction

  • A row with a Transaction: ID that is already on the order is skipped without this warning

ORD089 - Transaction Amount More Than What Is Left

The Transaction: Amount of a sale is more than the outstanding amount of the existing order, or the amount of a capture is more than the amount left on the authorization. The app added only the outstanding (or remaining authorized) amount, so the order is not paid more than its total.

  • Check the amount in the file and the order total in the Shopify admin

ORD090 - Transaction Not Added to the Existing Order

A Transaction row of an existing order was skipped. The message says why:

  • Transaction: Kind is blank, or is a kind that can't be added to an existing order (authorization, or a refund without Refund Line rows). To refund, use Refund Line rows with a Refund: ID.

  • Transaction: Status is not success (for example pending or failure). Only a successful payment is added.

  • Transaction: Amount is blank and Transaction: Status is blank. Set the amount, or set the status to success to pay the outstanding amount.

  • Transaction: Currency is not the currency of the order.

  • Shopify didn't add a payment smaller than the outstanding amount. Shopify allows a partial payment only on Shopify Plus stores. A payment of the full outstanding amount works on every plan.

ORD091 - Authorization Not Captured or Voided

A capture or void row of an existing order was skipped. The message says why:

  • The order has no open authorization (it is captured or voided already).

  • The order has more than one open authorization. Set Transaction: Parent ID to the ID of the authorization.

  • The authorization is from a real payment gateway. A capture takes the customer's money, so set Transaction: Force Gateway to TRUE to capture or void it.

  • Shopify refused the capture or the void. The message shows Shopify's reason.

ORD092 - Order Email Not Changed After a Customer Switch

The order's customer was changed to the customer in the file, but Shopify didn't accept that customer's email as the order's email, so the order keeps its old email. The message shows the email and Shopify's reason, for example Email contains an invalid domain name. Shopify accepts some emails on a customer that it refuses on an order.

  • Check the customer's email in Shopify. If it is wrong, correct it on the customer and import the row again

  • To set a different order email, add an Email column with the email you want

ORD093 - Line Item Not Linked to a Product Variant

The line's Line: Product Handle or Line: Product ID found a product, but none of its variants matches the line, and the product has more than one variant. The line was imported as a custom line item without a link to the product. A variant of another product with the same SKU isn't used, because the product column names the product.

A line is linked to a variant of the product when one of these matches, in this order: Line: Variant ID, Line: SKU (or Line: Variant SKU), Line: Variant Title. When the product has only one variant, the line is linked to it even when the SKU is different.

  • Correct Line: SKU or Line: Variant Title so it matches one of the product's variants, or add Line: Variant ID

  • If the line belongs to another product, correct Line: Product Handle or clear it, so the line is matched by SKU across the store

ORD094 - Discount Type Assumed as fixed_amount

The Line: Title of a Discount row is not one of the discount types fixed_amount, percentage, or shipping, so the discount was imported as a fixed_amount discount. The discount code is the Line: Name value, and the amount is the Line: Discount value. Files often have the discount code in Line: Title by mistake. A blank Line: Title is also read as fixed_amount, without this warning.

  • If the discount is a fixed amount, set Line: Title to fixed_amount and put the discount code in Line: Name

  • For a percentage discount, set Line: Title to percentage and put the percent in Line: Price

ORD095 - Discount Amount Missing

The order was not created, because a Discount row of the type fixed_amount has no Line: Discount amount. This includes a row with a blank or unknown Line: Title, which is read as fixed_amount (see ORD094). The order is not created without its discount, so it doesn't get the full price.

A row without an amount is accepted when the line items have Line: Discount values: the line discounts are then added up and imported under the row's code.

  • Add the discount amount in Line: Discount, for example -15.00

  • For a percentage discount, set Line: Title to percentage and put the percent in Line: Price

  • For free shipping, set Line: Title to shipping

  • If the order has no discount, remove the Discount row

ORD096 - Shipping Discount Imported as Free Shipping

A Discount row with the type shipping has a Line: Discount amount that is not the shipping price of the order. Shopify can import a shipping discount only as free shipping, so the whole shipping of the order was discounted and the amount in the file was not used. The order was created.

  • If the order really had free shipping, you can ignore this warning

  • If only part of the shipping was discounted, lower the Line: Price of the Shipping Line row by the discount instead and remove the Discount row

ORD097 - Discount Lines of More Than One Type

The order was not created, because its Discount rows have more than one type, for example shipping and fixed_amount. Shopify allows only one discount type per order. A blank or unknown Line: Title counts as fixed_amount (see ORD094).

  • Keep the Discount rows of one type and remove the others

  • To combine a shipping discount with another discount, lower the Line: Price of the Shipping Line row instead of using a shipping row

Draft Order Codes

Error and warning codes that occur when dealing with draft order imports and operations.

DRFT001 - Draft Orders Import Not Yet Available

We're still working on importing draft orders. Please email us if you need more information about when this feature will be available or if you have specific requirements for draft order imports.

DRFT002 - Unable to Find Draft Order to Delete

The draft order you are trying to delete cannot be found in your Shopify store. This may be because it was already deleted or because the identifier (ID or name) provided in your import is incorrect.

DRFT003 - Shopify API Refused to Save Draft Order

The Shopify API rejected the draft order data and refused to save it during a creation operation. This typically occurs when the draft order configuration violates Shopify's business rules or contains invalid data that passed initial validation but failed at the API level.

DRFT004 - Draft Order is Completed - Only Tags Can Be Updated

You are trying to update a draft order that has already been completed (converted to a real order). Completed draft orders are locked and only their tags can be modified. Other changes require creating a new draft order.

DRFT005 - Shopify API Refused to Update Draft Order

The Shopify API rejected the draft order data and refused to update it. This typically occurs when the updated draft order configuration violates Shopify's business rules or contains invalid data that passed initial validation but failed at the API level.

DRFT006 - Invalid Email Format

The email address provided for the draft order is not in a valid format. Email addresses must follow the standard email format (e.g., [email protected]). Please check the email field and ensure it contains a properly formatted email address.

DRFT007 - Invalid Date Format for Reserve Inventory Until

The date format provided for the 'Reserve Inventory Until' field is invalid. Expected format is YYYY-MM-DD HH:MM:SS or YYYY-MM-DD. Please ensure your date values match one of these formats.

DRFT008 - Company Link Could Not Be Resolved

Altera could not link the draft order to a B2B company location. This happens when the Company: columns reference a company, location, or customer that doesn't exist on the store, when the location belongs to a different company than the one specified, or when a Company: column is set without a corresponding Company: Location value. Make sure the company and location identifiers exactly match an existing record in Shopify and that the row also sets Customer: ID or Customer: Email.

DRFT009 - Could Not Resolve Company Contact

The draft order specifies a company location, but the customer is not a contact of that company and could not be added automatically. Add the customer as a contact of the company in Shopify admin (or in the same import via the Companies sheet) before importing draft orders that reference this company.

DRFT010 - Invalid Email Format

A value in the Email column of a draft orders file does not look like an email address. The message includes the row number and the value that was found. Correct the value so it contains an @ and a domain, or leave the cell blank, and upload the file again.

DRFT011 - Invalid Customer Email Format

A value in the Customer: Email column of a draft orders file does not look like an email address. The message includes the row number and the value that was found. Correct the value so it contains an @ and a domain, or leave the cell blank, and upload the file again.

DRFT012 - Line Quantity or Price Must Be a Number

A value in the Line: Quantity or Line: Price column of a draft orders file is not a number. The message names the column, the row, and the value that was found. Remove any currency symbols or text from the cell so it contains only a number, and upload the file again.

DRFT013 - Invalid Date/Time Value

A value in the Reserve Inventory Until, Created At, or Updated At column of a draft orders file could not be read as a date and time. The message names the column, the row, and the value that was found. Use a format like 2024-12-05 06:12:35 -0500 (ISO-formatted timestamps are also supported), or leave the cell blank, and upload the file again.

Inventory Transfer Codes

Error and warning codes that occur when dealing with inventory transfer imports and operations.

TRFR001 - Unable to Resolve Line Item

An inventory transfer line item could not be matched to a product variant. This happens when the SKU, barcode, or inventory item ID provided doesn't match any variant in your store, or when the quantity is missing or zero. Check that your SKUs match exactly and that the quantity is greater than zero.

TRFR002 - Inventory Transfer Not Found for UPDATE

The UPDATE command was used, but no inventory transfer with the provided ID could be found in your Shopify store. Either use MERGE to create the transfer if it doesn't exist, or verify the ID in your file matches an existing transfer.

TRFR003 - Invalid Inventory Transfer Status Transition

The Status value in the import file is either unknown or represents a transition that is not allowed from the transfer's current state. Valid statuses are Draft, Ready to Ship, In Progress, Received, and Cancelled. Note that In Progress and Received are only reached by creating and receiving shipments - they cannot be set directly. Transfers cannot be moved back to Draft, and a received transfer cannot be cancelled.

TRFR004 - Shipment Not Found on Transfer

A row referenced a shipment that doesn't exist on the transfer (either by ID or because DELETE was used without a valid ID). Leave the Shipment N: ID column blank to create a new shipment, or use the ID of a shipment that already exists on the transfer.

TRFR005 - Conflicting Shipment Column Prefixes

The import file contains both Shipment: (single shipment) and Shipment 1: (numbered shipments) column prefixes in the same sheet. Pick one convention and use it consistently. Use Shipment: when every transfer has exactly one shipment, or Shipment 1:, Shipment 2:, etc. when transfers may have multiple shipments.

TRFR006 - Transfer Location Not Found

The origin or destination location specified for the inventory transfer could not be found in your Shopify store. Verify that the location name or ID in your import file matches an existing location. Leave blank for external suppliers or shipments.

TRFR007 - Origin and Destination Can Only Be Changed for Draft Transfers

You tried to change the Origin Location or Destination Location on an inventory transfer that is no longer in DRAFT status. Shopify only allows origin and destination to be changed while the transfer is in the Draft state. Either clear the location column to leave it unchanged, or cancel and recreate the transfer.

TRFR008 - Shopify API Refused to Save Inventory Transfer

The Shopify API rejected the inventory transfer data and refused to create it. This typically occurs when the transfer configuration violates Shopify's business rules or contains invalid data. Check the error message returned by the API for specific details.

TRFR009 - Shopify API Refused to Save Inventory Shipment

The Shopify API refused to create or update an inventory shipment on this transfer. This usually means the shipment input violates a business rule (for example, the transfer isn't in a shippable state or the shipment has no line items). Check the surrounding error message for the specific reason.

TRFR012 - Inventory Transfer Already Exists

The NEW command was used for an inventory transfer that already exists in your Shopify store. Use MERGE to update an existing transfer (once updates are supported), or remove the ID column to create a new transfer.

TRFR014 - Inventory Transfer REPLACE Not Yet Supported

The REPLACE command is not yet supported for inventory transfers and will be available in a future release. Use NEW or MERGE to create new transfers.

TRFR015 - Invalid Date Created

The value provided for the Date Created field is not a valid date. Expected format is YYYY-MM-DD HH:MM:SS or an ISO 8601 timestamp. Please check the date value and ensure it matches one of these formats.

TRFR017 - Inventory Item Does Not Track Inventory

One or more line items reference a variant that has inventory tracking disabled. Shopify only allows inventory transfers for tracked variants. Enable inventory tracking on the variant in Shopify admin (or via a product import) before including it in a transfer.

TRFR018 - Inventory Item Not Stocked at Origin or Destination

A line item on the inventory transfer references a variant that Shopify considers "not stocked" at one of the transfer's locations. Shopify surfaces a single error message for this, but in practice it can be triggered by either end of the transfer:

  • Origin not stocked - the item has never been activated at the origin location, so there is no inventory level to draw from. Stock the item at the origin (for example with a product or inventory import) before including it in the transfer.

  • Destination not stocked - the origin has stock, but the destination location has never had an inventory level activated for this item. Shopify requires an active inventory level at the destination before a shipment can move from Draft or Ready to Ship into In Transit. Activate the item at the destination (an inventory import with quantity 0 is enough) and retry.

If you see this error when creating or marking a shipment as In Transit and the origin clearly has stock, the destination is almost always the real cause.

TRFR019 - Invalid Shipment Status Transition

The Shipment N: Status value is either unknown or represents a transition that isn't allowed from the shipment's current state. Valid statuses are Draft, In Transit, Partially Received, and Received. Shipments can move Draft to In Transit to Received, but cannot be sent back to an earlier state.

TRFR020 - Shipment Has No Line Items

A new shipment was requested but the transfer has no remaining shippable quantities for any of its line items. Either add more line items to the transfer, or avoid creating additional shipments until line items with remaining quantity are available.

TRFR021 - Ambiguous SKU or Barcode

A line item's SKU or barcode matched more than one variant in your store, so the importer cannot decide which inventory item to transfer. Shopify treats inventory transfers as strict on this point - duplicate SKUs are rejected rather than guessed. Make the SKU or barcode unique across your catalog (or scope it to the correct variant) and re-run the import.

TRFR022 - No Line Items Could Be Resolved

The row included line items but none of them matched a variant in your store by SKU or barcode. Rather than create or update the transfer with the wrong line items (or with none at all), the row is rejected. Check the accompanying TRFR001 warnings to see which SKUs or barcodes failed, correct them, and re-run the import.

Did this answer your question?