curl --request POST \
--url https://api.returnshelper.com/uat/user/api/Label/CancelLabel \
--header 'Content-Type: application/json' \
--header 'x-rr-apikey: <api-key>' \
--header 'x-rr-apitoken: <api-key>' \
--data '{
"labelId": 123
}'import requests
url = "https://api.returnshelper.com/uat/user/api/Label/CancelLabel"
payload = { "labelId": 123 }
headers = {
"x-rr-apikey": "<api-key>",
"x-rr-apitoken": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-rr-apikey': '<api-key>',
'x-rr-apitoken': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({labelId: 123})
};
fetch('https://api.returnshelper.com/uat/user/api/Label/CancelLabel', 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.returnshelper.com/uat/user/api/Label/CancelLabel",
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([
'labelId' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-rr-apikey: <api-key>",
"x-rr-apitoken: <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.returnshelper.com/uat/user/api/Label/CancelLabel"
payload := strings.NewReader("{\n \"labelId\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-rr-apikey", "<api-key>")
req.Header.Add("x-rr-apitoken", "<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.returnshelper.com/uat/user/api/Label/CancelLabel")
.header("x-rr-apikey", "<api-key>")
.header("x-rr-apitoken", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"labelId\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.returnshelper.com/uat/user/api/Label/CancelLabel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-rr-apikey"] = '<api-key>'
request["x-rr-apitoken"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"labelId\": 123\n}"
response = http.request(request)
puts response.read_body{
"correlationId": "<string>",
"meta": {
"status": 123,
"data": {},
"errorCode": "<string>",
"error": {}
}
}{
"correlationId": "<string>",
"meta": {
"status": 123,
"data": {},
"errorCode": "<string>",
"error": {}
}
}取消退货面单
curl --request POST \
--url https://api.returnshelper.com/uat/user/api/Label/CancelLabel \
--header 'Content-Type: application/json' \
--header 'x-rr-apikey: <api-key>' \
--header 'x-rr-apitoken: <api-key>' \
--data '{
"labelId": 123
}'import requests
url = "https://api.returnshelper.com/uat/user/api/Label/CancelLabel"
payload = { "labelId": 123 }
headers = {
"x-rr-apikey": "<api-key>",
"x-rr-apitoken": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-rr-apikey': '<api-key>',
'x-rr-apitoken': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({labelId: 123})
};
fetch('https://api.returnshelper.com/uat/user/api/Label/CancelLabel', 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.returnshelper.com/uat/user/api/Label/CancelLabel",
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([
'labelId' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-rr-apikey: <api-key>",
"x-rr-apitoken: <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.returnshelper.com/uat/user/api/Label/CancelLabel"
payload := strings.NewReader("{\n \"labelId\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-rr-apikey", "<api-key>")
req.Header.Add("x-rr-apitoken", "<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.returnshelper.com/uat/user/api/Label/CancelLabel")
.header("x-rr-apikey", "<api-key>")
.header("x-rr-apitoken", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"labelId\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.returnshelper.com/uat/user/api/Label/CancelLabel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-rr-apikey"] = '<api-key>'
request["x-rr-apitoken"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"labelId\": 123\n}"
response = http.request(request)
puts response.read_body{
"correlationId": "<string>",
"meta": {
"status": 123,
"data": {},
"errorCode": "<string>",
"error": {}
}
}{
"correlationId": "<string>",
"meta": {
"status": 123,
"data": {},
"errorCode": "<string>",
"error": {}
}
}labelGenerated webhook 中的 labelId。
可取消面单的条件
必须同时满足以下所有条件。任一条件不满足时,调用会返回验证软错误——HTTP 200,meta.status: 400,meta.errorCode: VALIDATION_FAILED——错误信息位于 meta.error.labelId。详见错误代码。
| 条件 | 不满足时的 meta.error.labelId |
|---|---|
| 面单属于您的账户 | Label:{labelId} not found |
面单已生成(labelRequestStatusCode 为 success) | Cancel label only when label status is success |
当前时间早于面单的 cancelCutoffTime | The cancellation cutoff Time {cancelCutoffTime} has already passed. |
| 仓库尚未收到包裹 | Cancel label only when shipment status is lb-printed |
cancelCutoffTime 会随 labelGenerated webhook 中的面单一并推送,也会由获取 Return Shipment 详情返回。
取消成功后
获取 Return Shipment 详情会返回:| 字段 | 值 |
|---|---|
returnStatusCode | label-canceled |
shipments[].shipmentStatusCode | lb-canceled |
shipments[].labelId | 0 |
shipments[].label | null |
labelId。
修正运货单
已取消的 Return Request 无法再获取新面单。如需修正运货单,请先取消面单,再以修正后的资料重新调用创建 Return Shipment。新的调用会返回新的returnRequestId、shipmentId 与 labelId。已取消的 Return Request 会保持 label-canceled。
幂等性
x-returnhelper-idempotency-key 请求头为选填。不带该请求头的调用会正常执行,但不具备防重复的保护。请参阅幂等性。
相关
- 创建 Return Shipment — 创建替代的运货单。
- 获取 Return Shipment 详情 — 查看
cancelCutoffTime与当前状态。 - Webhooks —
labelGenerated包含labelId与cancelCutoffTime。
授权
Your API key
Your API token — keep this private
请求体
ID of the label to cancel, as returned by Create return shipment and the labelGenerated webhook
响应
Success — returns the standard response envelope with no additional payload fields. Inspect meta.status to confirm the label was cancelled.
Universal response envelope. Successful responses include the business payload as additional top-level fields alongside correlationId and meta. Failed responses (auth errors, validation errors) only populate correlationId and meta, with meta.errorCode and meta.error describing the failure.
Unique correlation ID for tracing the request through Return Helper systems.
Application-level metadata for every API response. Inspect status and errorCode to detect soft-error responses (validation failures arrive as HTTP 200 with meta.status: 400).
Show child attributes
Show child attributes