Skip to main content

Split Return Shipments (Returns V2)

G
Written by Guido Kaspers
Updated over 3 weeks ago

The Split Return Shipments feature lets you return items from a single order to multiple destinations. This is useful if items are shipped from different warehouses or regions.


Key Benefits

  • Multiple Return Addresses: Items can be returned to different locations depending on rules.

  • Accurate Fulfilment: Ensures returned items go to the right warehouse for processing.


Setting Up Split Shipments

1. Enable Split Shipments

  1. Go to Returns → Shipping → Settings for a carrier.

  2. Toggle Split Shipments to enabled.

  3. Add additional return addresses if needed.

Note: Always set a default return address in case a specific destination cannot be determined.

2. Configure Return Destinations

Return destinations define where items are sent back to during a return.

There are two types of destinations:

  • Custom Return Addresses

    Add any custom warehouse or partner locations manually under Returns → Shipping → Destinations.

    These addresses appear in the Return Addresses table and can be edited or removed at any time.

  • Shopify Fulfilment Locations (for Routing Rules)

    Shopify fulfilment locations do not appear in the Return Addresses table.

    However, they are automatically available when creating Routing Rules.

    This allows you to route items directly back to their original fulfilment location without manually adding the address here.

3. Define Routing Rules

Routing Rules determine where items are sent based on specific conditions.

Navigate to Destinations → Define Routing Rules.

Rules can contain multiple conditions. When multiple conditions are added to a rule, they are evaluated using AND logic, meaning all conditions must match for the rule to apply.

You can assign products or orders to destinations using one or more of the following conditions:

Available Condition Types

Product Vendor

Route items based on the product’s vendor.

  • Each vendor condition can contain only one vendor.

  • Vendor-based routing is useful when products from different suppliers must be returned to different warehouses.

Product Tags

Route items based on product tags.

  • Multiple tags can be used in a rule.

  • Useful for grouping products across collections or categories.

Fulfilment Location

Route items based on the original Shopify fulfilment location.

  • This allows returns to go back to the warehouse that fulfilled the order.

  • Works independently or in combination with other conditions.

Orders Originating from Specific Countries

Route items based on the customer’s country.

  • Countries are selected using the country selector.

  • This condition uses the customer’s shipping country.

  • Can be combined with other conditions for more specific routing.

Example:

  • Orders fulfilled from Warehouse A → return to Warehouse A

  • Orders fulfilled from Warehouse A AND customer country is US → return to Warehouse B

Rule Evaluation & Priority

When multiple routing rules could apply to the same item, the system determines which rule to use based on the following order:

1. Specificity First

Rules with more conditions take priority over rules with fewer conditions.

A rule with two conditions (for example, Vendor AND Country) overrides a rule with one condition.

This ensures that more specific routing logic always wins.

2. Condition Type Priority

If two rules contain the same number of conditions, condition types are evaluated in the following order:

Vendor > Tag > Fulfilment Location > Country

Examples:

  • A rule with one Vendor condition overrides a rule with one Tag condition.

  • A rule with one Tag condition overrides a rule with one Fulfilment Location condition.

3. Creation Time

If rules are equally specific and contain the same condition types, the rule created first is applied.

4. Customer Portal Flow

  • Labels for each shipment are generated automatically.

  • Optional shipping fees can apply per shipment.

5. Managing RMAs in Dashboard

  • Each RMA splits into packages per destination.

  • View shipment details, labels, and item assignments for each package.


Instant Exchanges

Instant Exchanges fully support split shipments. When a return contains multiple shipments, each shipment is processed independently. This ensures correct payment handling and prevents issues when different shipments arrive at different times.

How it works

  • Swap monitors each shipment separately.

  • When a shipment meets the Instant Exchange conditions (for example, in transit or delivered in time), only the value of the items in that shipment is deducted from the total payment hold.

  • Other shipments remain unchanged until they meet the conditions.

  • Once all shipments have arrived, the payment hold is released fully.

