Look Up Order Return Eligibility by Order Name
curl --request POST \
--url https://api.loopreturns.com/api/v1/orders/return-eligibility \
--header 'Content-Type: application/json' \
--header 'X-Authorization: <api-key>' \
--data '
{
"order_name": "#1001"
}
'import requests
url = "https://api.loopreturns.com/api/v1/orders/return-eligibility"
payload = { "order_name": "#1001" }
headers = {
"X-Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Authorization': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({order_name: '#1001'})
};
fetch('https://api.loopreturns.com/api/v1/orders/return-eligibility', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.loopreturns.com/api/v1/orders/return-eligibility",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'order_name' => '#1001'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.loopreturns.com/api/v1/orders/return-eligibility"
payload := strings.NewReader("{\n \"order_name\": \"#1001\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.loopreturns.com/api/v1/orders/return-eligibility")
.header("X-Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"order_name\": \"#1001\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.loopreturns.com/api/v1/orders/return-eligibility")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"order_name\": \"#1001\"\n}"
response = http.request(request)
puts response.read_body{
"return_eligibility": {
"order_id": 390519090,
"as_of": "2026-09-30T16:00:00Z",
"advisory": true,
"items": [
{
"id": 390519093,
"external_id": "44580305076398",
"eligible": true,
"expiration": "2026-10-23",
"ineligibility_code": null,
"return_reason_group_id": 12
},
{
"id": 390519094,
"external_id": "44580305076399",
"eligible": false,
"expiration": "2026-09-15",
"ineligibility_code": "return-window-closed",
"return_reason_group_id": null
},
{
"id": 390519095,
"external_id": null,
"eligible": false,
"expiration": null,
"ineligibility_code": "final-sale",
"return_reason_group_id": null
}
]
}
}{
"errors": "Unauthorized."
}{
"message": "Resource not found."
}{
"errors": [
{
"code": "order-has-been-cancelled",
"message": "The order has been cancelled."
}
]
}{
"errors": [
{
"code": "returns-unavailable-for-order",
"message": "Returns are unavailable for this order."
}
]
}Order Return Eligibility
Look Up Order Return Eligibility by Order Name
Report per-line-item return eligibility for an order, by its order name, without starting a return. Available to Shopify and Commerce Data merchants.
The result is advisory. It is evaluated from Loop’s order snapshot without creating a draft return,
so a draft return created afterwards stays authoritative and may disagree. Do not hard-disable UI solely
because an item reports eligible: false; let the draft return decide.
It does not create a draft return. For Shopify merchants, it may import or refresh Loop’s copy of the order from Shopify.
Joining with the Orders API
When the order is in Commerce Data, identifiers match Get Order and List Orders:
order_idis the order’s global identifier, the same value as the order’sid.- Each item’s
idis the line item’s global identifier, the same value asline_items[].id. - Each item’s
external_idis the commerce platform’s line item id, the same value asline_items[].external_id. It isnullwhen the line item has none.
Join items to the order’s line_items on id.
POST
/
orders
/
return-eligibility
Look Up Order Return Eligibility by Order Name
curl --request POST \
--url https://api.loopreturns.com/api/v1/orders/return-eligibility \
--header 'Content-Type: application/json' \
--header 'X-Authorization: <api-key>' \
--data '
{
"order_name": "#1001"
}
'import requests
url = "https://api.loopreturns.com/api/v1/orders/return-eligibility"
payload = { "order_name": "#1001" }
headers = {
"X-Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Authorization': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({order_name: '#1001'})
};
fetch('https://api.loopreturns.com/api/v1/orders/return-eligibility', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.loopreturns.com/api/v1/orders/return-eligibility",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'order_name' => '#1001'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.loopreturns.com/api/v1/orders/return-eligibility"
payload := strings.NewReader("{\n \"order_name\": \"#1001\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.loopreturns.com/api/v1/orders/return-eligibility")
.header("X-Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"order_name\": \"#1001\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.loopreturns.com/api/v1/orders/return-eligibility")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"order_name\": \"#1001\"\n}"
response = http.request(request)
puts response.read_body{
"return_eligibility": {
"order_id": 390519090,
"as_of": "2026-09-30T16:00:00Z",
"advisory": true,
"items": [
{
"id": 390519093,
"external_id": "44580305076398",
"eligible": true,
"expiration": "2026-10-23",
"ineligibility_code": null,
"return_reason_group_id": 12
},
{
"id": 390519094,
"external_id": "44580305076399",
"eligible": false,
"expiration": "2026-09-15",
"ineligibility_code": "return-window-closed",
"return_reason_group_id": null
},
{
"id": 390519095,
"external_id": null,
"eligible": false,
"expiration": null,
"ineligibility_code": "final-sale",
"return_reason_group_id": null
}
]
}
}{
"errors": "Unauthorized."
}{
"message": "Resource not found."
}{
"errors": [
{
"code": "order-has-been-cancelled",
"message": "The order has been cancelled."
}
]
}{
"errors": [
{
"code": "returns-unavailable-for-order",
"message": "Returns are unavailable for this order."
}
]
}