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