---
title: Return feed setup - Custom platform
description: Setup return feed for Fit Advisor to integrate with your custom e-comm platform using SFTP
---

[Skip to content](https://help.getwair.com/return-feed-setup-custom-platform#main-content)

English

Show submenu for translations

[Contact us](https://help.getwair.com/kb-tickets/new?hsLang=en)

![wair-logo-white.png\]](https://help.getwair.com/hs-fs/hubfs/wair-logo-white.png?height=40&name=wair-logo-white.png)

Open main navigation

Close main navigation

- English
  
  Show submenu for translations
- [Contact us](https://help.getwair.com/kb-tickets/new)
- WAIR Website

 WAIR Website

 Hello. How can we help you?

- There are no suggestions because the search field is empty.

1. [Knowledge base](https://help.getwair.com/?hsLang=en)
2. [Getting Started for Admin](https://help.getwair.com/getting-started-for-admin?hsLang=en)
3. [Custom](https://help.getwair.com/getting-started-for-admin?hsLang=en#custom)

# Return feed setup - Custom platform

## Setup return feed for Fit Advisor to integrate with your custom e-comm platform using SFTP

### Before you begin

If you are using a 3rd party e-comm platform (Shopify, BigCommerce, etc) then please refers to those docs for setting up your return feed.

**Requirements**

- Return feed in either JSON (ndjson) or CSV file format
- Ability to push files (daily) over SFTP

### SFTP Transfer

- Transfer is expected to be pushed daily with full set of returns (does not need to be a diff of changes).
- We will need a public key and IPs to whitelist

### Return feed file formats

Both JSON and CSV file formats are accepted formats to push return feed to Fit Advisor platform. Typically this will depend on how returns are stored in your platform or what available formats are already being exported. The benefit to JSON is that return data can remain structured and does not need to be flattened (denormalized) into variants resulting in a larger amount of data to sync.

**Using JSON (preferred)**

- Important to note that the expected file format is ndjson where each file line is a json object.

Return format

| **id** string | "id":"1234541223232" Unique identifier for the return for API/backend purposes. |
| --- | --- |
| **returnCreatedAt** string | "returnCreatedAt":"2012-02-15T15:12:21-05:00" Return created timestamp in ISO 8601 format |
| **returnUpdatedAt** string | "returnUpdatedAt":"2012-02-15T15:12:21-05:00" Return updated timestamp in ISO 8601 format |
| **total** number | "total":85.30 Total price of items being processed for return or exchange |
| **currency** string | "currency":"USD" 3-digit currency code (ISO 4217) |
| **orderId** string | "orderId":"123124121212" Unique identifier for the order being returned. This may be different than the orderId created during the purchase if the return platform is separate from the ecomm platform. |
| **orderName** String (optional) | "orderName":"Order 1234" Human-friendly name for order being returned |
| **providerOrderId** string | "providerOrderId":"14124124124124" Matching identifier used in orderId when order was created |
| **orderNumber** string | "orderNumber":"14232" Matching value using in orderNumber when order was created |
| **returnProductTotal** number | "returnProductTotal":45.50 Total price of items being returned (but not exchanged) |
| **exchangeProductTotal** number | "exchangeProductTotal":10.50 Total price of items being exchanged (but not returned) |
| **refund** number | "refund":5.00 Total amount refunded to shopper including (returned items and/or exchanged for lesser value item) |

 

Return line item format

| **lineItemId** string | "lineItemId":"1234541223232" Unique identifier for the line item being returned. This may be different than the lineItemId created during the purchase if the return platform is separate from the ecomm platform. |
| --- | --- |
| **providerLineItemId** number | "providerLineItemId":"4444514242332" Unique identifier for line item that matches lineItemId when order was created |
| **productId** string | "productId":"1124124214124" Matching identifier from product feed for productId |
| **variantId** string | "variantId":"1515252524223" Matching identifier from product feed for variantId |
| **sku** string | "sku":"SHR-L-30-BLK" Matching SKU from product feed |
| **title** string | "title":"Men's Shirt" Title or name of product being processed |
| **price** number | "price":56.00 Subtotal of product being processed |
| **quantity** number | "quantity":3 Number of variant returned |
| **returnedAt** string | "returnedAt":"2012-02-15T15:12:21-05:00" Return completed timestamp in ISO 8601 format. |
| **exchangeVariant** string (optional) | "exchangeVariant":"515224223232" If exchanged, include variantId. Typical when returning for alternate size or color. |
| **returnReason** string | "returnReason":"Return reason" Selected reason for return |
| **parentReturnReason** string | "parentReturnReason":"Parent return reason" Parent return reason for a category of return reasons. I.e. Fit |

#### Using CSV

- Flat files (denormalized) in csv format using data format below.
- Each row represents a variant. I.e. a return with 10 variants would be represented as 10 rows with returnId repeated in each row.

Return format (return line item variant per row):

| **returnId** string | returnId":"1234541223232" Unique identifier for the return for API/backend purposes. |
| --- | --- |
| **returnCreatedAt** string | "returnCreatedAt":"2012-02-15T15:12:21-05:00" Return created timestamp in ISO 8601 format |
| **returnUpdatedAt** string | "returnUpdatedAt":"2012-02-15T15:12:21-05:00" Return updated timestamp in ISO 8601 format |
| **total** number | "total":85.30 Total price of items being processed for return or exchange |
| **currency** string | "currency":"USD" 3-digit currency code (ISO 4217) |
| **quantity** number | "quantity":3 Number of variant returned |
| **orderId** string | "orderId":"123124121212" Unique identifier for the order being returned. This may be different than the orderId created during the purchase if the return platform is separate from the ecomm platform. |
| **orderName** String (optional) | "orderName":"Order 1234" Human-friendly name for order being returned |
| **providerOrderId** string | "providerOrderId":"14124124124124" Matching identifier used in orderId when order was created |
| **providerOrderNumber** string | "providerOrderNumber":"14232" Matching value using in orderNumber when order was created |
| **returnProductTotal** number | "returnProductTotal":45.50 Total price of items being returned (but not exchanged) |
| **exchangeProductTotal** number | "exchangeProductTotal":10.50 Total price of items being exchanged (but not returned) |
| **refund** number | "refund":5.00 Total amount refunded to shopper including (returned items and/or exchanged for lesser value item) |
| **lineItemId** string | "lineItemId":"1234541223232" Unique identifier for the line item being returned. This may be different than the lineItemId created during the purchase if the return platform is separate from the ecomm platform. |
| **providerLineItemId** number | "providerLineItemId":"4444514242332" Unique identifier for line item that matches lineItemId when order was created |
| **lineItemProductId** string | "lineItemProductId":"1124124214124" Matching identifier from product feed for productId |
| **lineItemVariantId** string | "lineItemVariantId":"1515252524223" Matching identifier from product feed for variantId |
| **lineItemSku** string | "lineItemSku":"SHR-L-30-BLK" Matching SKU from product feed |
| **lineItemTitle** string | "lineItemTitle":"Men's Shirt" Title or name of product being processed |
| **lineItemPrice** number | "lineItemPrice":56.00 Subtotal of product being processed |
| **lineItemReturnedAt** string | "lineItemReturnedAt":"2012-02-15T15:12:21-05:00" Return completed timestamp in ISO 8601 format. |
| **lineItemExchangeVariant** string (optional) | "lineItemExchangeVariant":"515224223232" If exchanged, include variantId. Typical when returning for alternate size or color. |
| **lineItemReturnReason** string | "lineItemReturnReason":"Return reason" Selected reason for return |
| **lineItemParentReturnReason** string | "lineItemParentReturnReason":"Parent return reason" Parent return reason for a category of return reasons. I.e. Fit |

- [Getting Started for Admin](https://help.getwair.com/getting-started-for-admin?hsLang=en#main-content)

    - [Headless](https://help.getwair.com/getting-started-for-admin?hsLang=en#headless)
    - [Shopify](https://help.getwair.com/getting-started-for-admin?hsLang=en#shopify)
    - [BigCommerce](https://help.getwair.com/getting-started-for-admin?hsLang=en#bigcommerce)
    - [Custom](https://help.getwair.com/getting-started-for-admin?hsLang=en#custom)
    - [Magento](https://help.getwair.com/getting-started-for-admin?hsLang=en#magento)
- [Customizations](https://help.getwair.com/customizations?hsLang=en)
- [Troubleshooting](https://help.getwair.com/troubleshooting?hsLang=en)
- [Support Articles and FAQs](https://help.getwair.com/support-articles-and-faqs?hsLang=en)
- [Integrations](https://help.getwair.com/integrations?hsLang=en#main-content)

    - [Klaviyo](https://help.getwair.com/integrations?hsLang=en#klaviyo)
- [Legal](https://help.getwair.com/legal?hsLang=en)
- [Sales Enablement](https://help.getwair.com/sales-enablement?hsLang=en)

[![Chill listening crop-3](https://help.getwair.com/hs-fs/hubfs/favicon-black-1.png?width=24&height=24&name=favicon-black-1.png "Chill listening crop-3")](http://getwair.com)

WAIR Knowledge base

Copyright © 2026, WAIR