curl --request DELETE \
--url https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk \
--header 'Content-Type: application/json' \
--header 'x-auth-token: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"risk_control": "network_protection"
}
'import requests
url = "https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk"
payload = { "risk_control": "network_protection" }
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-auth-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-auth-token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({risk_control: 'network_protection'})
};
fetch('https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk', 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-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_POSTFIELDS => json_encode([
'risk_control' => 'network_protection'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-auth-token: <api-key>",
"x-idempotency-key: <x-idempotency-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-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk"
payload := strings.NewReader("{\n \"risk_control\": \"network_protection\"\n}")
req, _ := http.NewRequest("DELETE", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-auth-token", "<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.delete("https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk")
.header("x-idempotency-key", "<x-idempotency-key>")
.header("x-auth-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"risk_control\": \"network_protection\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["x-idempotency-key"] = '<x-idempotency-key>'
request["x-auth-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"risk_control\": \"network_protection\"\n}"
response = http.request(request)
puts response.read_body{
"card_id": "7f6dbbd9-37b9-4f64-a021-cd4f71234567",
"card_number": "************1234",
"cardholder_id": "b6e6268b-7d95-4700-9b87-12e7c1234567",
"card_scheme": "VISA",
"enabled": false,
"status": "ENROLL_PENDING",
"action_code": "41",
"definition": "Lost card, pickup",
"update_time": "2026-05-14T09:00:00Z"
}Remove Card from Network Protection
为此前已注册 ASAF Network Protection 的卡片提交移除请求。
在 Visa 处理请求期间,注册状态会变为 REMOVAL_PENDING。最终结果通过 card.risk_control.network_protection.removed webhook 送达。
curl --request DELETE \
--url https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk \
--header 'Content-Type: application/json' \
--header 'x-auth-token: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"risk_control": "network_protection"
}
'import requests
url = "https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk"
payload = { "risk_control": "network_protection" }
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-auth-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-auth-token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({risk_control: 'network_protection'})
};
fetch('https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk', 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-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_POSTFIELDS => json_encode([
'risk_control' => 'network_protection'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-auth-token: <api-key>",
"x-idempotency-key: <x-idempotency-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-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk"
payload := strings.NewReader("{\n \"risk_control\": \"network_protection\"\n}")
req, _ := http.NewRequest("DELETE", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-auth-token", "<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.delete("https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk")
.header("x-idempotency-key", "<x-idempotency-key>")
.header("x-auth-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"risk_control\": \"network_protection\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.uqpaytech.com/api/v1/issuing/cards/{id}/risk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["x-idempotency-key"] = '<x-idempotency-key>'
request["x-auth-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"risk_control\": \"network_protection\"\n}"
response = http.request(request)
puts response.read_body{
"card_id": "7f6dbbd9-37b9-4f64-a021-cd4f71234567",
"card_number": "************1234",
"cardholder_id": "b6e6268b-7d95-4700-9b87-12e7c1234567",
"card_scheme": "VISA",
"enabled": false,
"status": "ENROLL_PENDING",
"action_code": "41",
"definition": "Lost card, pickup",
"update_time": "2026-05-14T09:00:00Z"
}授权
由 UQPAY 提供的登录 API Token。
请求头
指定代表哪个子账户发起请求。应设置为 account_id,该值可通过 List Connected Accounts 接口获取。若省略或为空,则请求以主账户身份执行。
更多信息参见 关联账户。
用于维持操作幂等性的唯一标识符(UUID),确保同一操作的重复执行不会产生意外影响或重复。它有助于在网络错误、重试或失败的情况下保持数据一致性。
路径参数
资源的全局唯一标识符(UUID v4)。
"71fdb0fe-9682-457a-9361-e8868694f12f"
请求体
风控类型。ASAF 移除时必须为 network_protection。
network_protection "network_protection"
响应
移除请求已受理。
针对 ASAF Network Protection 注册或移除请求返回的确认信息。
卡片的唯一标识符。
"7f6dbbd9-37b9-4f64-a021-cd4f71234567"
脱敏卡号。
"************1234"
持卡人的唯一标识符。
"b6e6268b-7d95-4700-9b87-12e7c1234567"
卡组织。
"VISA"
该卡片当前是否启用了 Network Protection。此字段反映请求被网络处理后的状态——由于注册和移除是异步的,它可能不会立即变化。
false
ASAF Network Protection 注册的生命周期状态。
NOT_ENROLLED, ENROLL_PENDING, ENROLL_FAILED, ENROLLED, REMOVAL_PENDING "ENROLL_PENDING"
ASAF 操作码,表示卡片被注册到 Network Protection 的原因。以下定义沿用 ASAF 英文术语,与 API 返回的 definition 一致。
04— Pickup card41— Lost card, pickup43— Stolen card, pickup46— Closed account54— Expired card
04, 41, 43, 46, 54 "41"
action_code 的可读描述。
"Lost card, pickup"
注册或移除请求最后一次更新的时间。
"2026-05-14T09:00:00Z"

