Simplest way to make variant metafield values available per line item on every new order?

We need each order to arrive in our downstream system already carrying some per-line-item data that we store as variant metafields. It has to work for every order origin: online store/headless checkout, draft orders, orders created via the Admin API, and subscription renewal orders created by Skio. We’d rather not query Shopify again per line when the order arrives.

Since LineItem doesn’t support metafields and line item properties can’t be set after creation (see Metafields on line items? ), we went with this, and it works on a dev store:

  1. Flow, trigger Order created.
  2. A metafield alias created on order.lineItems.variant (unstructured, set up in a Log output step).
  3. Run code with input { order { lineItems { id variant { myAlias { value } } } } }, which builds a JSON object keyed by line item id.
  4. Update order metafield writes it as one json order metafield.
  5. Our app subscribes to orders/updated with metafieldNamespaces, and the update that follows the Flow write carries the metafield.

Questions:

  1. Is this the simplest supported approach, or is there a more direct way to get variant-level data onto a new order (or into its webhook payload) for all order origins?
  2. Is aliasing a metafield on a nested list element (lineItems.variant) officially supported in Run code, or does it just happen to work?
  3. What delivery guarantees does Flow give for Order created? Is it guaranteed to run for every order, and does it retry? We want to know whether we need our own reconciliation for orders that never get the metafield.
  4. Does Order created fire for subscription renewal orders created by a third-party subscription app like Skio (via subscription billing attempts)? Is there anything about those orders that would stop the Run code input from resolving the variant metafields?

Some details here: https://help.shopify.com/en/manual/shopify-flow/create/troubleshoot

Flow does not guarantee event delivery. Inside Flow, it is exceptionally rare to miss any webhook. Sometimes the job that produces the webhooks fail, but it’s very rare (<1% of merchants affected ever). The job is getting more reliable over time. Some merchants have built a scheduled job just to catch those misses, just in case.

Flow does retry on an exponential backoff for up to 36 hours.

As for your use case, I think how you are doing it is pretty typical (using variants and order metafields).