TradeProtected원자재 무역 컴플라이언스

제재 조회 API

엔드포인트 하나로 네 개의 공식 리스트

미국 OFAC, 유엔, EU, 중국 상무부의 제재 및 수출통제 데이터 28,172건을 자사 ERP, 리스크 관리, KYC 시스템에 연동할 수 있습니다. 명칭을 보내면 해당 여부, 어떤 기록에 걸렸는지, 그리고 확인용 공식 문서 링크가 반환됩니다.

28,172리스트 수록 건수
4공식 출처
매일갱신 주기
4출력 형식

이런 분들을 위한 서비스

직접 만들지 않는 편이 나은 이유

네 개의 출처, 네 가지 형식 — OFAC는 CSV, 유엔은 XML, EU는 자체 데이터베이스, 중국 상무부는 아예 API 없이 공고 페이지만 있습니다.

게다가 리스트는 매일 바뀝니다. 최근 갱신에서 OFAC는 97건이 줄었습니다(삭제도 동기화하지 않으면 위양성이 발생합니다).

이 유지보수 비용은 한 번으로 끝나지 않고 계속됩니다.

연동은 세 단계

1. API 플랜에 가입하고 키를 생성합니다

이 API는 API 플랜(US$19.9/월, 멤버십의 모든 기능 포함)이 필요합니다.

로그인 후 멤버십 탭에서 가입하고, API 키 항목에서 키를 생성하십시오. 키는 tp_xxxxxxxx 형식입니다.

평문 키는 생성 시 한 번만 표시됩니다 — 그 자리에서 바로 시크릿 관리 도구에 저장하십시오.

2. 요청을 보냅니다

curl -H "Authorization: Bearer tp_YOUR_KEY"   "https://tradeprotected.com/api/v1/screen?name=GAZPROM"

3. 응답을 읽습니다

{
  "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은 공식 기록을 가리키므로 확인 증적으로 보관하십시오.

엔드포인트

GET/api/v1/screen

단건 조회. 파라미터 name(필수, 최대 200자). 7자리 숫자는 선박 IMO 번호로 간주하여 완전 일치로 대조합니다.

POST/api/v1/screen

일괄 조회. 호출당 최대 100건. 거래 전에 매수인 · 매도인 · 선주 · 수하인을 한 번에 확인할 때 유용합니다.

GET/api/v1/sanctions

리스트 검색 및 전체 다운로드. 자체 사본을 유지하는 경우에 사용합니다. 파라미터: q, source, type, limit(기본 100, 최대 500), offset.

GET/api/v1/sources

출처별 수록 건수와 최종 갱신일. 동기화 작업이 미리 조회하면 불필요한 전체 다운로드를 피할 수 있습니다.

파라미터

name조회할 명칭 또는 7자리 IMO 번호. GET /screen에서는 필수
names일괄 조회용 명칭 배열. POST 본문에 담으며 최대 100건
sourceOFAC / UN / EU / EUX / CN. 비워 두면 전체를 의미합니다
typeentity / individual / vessel / aircraft
formatjson(기본) / xlsx(Excel) / csv / ndjson
limit페이지당 행 수. 기본 100, 최대 500
offset오프셋. limit과 함께 페이지를 넘깁니다

사용하는 세 가지 방법

같은 데이터를 코드가 적은 순서대로 세 가지 방식으로 이용할 수 있습니다:

방법 1: 자사 사이트에 임베드

아래 스니펫을 회사 홈페이지의 아무 페이지에나 붙이면 당사 데이터를 사용하는 제재 리스트 검색창이 표시됩니다. 장식을 절제한 디자인이라 기존 레이아웃에 자연스럽게 어울립니다. 고객에게 셀프 확인 수단을 제공하려는 포워더, 법무법인, 협회에 적합합니다.

<iframe src="https://tradeprotected.com/embed?key=tp_YOUR_KEY&lang=ko"
        style="width:100%;height:420px;border:1px solid #e4eaf1;border-radius:12px"
        loading="lazy"></iframe>

키를 자사 도메인으로 제한하십시오

임베드 코드에 포함된 키는 공개됩니다 — 페이지 소스를 보면 누구나 읽을 수 있습니다. 따라서 멤버십 → API 키에서 해당 키에 허용 도메인(예: yourcompany.com)을 설정하십시오. 복사되더라도 다른 사이트에서는 작동하지 않습니다. Google Maps 같은 프런트엔드 키와 같은 방식입니다.

임베드용 키와 서버에서 호출하는 키를 분리하시길 권합니다. 전자는 자사 도메인으로 제한하고, 후자는 제한 없이 자사 서버에만 둡니다. 한 계정에서 동시에 5개까지 보유할 수 있어 환경별로 나누기에 충분합니다.

방법 3: 스프레드시트로 내보내기

format 파라미터만 추가하면 됩니다. 검색 계열 엔드포인트는 모두 지원합니다.

# 중국 상무부 리스트를 Excel로 내보내기
curl -H "Authorization: Bearer tp_YOUR_KEY"   "https://tradeprotected.com/api/v1/sanctions?source=CN&limit=500&format=xlsx"   -o cn-list.xlsx

# 단건 조회 결과를 스프레드시트로 보관
curl -H "Authorization: Bearer tp_YOUR_KEY"   "https://tradeprotected.com/api/v1/screen?name=GAZPROM&format=xlsx"   -o gazprom.xlsx

# IMO 번호로 선박 검색
curl -H "Authorization: Bearer tp_YOUR_KEY"   "https://tradeprotected.com/api/v1/screen?name=9209508"

코드 예시

Python

import requests

KEY = "tp_YOUR_KEY"
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("MATCH", data["count"], "건 해당 — 수동 검토 필요")
    for row in data["rows"]:
        print(row["source"], row["name"], row["url"])

Node.js

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 ? "MATCH " + out.count : "clear");

