API для проверки санкционных списков: техническое руководство по интеграции
Что под капотом?
Наш сервис предоставляет REST API для проверки физических и юридических лиц по 15+ санкционным спискам. Поиск осуществляется в режиме реального времени по открытым реестрам ООН, США (OFAC), ЕС, Великобритании, Канады, России и другим.
Базовый URL: https://ваш-домен.ru/api/sanc
Аутентификация: два пути
1. Через заголовок (рекомендуется)
X-API-Key: ваш_секретный_ключ
2. Через параметр URL
?api_key=ваш_секретный_ключ
Где взять ключ? После регистрации в личном кабинете генерируется уникальный API-ключ.
Параметры поиска
Достаточно одного из параметров:
name
— ФИО или название организации, ИНН, ОГРН, SWIFT банкаПримеры кода на разных языках
Python 3 (requests)
import requests
def check_sanctions(api_key, search_term, search_type='name'):
url = f"https://ваш-домен.ru/api/sanc"
headers = {"X-API-Key": api_key}
params = {search_type: search_term}
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
return {"error": str(e)}
# Использование
result = check_sanctions("ваш_ключ", "Иванов Иван Иванович")
print(result)
JavaScript (Node.js)
const axios = require('axios');
async function checkSanctions(apiKey, searchValue, searchType = 'name') {
try {
const response = await axios.get('https://ваш-домен.ru/api/sanc', {
headers: { 'X-API-Key': apiKey },
params: { [searchType]: searchValue }
});
return response.data;
} catch (error) {
return { error: error.message };
}
}
// Использование
checkSanctions('ваш_ключ', '7712345678', 'inn')
.then(console.log);
Go
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/url"
)
func CheckSanctions(apiKey, searchValue, searchType string) (map[string]interface{}, error) {
baseURL := "https://ваш-домен.ru/api/sanc"
params := url.Values{}
params.Add(searchType, searchValue)
req, _ := http.NewRequest("GET", baseURL, nil)
req.Header.Add("X-API-Key", apiKey)
req.URL.RawQuery = params.Encode()
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
var result map[string]interface{}
json.Unmarshal(body, &result)
return result, nil
}
C# (.NET)
using System;
using System.Net.Http;
using System.Threading.Tasks;
public class SanctionChecker
{
private static readonly HttpClient client = new HttpClient();
public static async Task<string> CheckSanctionsAsync(string apiKey, string searchValue, string searchType = "name")
{
try
{
client.DefaultRequestHeaders.Add("X-API-Key", apiKey);
string url = $"https://ваш-домен.ru/api/sanc?{searchType}={Uri.EscapeDataString(searchValue)}";
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
return $"{{\"error\": \"{ex.Message}\"}}";
}
}
}
1С (8.3+)
Функция ПроверитьСанкции(КлючAPI, ЗначениеПоиска, ТипПоиска = "name") Экспорт
Запрос = Новый HTTPЗапрос();
Запрос.Заголовки.Вставить("X-API-Key", КлючAPI);
URL = "https://ваш-домен.ru/api/sanc?" + ТипПоиска + "=" + КодироватьСтроку(ЗначениеПоиска, СпособКодированияСтроки.КодировкаURL);
Соединение = Новый HTTPСоединение("ваш-домен.ru", 443, "", "", Новый ЗащищенноеСоединениеOpenSSL());
Ответ = Соединение.Получить(URL, Запрос);
Если Ответ.КодСостояния = 200 Тогда
Возврат ПрочитатьJSON(Ответ.ПолучитьТелоКакСтроку());
Иначе
Возврат Новый Структура("Ошибка", "Ошибка HTTP: " + Ответ.КодСостояния);
КонецЕсли;
КонецФункции
// Использование
Результат = ПроверитьСанкции("ваш_ключ", "1234567890", "inn");
Сообщить(JSON(Результат));
PHP
<?php
function checkSanctions($apiKey, $searchValue, $searchType = 'name') {
$url = "https://ваш-домен.ru/api/sanc?$searchType=" . urlencode($searchValue);
$options = [
'http' => [
'header' => "X-API-Key: $apiKey\r\n",
'method' => 'GET'
]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
return $response ? json_decode($response, true) : ['error' => 'Request failed'];
}
// Использование
$result = checkSanctions('ваш_ключ', 'SABRRUMM', 'swift');
print_r($result);
?>
Обработка ответов
Успешный ответ с данными
{
"FULL_NAME": "Иванов",
"Info": [
{
"Fullname": "Иванов Виктор",
"Num": "143351",
"INN_Date": "1950-07-09",
"Dop": "Дополнительная информация...",
"Reestr": "Реестр ФЛ находящихся в санкционных списках ЕС"
}
]
}
Пустой ответ (совпадений нет)
{
"FULL_NAME": "Иванов Иван Иванович",
"Info": [
{
"Fullname": "Not result in base",
"Num": "",
"INN_Date": "",
"Dop": "",
"Reestr": "All base sanction list"
}
]
}
Обработка ошибок
401 Unauthorized
— неверный API-ключ400 Bad Request
— отсутствуют параметры поиска429 Too Many Requests
— превышен лимит запросов500 Internal Server Error
— внутренняя ошибка сервера
Интеграция в бизнес-процессы
1. CRM системы
Добавляйте проверку при создании нового контрагента
2. Финансовые операции
Проверяйте контрагентов перед проведением платежей
3. Onboarding клиентов
Включайте проверку в процесс верификации новых клиентов
Безопасность
- Никогда не храните API-ключи в коде
- Используйте environment variables
- Ограничивайте доступ к ключам
- Регулярно обновляйте ключи
Мониторинг и логирование
Реализуйте логирование всех запросов для аудита:
import logging
logging.basicConfig(filename='sanctions_checks.log', level=logging.INFO)
def log_check(search_type, search_value, result):
has_match = result['Info'][0]['Fullname'] != 'Not result in base'
logging.info(f"{datetime.now()}: {search_type}={search_value}, match={has_match}")
Заключение
Интеграция с API проверки санкционных списков — критически важная функция для compliance-процессов. Используйте приведенные примеры кода для быстрого старта и не забывайте об обработке ошибок и мониторинге.
Важно: Регулярно обновляйте зависимости и следите за изменениями в API через документацию.