Does REST Admin API preserve shipping_lines.source when creating orders via /orders.json?

Hi everyone,

I’m creating duplicate Shopify orders via an automation tool using the Admin API.

Context:
The original order has a shipping line from a carrier/app:

source: "Izprati.bg"
code: "v2:..."

The shipping line represents a Speedy service point / pickup office. The carrier app later reads this data to generate the correct label.

When I duplicate the order with GraphQL orderCreate, I can copy shippingLines.title and shippingLines.code, but I cannot set shippingLines.source.

So I tried REST:

POST /admin/api/2026-01/orders.json

with payload like:

{
  "order": {
    "email": "customer@example.com",
    "line_items": [
      {
        "variant_id": 123456789,
        "quantity": 1,
        "requires_shipping": true
      }
    ],
    "shipping_address": {
      "first_name": "Test",
      "last_name": "Customer",
      "address1": "Address",
      "city": "Sofia",
      "country_code": "BG",
      "phone": "+359..."
    },
    "shipping_lines": [
      {
        "title": "0.03 km away - Speedy - SOFIA - OFFICE NAME",
        "price": "3.06",
        "code": "v2:...",
        "source": "Izprati.bg"
      }
    ],
    "metafields": [
      {
        "namespace": "octavawms",
        "key": "options_id",
        "type": "single_line_text_field",
        "value": "v2:..."
      }
    ]
  }
}

The order is created, but the carrier app does not treat it as a pickup office delivery. It creates the label as an address delivery instead.

Question:
Does Shopify REST Admin API actually preserve shipping_lines[].source when creating an order via POST /orders.json?

If not, is there any supported way to create/copy an order while preserving the original carrier/app shipping line source and code?

Or is shipping_lines.source read-only / app-generated only?

Any experience with duplicating orders that use carrier service pickup points would be appreciated.

You should look to move to GraphQL as the REST API is now deprecated.

Hi @bossorange

source is a returned field; neither REST POST /orders.json nor GraphQL orderCreate lets you set it in a way that recreates the original carrier association. Many carrier/pickup-point apps store the pickup point info in:

  • order metafields (namespace/key)
  • line item properties
  • order note attributes (note_attributes)
  • tags

One solution would be to ask the carrier Izprati.bg to support a “manual / API-created pickup order” path, or see if they offer an external API where you can:

  • send the pickup point code (v2:...),
  • order number,
  • address/contact,
  • and let their backend create the shipment and store its reference as an order metafield back into Shopify.