Sanctions Screening API — one endpoint, four official lists
把 28,172 条美国 OFAC、联合国、欧盟、中国商务部的制裁与出口管制名单,接进你自己的 ERP、风控或 KYC 系统。传一个名称,返回是否命中、命中哪几条、以及可点开核实的官方出处链接。
四个来源四种格式:OFAC 是 CSV、联合国是 XML、欧盟是自家数据库、中国商务部干脆没有接口只有公告网页。
名单还天天在变——本站上一轮刷新 OFAC 就少了 97 条(实体被移出也必须同步,否则会误报)。
这些维护成本是持续的,不是一次性的。
API 需要 API 版套餐(US$19.9/月,含会员全部权益)。
登录后进「会员」页开通,再到「API 密钥」里点新建,密钥形如 tp_xxxxxxxx。
明文只在创建时显示一次,请当场存进你的密钥管理器。
curl -H "Authorization: Bearer tp_你的密钥" "https://tradeprotected.com/api/v1/screen?name=GAZPROM"
{
"matched": true,
"count": 2,
"rows": [
{
"source": "OFAC",
"name": "GAZPROM NEFT",
"type": "entity",
"programs": "RUSSIA-EO14024",
"listed_on": "2022-02-24",
"url": "https://sanctionssearch.ofac.treas.gov/..."
}
]
}
matched 是布尔值,可以直接拿去做流程判断;rows[].url 指向官方原始记录,存进你的尽调档案即可作为核查留痕。
单个名称筛查。参数 name(必填,最长 200 字符)。传 7 位数字视为船舶 IMO 号,自动走船舶精确匹配。
批量筛查,单次最多 100 个名称。适合下单前一次性核对买方、卖方、船东、收货人。
名单浏览与全量拉取,给要把名单同步进自己库的场景。参数:q 关键词、source 来源、type 对象类型、limit(默认 100,上限 500)、offset 偏移。
各来源的条目数与最近更新时间。同步任务可以先查这个再决定要不要重新拉全量。
name | 要筛查的名称,或 7 位 IMO 号。GET /screen 必填 |
|---|---|
names | 批量筛查的名称数组,POST body,最多 100 个 |
source | OFAC / UN / EU / EUX / CN,留空为全部 |
type | entity 公司 / individual 个人 / vessel 船舶 / aircraft 飞机 |
format | json(默认)/ xlsx(Excel)/ csv / ndjson |
limit | 单页条数,默认 100,上限 500 |
offset | 偏移量,配合 limit 翻页 |
同一份数据,三种取用方式,按「要不要写代码」从易到难:
把下面这段贴到你公司官网的任意页面,就会出现一个制裁名单查询框,数据走我们的库,外观简洁可直接融入你的页面。适合货代、律所、行业协会给自己的客户提供一个自助核查入口。
<iframe src="https://tradeprotected.com/embed?key=tp_你的密钥&lang=zh"
style="width:100%;height:420px;border:1px solid #e4eaf1;border-radius:12px"
loading="lazy"></iframe>
嵌入代码里的密钥是公开可见的——任何人查看你网页的源码都能拿到。所以在「会员 → API 密钥」里给这把密钥填上允许的域名(如 yourcompany.com),之后即使密钥被抄走,在别的网站上也用不了。这与 Google Maps 等前端密钥的做法一致。
建议把嵌入用的密钥和服务端调用的密钥分开:嵌入那把锁定域名,服务端那把不锁、只存在你的服务器上。一个账号可同时保有 5 把密钥,正好够分环境。
加 format 参数即可,任何查询接口都支持。
?format=xlsx。真正的 .xlsx 文件,中英双语表头、列宽已调好、表头深色加粗,双击就能进合规报告附件,不用再手动排版。?format=csv。带 UTF-8 BOM,Excel 打开中文不乱码;适合程序读。?format=ndjson。每行一个独立 JSON 对象,适合流式管道逐行解析,拉全量时不必把整个响应读进内存。matched、count 汇总字段,适合程序判断。# 把中国商务部名单导成 Excel
curl -H "Authorization: Bearer tp_你的密钥" "https://tradeprotected.com/api/v1/sanctions?source=CN&limit=500&format=xlsx" -o cn-list.xlsx
# 单次筛查结果直接存表,可作为尽调留痕归档
curl -H "Authorization: Bearer tp_你的密钥" "https://tradeprotected.com/api/v1/screen?name=GAZPROM&format=xlsx" -o gazprom.xlsx
# 按 IMO 查船
curl -H "Authorization: Bearer tp_你的密钥" "https://tradeprotected.com/api/v1/screen?name=9209508"
import requests
KEY = "tp_你的密钥"
r = requests.get(
"https://tradeprotected.com/api/v1/screen",
params={"name": "GAZPROM"},
headers={"Authorization": "Bearer " + KEY},
timeout=20,
)
r.raise_for_status()
data = r.json()
if data["matched"]:
print("命中", data["count"], "条,需人工复核")
for row in data["rows"]:
print(row["source"], row["name"], row["url"])
const KEY = process.env.TP_API_KEY;
async function screen(name) {
const url = new URL("https://tradeprotected.com/api/v1/screen");
url.searchParams.set("name", name);
const r = await fetch(url, { headers: { authorization: "Bearer " + KEY } });
if (!r.ok) throw new Error("screen failed: " + r.status);
return r.json();
}
const out = await screen("SOVCOMFLOT");
console.log(out.matched ? "命中 " + out.count : "通过");
names = ["GAZPROM", "ACSL", "SOVCOMFLOT"]
r = requests.post(
"https://tradeprotected.com/api/v1/screen",
json={"names": names},
headers={"Authorization": "Bearer " + KEY},
timeout=60,
)
for item in r.json()["results"]:
flag = "命中" if item["matched"] else "通过"
print(flag, item["query"], item["count"])
每把密钥每日 1000 次调用,UTC 00:00 重置。每次响应都带这两个头:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
一个账号最多同时保有 5 把有效密钥,建议按环境分开(生产 / 测试 / 某个同事),出问题时可以只吊销一把而不影响其他调用方。
错误统一返回 {"error":{"code":"...","message":"..."}},请按 code 判断而不是文案。
| 401 | missing_key 没传密钥 · invalid_key 密钥无效或已吊销 |
|---|---|
| 403 | membership_required 未开通或已过期——套餐一失效密钥立即停用,续费后无需换新 |
| 429 | quota_exceeded 当日额度用尽 |
| 400 | missing_name / name_too_long / too_many_names 参数问题 |
名单匹配为归一化子串与短语匹配,命中结果是尽职调查的提示,不是法律结论。同名同姓、音译差异都可能造成误报或漏报,最终判断请以 url 指向的官方原始记录为准。
API 版套餐:含会员全部权益,外加数据接口、嵌入式查询框与 Excel 导出。
同类筛查接口普遍按年签、起步几千美元,我们按月付、随时停。先免费查几条看看数据质量,再决定要不要接。