Payment adjustments

  • Returned items trigger payment updates only for the items in their shipment.

  • The hold amount and payment amount always remain aligned.

  • The UI and Stripe both update instantly.

  • A log entry is added for each update, for example:

Shipment 2 is delivered. £40 removed from the total hold amount.

Charge Check Loop for Split Shipments

The charge check loop ensures Instant Exchange calculations stay accurate when shipments arrive at different times.

Monitoring shipment status

Each shipment in the RMA is continuously checked for its status (created, labelled, in transit, delivered).

Hold and payment updates

When one shipment qualifies:

  • The value of that shipment’s items is removed from the hold amount and the pending payment.

  • If the hold amount equals the full return value, both the hold and payment decrease together so they are always equal.

  • If the hold equals 1, only the payment amount changes.

  • The system does not run calculations after the hold has already been released.

Logs

Every update adds a log to the RMA indicating:

  • Which shipment changed

  • Its status

  • How much was deducted

  • The updated hold amount

Reminder emails

Reminder emails are still sent if at least one shipment has not met the conditions.

If all shipments meet the conditions, reminder emails are cancelled.

The email amounts always reflect the latest payment calculation.


Customer emails for split shipments

Swap automatically sends customer emails that include all shipments in a return.

When a return contains multiple shipments, the email displays each shipment separately, including:

  • Carrier

  • Tracking number

  • Label download

  • Items in that shipment

  • Drop-off and tracking links

Return Delivered email behaviour

The Return Delivered email is sent automatically only if all return labels are created successfully.

If one or more labels fail to generate, the email is not sent automatically from the portal.

You can still send the email manually from the RMA:

  • Regenerate the labels inside the RMA and resend the email

  • Or choose to send the email manually, even if not all labels were generated

Example email with multiple shipments


Klaviyo Events & Webhooks

Swap sends complete shipment information to Klaviyo and to all webhook endpoints when split shipments occur. Each shipment is provided separately inside an array.

What webhooks include

Each webhook includes an array of shipments. Every shipment object contains:

  • shipment_id

  • order information

  • carrier information

  • items included in that shipment

  • barcode per item

  • tracking link

  • return deep link

  • shipping address

  • RMA number

This ensures third-party systems (for example, Gorgias and RLM) receive complete data for every shipment without needing to reconstruct packages themselves.

Versioning

  • Existing webhook versions continue to work.

  • A new version (v2) supports split shipment arrays.

  • Merchants can choose the version when creating a webhook.

  • Fully backwards compatible.

  • Works whether the RMA has one or multiple shipments.

RMA API Structure for Split Shipments

The RMA API also includes shipments as an array.

Structure (simplified)

{
"rma_id": "rma_123",
"rma_number": "RMA-1001",
"status": "approved",
"shipments": [
{
"shipment_id": "shp_1",
"order": {
"...": "order fields"
},
"carrier": {
"...": "carrier fields"
},
"items": [
{
"rma_item_id": "rma_item_1",
"order_line_id": "12345",
"sku": "TSHIRT-BLACK-S",
"quantity": 1,
"barcode": "0123456789"
}
]
},
{
"shipment_id": "shp_2",
"order": {
"...": "order fields"
},
"carrier": {
"...": "carrier fields"
},
"items": [
{
"rma_item_id": "rma_item_2",
"order_line_id": "12346",
"sku": "HOODIE-GREY-M",
"quantity": 1,
"barcode": "9876543210"
}
]
}
],
"created_at": "2025-11-01T10:00:00Z",
"updated_at": "2025-11-02T12:00:00Z"
}

Field names in this example are illustrative. Always refer to the RMA API reference for the exact schema.


Best Practices

  • Always set a default return address for every carrier.

  • Verify that all destinations are within carrier coverage.

  • Configure routing rules carefully to match your workflow.

Did this answer your question?