TradeProtectedКомплаенс в сырьевой торговле

API проверки санкций

Один эндпоинт, четыре официальных списка

Подключите 28,172 записей санкционных списков и экспортного контроля OFAC (США), ООН, ЕС и Минкоммерции КНР к собственным системам ERP, риск-менеджмента или KYC. Передайте наименование — получите факт совпадения, перечень совпавших записей и ссылку на официальную запись для проверки.

28,172записей в списках
4официальных источника
Ежедневнообновление
4формата вывода

Кому это нужно

Почему не сделать самим

Четыре источника — четыре формата: OFAC отдаёт CSV, ООН — XML, у ЕС собственная база, а у Минкоммерции КНР 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=ru"
        style="width:100%;height:420px;border:1px solid #e4eaf1;border-radius:12px"
        loading="lazy"></iframe>

Обязательно ограничьте домен

Ключ внутри кода встраивания виден всем — его прочитает любой, кто откроет исходный код страницы. Поэтому задайте для этого ключа разрешённые домены в разделе «Подписка → ключи API» (например yourcompany.com): даже скопированный ключ не сработает на чужом сайте. Так же поступают с фронтенд-ключами вроде Google Maps.

Рекомендуем разделить ключ для встраивания и ключ для серверных вызовов: первый привязать к домену, второй не ограничивать, но держать только на своём сервере. Аккаунт может иметь пять ключей одновременно — этого хватает на разделение по средам.

Способ 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 вызовов на ключ в сутки, сброс в 00:00 UTC. В каждом ответе есть два заголовка:

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

На аккаунте может быть до пяти активных ключей. Разделение по средам (продакшн / тест / конкретный коллега) позволяет отозвать один ключ, не задев остальных потребителей.

Коды ошибок

Ошибки всегда возвращаются в виде {"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 · 日本語 · 한국어 · العربية