일괄 조회 (Python)

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 = "MATCH" if item["matched"] else "clear"
    print(flag, item["query"], item["count"])

사용량과 오류 코드

키 하나당 하루 1000회이며 UTC 00:00에 초기화됩니다. 모든 응답에 다음 두 헤더가 포함됩니다:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999

한 계정에서 유효한 키를 5개까지 보유할 수 있습니다. 환경별(운영 / 검증 / 특정 담당자)로 나눠 두면 다른 사용처에 영향을 주지 않고 하나만 취소할 수 있습니다.

오류

오류는 항상 {"error":{"code":"...","message":"..."}}를 반환합니다. 분기는 메시지 본문이 아니라 code로 하십시오.

401missing_key 키가 전달되지 않음 · invalid_key 키가 유효하지 않거나 취소됨
403membership_required 미가입 또는 기간 만료. 플랜이 만료되면 키가 동작을 멈추고, 갱신하면 재발급 없이 그대로 복구됩니다
429quota_exceeded 일일 사용량 소진
400missing_name / name_too_long / too_many_names 파라미터 문제

중요 안내

대조는 부분 문자열과 정규화된 어구를 기반으로 하므로 해당 결과는 실사의 단서이지 법적 결론이 아닙니다. 동명이인과 음차 차이는 위양성과 위음성을 모두 만들어냅니다. 최종 판단은 url이 가리키는 공식 기록에 근거해 내리십시오.

API 플랜에는 멤버십의 모든 기능과 함께 데이터 API, 임베드 위젯, Excel 내보내기가 포함됩니다.

동급의 조회 API는 보통 연간 계약으로 수천 달러부터 시작합니다. 당사는 월 단위이며 언제든 해지할 수 있습니다. 먼저 무료로 몇 건 조회해 데이터를 평가한 뒤 연동하십시오.

무료로 사용해 보기

하루 1000회를 넘는 사용량, 전용 한도, 온프레미스 설치가 필요하십니까? 기업 플랜 보기 →

다른 언어: English · 中文 · Русский · Español · 日本語 · العربية