Walmart Get Returns
Summary of Changes: (The purpose of this table is to keep traceability and Product team to highlight the things that were changed into the scope, based on comments or discussions)
Version | Date | Created / Updated | Notes |
---|---|---|---|
v1.0 | 15/05/2024 | Hristiyan | First publish |
The purpose of this page is to describe how we handle customer initiated returns from Walmart into Hemi.
API Docs : https://developer.walmart.com/api/us/mp/returns#operation/getReturns API Call : GET https://marketplace.walmartapis.com/v3/returns
Everytime the cron runs we want to store a record in the last_date_run
table and then use the parameter returnCreationStartDate
to get only new returns as we might end up getting big payloads if we don’t include this parameter. The returnCreationStartDate
format is based on UTC, ISO 8601. Date example: '2013-08-16' Timestamp example: '2013-08-16T10:30:15Z’. We want to use the timestamp
We want to store every return request as a record in the Order Claim
table. All returns are “approved” when they are within the specified return window so they will be just pending the sending of the refund. All returns outside the specified window can only be requested via customer service in which case we will not have a return request.
All validations,triggers etc are as per the Claims abstraction found here
There is a specific call for issuing the refund for the return which is explained in Walmart Order Refund page (check tag v1.1).
Sample response :
{
"meta": {
"totalCount": 40,
"limit": 10,
"nextCursor": "?sellerId=151&limit=10&offset=10"
},
"returnOrders": [
{
"returnOrderId": "103738048909818825",
"customerEmailId": "emailID123456@relay.walmart.com",
"customerName": {
"firstName": "Jane",
"lastName": "Doe"
},
"customerOrderId": "1234567891234",
"refundMode": "POST_DELIVERY",
"returnOrderDate": "2019-02-21T01:01:08.000Z",
"returnType": "REPLACEMENT",
"replacementCustomerOrderId": "1234567891234",
"returnByDate": "2019-03-23T01:01:06.000Z",
"totalRefundAmount": {
"currencyAmount": 127.45,
"currencyUnit": "USD"
},
"returnLineGroups": [
{
"groupNo": 1,
"returnLines": [
{
"returnOrderLineNumber": 1
}
],
"labels": [
{
"labelImageURL": "https://i5.walmartimages.com/asr/0a0c7462-7a85-4d3d-b7cf-91738b6883d4_1.c2c4f7b05e1cfe67910134779aa7c571.png",
"carrierInfoList": [
{
"carrierId": "11",
"carrierName": "FEDEX",
"serviceType": "FedEx Ground",
"trackingNo": "785611449666"
}
]
}
],
"returnExpectedFlag": true
}
],
"returnOrderLines": [
{
"returnOrderLineNumber": 1,
"salesOrderLineNumber": 1,
"returnReason": "ARRIVED_LATE",
"purchaseOrderId": "4790210558890",
"sellerOrderId": "123",
"purchaseOrderLineNumber": 1,
"isReturnForException": true,
"exceptionItemType": "HAZMAT/OTHER/FREIGHT",
"rechargeReason": "Recharge Reason",
"returnCancellationReason": "Cancellation Reason",
"item": {
"sku": "ANTL_GDL-0700",
"condition": "Pre-Owned: Like New",
"productName": "Antlion Audio ModMic Wireless Attachable Boom Microphone",
"itemWeight": {
"unitOfMeasure": "POUND",
"measurementValue": 5
}
},
"charges": [
{
"chargeCategory": "PRODUCT",
"chargeName": "ItemPrice",
"chargePerUnit": {
"currencyAmount": 119.95,
"currencyUnit": "USD"
},
"isDiscount": false,
"isBillable": true,
"tax": [
{
"taxName": "Tax1",
"excessTax": {
"currencyAmount": 0,
"currencyUnit": "USD"
},
"taxPerUnit": {
"currencyAmount": 7.5,
"currencyUnit": "USD"
}
}
],
"excessCharge": {
"currencyAmount": 0,
"currencyUnit": "USD"
},
"references": [
{
"name": "isAdjustment",
"value": "false"
}
]
}
],
"unitPrice": {
"currencyAmount": 119.95,
"currencyUnit": "USD"
},
"chargeTotals": [
{
"name": "lineUnitPrice",
"value": {
"currencyAmount": 119.95,
"currencyUnit": "USD"
}
},
{
"name": "lineProductTaxes",
"value": {
"currencyAmount": 7.5,
"currencyUnit": "USD"
}
},
{
"name": "lineTotalTaxes",
"value": {
"currencyAmount": 7.5,
"currencyUnit": "USD"
}
},
{
"name": "lineSubTotal",
"value": {
"currencyAmount": 119.95,
"currencyUnit": "USD"
}
},
{
"name": "lineTotal",
"value": {
"currencyAmount": 127.45,
"currencyUnit": "USD"
}
}
],
"currentDeliveryStatus": "NOT_SHIPPED",
"currentRefundStatus": "REFUND_INITIATED",
"currentTrackingStatuses": [
{
"status": "COMPLETED",
"statusTime": "2023-06-22T02:20:51.000Z",
"currentRefundStatus": "REFUND_INITIATED",
"quantity": {
"unitOfMeasure": "EACH",
"measurementValue": 2
}
},
{
"status": "COMPLETED",
"statusTime": "2023-06-22T02:20:51.000Z",
"currentRefundStatus": "REFUND_COMPLETED",
"quantity": {
"unitOfMeasure": "EACH",
"measurementValue": 1
}
}
],
"refundChannels": [
{
"refundChannelName": "SELLER_MANUAL_REFUND",
"quantity": {
"measurementValue": 2
}
},
{
"refundChannelName": "InstantRefund",
"quantity": {
"measurementValue": 1
}
}
],
"cancellableQty": 0,
"quantity": {
"unitOfMeasure": "EACH",
"measurementValue": 3
},
"returnExpectedFlag": true,
"isFastReplacement": false,
"isKeepIt": false,
"lastItem": false,
"refundedQty": 1,
"rechargeableQty": 0,
"refundChannel": "SELLER_AUTO_REFUND",
"returnTrackingDetail": [
{
"sequenceNo": 1,
"eventTag": "RETURN_IN_TRANSIT",
"eventDescription": "A MARKET_PLACE Return in Transit",
"eventTime": "2019-02-23T00:46:11.000Z",
"references": [
{
"name": "ReturnDate",
"value": "2019-02-21T01:01:08.000Z"
},
{
"name": "SLA for Receiving Items",
"value": "7 Days"
}
]
},
{
"sequenceNo": 0,
"eventTag": "RETURN_INITIATED",
"eventDescription": "Return initiated for MARKET_PLACE",
"eventTime": "2019-02-21T01:01:08.000Z",
"references": [
{
"name": "ReturnDate",
"value": "2019-02-21T01:01:08.000Z"
},
{
"name": "FedexTrackingLink",
"value": "https://www.fedex.com/apps/fedextrack/?tracknumbers=785611449666"
}
]
}
],
"status": "COMPLETED",
"statusTime": "2019-03-02T05:45:45.000Z"
}
],
"returnChannel": {
"channelName": "IN_STORE"
}
}
]
}
Response mapping :
Walmart Field | Hemi Mapping | Notes | |||||
---|---|---|---|---|---|---|---|
meta |
|||||||
totalCount |
N/A | ||||||
limit |
N/A | ||||||
nextCursor |
N/A | ||||||
returnOrders |
N/A | ||||||
returnOrderId |
Order Claim > Marketplace ID |
||||||
customerEmailId |
N/A | ||||||
customerName |
N/A | ||||||
firstName |
Order Claim Shipping Info > Name |
We want to store the firstName and lastName in the same field in Hemi separated by interval. If we have more than two names we store them all and separate by interval. | |||||
lastName |
Order Claim Shipping Info > Name |
We want to store the firstName and lastName in the same field in Hemi by interval.If we have more than two names we store them all and separate by interval. | |||||
customerOrderId |
N/A | ||||||
refundMode |
N/A | ||||||
returnOrderDate |
Order Claim > Marketplace Date |
It will be in format 2019-02-21T01:01:08.000Z we need to store it in Hemi friendly format - Unix |
|||||
returnType |
Order Claim > Marketplace Type |
||||||
replacementCustomerOrderId |
N/A | ||||||
returnByDate |
N/A | ||||||
totalRefundAmount |
N/A | ||||||
currencyAmount |
N/A | ||||||
currencyUnit |
N/A | ||||||
returnLineGroups |
N/A | ||||||
groupNo |
N/A | ||||||
returnLines |
N/A | ||||||
returnOrderLineNumber |
N/A | ||||||
labels |
N/A | ||||||
labelImageURL |
N/A | ||||||
carrierInfoList |
N/A | ||||||
carrierId |
N/A | ||||||
carrierName |
Order Claim Shipping Info > Courier |
||||||
serviceType |
|||||||
trackingNo |
Order Claim Shipping Info > Tracking Number |
||||||
returnExpectedFlag |
N/A | ||||||
returnOrderLines |
N/A | ||||||
returnOrderLineNumber |
N/A | ||||||
salesOrderLineNumber |
N/A | ||||||
returnReason |
Order Claim > Marketplace Reason |
||||||
purchaseOrderId |
N/A | This is the marketplace order ID. We need to map it with Orders > Marketplace Order ID so we can identify which order is being returned. |
|||||
sellerOrderId |
N/A | ||||||
purchaseOrderLineNumber |
We need to map this the order line number which we have stored in Products On Order > Item Order Line ID for the relevant order (as mapped from above) so we can identify which line is being returned. Once identified, we need to create a record in Order Claim Row for the returned product. |
||||||
isReturnForException |
N/A | ||||||
exceptionItemType |
N/A | ||||||
rechargeReason |
N/A | ||||||
returnCancellationReason |
N/A | ||||||
item |
N/A | ||||||
sku |
N/A | ||||||
condition |
N/A | ||||||
productName |
N/A | ||||||
itemWeight |
N/A | ||||||
unitOfMeasure |
N/A | ||||||
measurementValue |
N/A | ||||||
charges |
N/A | ||||||
chargeCategory |
N/A | ||||||
chargeName |
N/A | ||||||
chargePerUnit |
N/A | ||||||
currencyAmount |
N/A | ||||||
currencyUnit |
N/A | ||||||
isDiscount |
N/A | ||||||
isBillable |
N/A | ||||||
tax |
N/A | ||||||
taxName |
N/A | ||||||
excessTax |
N/A | ||||||
currencyAmount |
N/A | ||||||
currencyUnit |
N/A | ||||||
taxPerUnit |
N/A | ||||||
currencyAmount |
N/A | ||||||
currencyUnit |
N/A | ||||||
excessCharge |
N/A | ||||||
currencyAmount |
N/A | ||||||
currencyUnit |
N/A | ||||||
references |
N/A | ||||||
name |
N/A | ||||||
value |
N/A | ||||||
unitPrice |
N/A | ||||||
currencyAmount |
N/A | ||||||
currencyUnit |
N/A | ||||||
chargeTotals |
N/A | ||||||
name |
N/A | ||||||
value |
N/A | ||||||
currencyAmount |
N/A | ||||||
currencyUnit |
N/A | ||||||
currentDeliveryStatus |
N/A | ||||||
currentRefundStatus |
N/A | ||||||
currentTrackingStatuses |
N/A | ||||||
status |
N/A | ||||||
statusTime |
N/A | ||||||
currentRefundStatus |
N/A | ||||||
quantity |
N/A | ||||||
unitOfMeasure |
N/A | ||||||
measurementValue |
N/A | ||||||
refundChannels |
N/A | ||||||
refundChannelName |
N/A | ||||||
quantity |
N/A | ||||||
measurementValue |
N/A | ||||||
cancellableQty |
N/A | ||||||
quantity |
N/A | ||||||
unitOfMeasure |
N/A | ||||||
measurementValue |
N/A | ||||||
returnExpectedFlag |
N/A | ||||||
isFastReplacement |
N/A | ||||||
isKeepIt |
N/A | ||||||
lastItem |
N/A | ||||||
refundedQty |
N/A | ||||||
rechargeableQty |
N/A | ||||||
refundChannel |
N/A | ||||||
returnTrackingDetail |
N/A | ||||||
sequenceNo |
N/A | ||||||
eventTag |
N/A | ||||||
eventDescription |
N/A | ||||||
eventTime |
N/A | ||||||
references |
N/A | ||||||
name |
N/A | ||||||
value |
N/A | ||||||
status |
N/A | ||||||
statusTime |
N/A | ||||||
returnChannel |
N/A | ||||||
channelName |
N/A |