Швидкий старт
Ця сторінка проводить вас від ключа sandbox до доставки вебхука, яку ви перевірили, і використовує лише середовище sandbox. Нічого тут не тарифікується. Кожен крок посилається на повний посібник, тому сама сторінка лишається короткою.
1. Отримайте ключ sandbox
Ключі видає Leeri на запит: напишіть на hello@leeri.ai і попросіть ключ sandbox зі scope checks:write, checks:read і webhooks:manage. Ключ sandbox починається з ak_sandbox_. Він запускає справжній рушій скринінгу на ваших власних даних безкоштовно й ніколи не витрачає ліміт чи баланс; див. Sandbox і live.
Тримайте ключ у середовищі, ніколи в коді:
export LEERI_API_KEY="ak_sandbox_..."
2. Виконайте перевірку адреси
Надішліть призначену тестову адресу. З ключем sandbox вона завжди відповідає pending, тож ви можете від першого дня будувати опитування й обробку вебхуків. Надсилайте Idempotency-Key з кожним POST, щоб повторний запит ніколи не перевіряв двічі; див. Ідемпотентність.
- curl
- Node.js
- Python
curl -s -X POST https://api.leeri.ai/v1/checks \
-H "Authorization: Bearer $LEERI_API_KEY" \
-H "Idempotency-Key: quickstart-1" \
-H "Content-Type: application/json" \
-d '{"subject":"address","asset":"BTC","address":"1PENDNGCHECKADDRESSFRSANDBXTEST99"}'
const response = await fetch('https://api.leeri.ai/v1/checks', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LEERI_API_KEY}`,
'Idempotency-Key': 'quickstart-1',
'Content-Type': 'application/json',
},
body: JSON.stringify({ subject: 'address', asset: 'BTC', address: '1PENDNGCHECKADDRESSFRSANDBXTEST99' }),
});
const { data } = await response.json();
console.log(data.status, data.check_id); // "pending" and the id to poll
import os
import requests
response = requests.post(
"https://api.leeri.ai/v1/checks",
headers={
"Authorization": f"Bearer {os.environ['LEERI_API_KEY']}",
"Idempotency-Key": "quickstart-1",
},
json={"subject": "address", "asset": "BTC", "address": "1PENDNGCHECKADDRESSFRSANDBXTEST99"},
timeout=30,
)
data = response.json()["data"]
print(data["status"], data["check_id"]) # "pending" and the id to poll
Відповідь має status: "pending" і check_id. Кожна перевірка, відкладена чи ні, має однакову форму; усі поля — у розділі Перевірки адрес.
3. Прочитайте вердикт
Опитуйте перевірку, доки її status не перестане бути pending. Між опитуваннями чекайте до next_attempt_at, а не крутіть цикл: до цього моменту нічого не змінюється. Див. Pending і опитування.
- curl
- Node.js
- Python
curl -s https://api.leeri.ai/v1/checks/$CHECK_ID \
-H "Authorization: Bearer $LEERI_API_KEY"
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
let check;
do {
const response = await fetch(`https://api.leeri.ai/v1/checks/${checkId}`, {
headers: { Authorization: `Bearer ${process.env.LEERI_API_KEY}` },
});
check = (await response.json()).data;
if (check.status === 'pending') {
const wait = check.next_attempt_at ? Date.parse(check.next_attempt_at) - Date.now() : 6000;
await sleep(Math.min(Math.max(wait, 6000), 30000));
}
} while (check.status === 'pending');
console.log(check.status, check.band, check.score);
import os
import time
from datetime import datetime, timezone
import requests
while True:
response = requests.get(
f"https://api.leeri.ai/v1/checks/{check_id}",
headers={"Authorization": f"Bearer {os.environ['LEERI_API_KEY']}"},
timeout=30,
)
check = response.json()["data"]
if check["status"] != "pending":
break
wait = 6.0
if check["next_attempt_at"]:
due = datetime.fromisoformat(check["next_attempt_at"].replace("Z", "+00:00"))
wait = (due - datetime.now(timezone.utc)).total_seconds()
time.sleep(min(max(wait, 6.0), 30.0))
print(check["status"], check["band"], check["score"])
completed і failed обидва завершальні: після них жодне поле не змінюється. У завершеній перевірці дивіться передусім на це:
bandіscore. Рівень ризику —low,medium,highабоsevere; читайте його з поля, а не обчислюйте з оцінки. Див. Оцінка й рівень ризику.findings. Кожна знахідка називає правило, що спрацювало, і посилається на своє джерело вsource_url— публічний документ або сторінку методології; див. Знахідки і Методологію.partialіpartial_reasons. Перевірка ніколи не завершується серверною помилкою через недоступне джерело даних, а повідомляє про це. Див. Наскільки повний вердикт.report. Доказовий звіт вердикту, включений у перевірку; див. Доказові звіти.
4. Зареєструйте вебхук
З вебхуком ви реєструєте кінцеву точку один раз і отримуєте одну підписану доставку check.completed на кожну завершену перевірку, тож опитувати нічого не потрібно. URL має бути https. Відповідь містить секрет підпису secret один раз: одразу збережіть його в менеджері секретів. Якщо втратили, виконайте ротацію кінцевої точки. Див. Реєстрація кінцевої точки.
- curl
- Node.js
- Python
curl -s -X POST https://api.leeri.ai/v1/webhooks \
-H "Authorization: Bearer $LEERI_API_KEY" \
-H "Idempotency-Key: quickstart-webhook-1" \
-H "Content-Type: application/json" \
-d '{"url":"https://your-service.example.com/webhooks/leeri"}'
const response = await fetch('https://api.leeri.ai/v1/webhooks', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LEERI_API_KEY}`,
'Idempotency-Key': 'quickstart-webhook-1',
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: 'https://your-service.example.com/webhooks/leeri' }),
});
const { data } = await response.json();
// data.secret is shown only in this response.
console.log(data.webhook_id, data.secret);
import os
import requests
response = requests.post(
"https://api.leeri.ai/v1/webhooks",
headers={
"Authorization": f"Bearer {os.environ['LEERI_API_KEY']}",
"Idempotency-Key": "quickstart-webhook-1",
},
json={"url": "https://your-service.example.com/webhooks/leeri"},
timeout=30,
)
data = response.json()["data"]
# data["secret"] is shown only in this response.
print(data["webhook_id"], data["secret"])
5. Перевірте доставки
Будь-хто, хто знає ваш URL, може надіслати на нього запит, тому доставці довіряють лише тоді, коли її заголовок x-aml-signature перевіряється секретом із кроку 4. Обчисліть HMAC від сирого тіла запиту, порівняйте за сталий час і відхиляйте застарілу позначку часу. Робочі приклади й мінімальний приймач — у розділі Перевірка підпису. Відповідайте 2xx швидко й усувайте дублікати за event_id, бо доставки відбуваються щонайменше раз; див. Доставка й повторні спроби.
Виконайте ще одну перевірку sandbox тим самим ключем і переконайтеся, що ваш приймач перевіряє доставку й відповідає 2xx.
Перехід на live
Коли кроки вище працюють, перейдіть із sandbox на live, змінивши ключ і більше нічого. Перед цим:
- Використовуйте ключ
ak_live_, виданий так само, як ключ sandbox. Тримайте його в сховищі секретів; див. Автентифікація. - Надсилайте
Idempotency-Keyз кожнимPOST; див. Ідемпотентність. - Обробляйте
402,429і503, як описано в Помилках, і дотримуйтесяRetry-After. - Не виходьте за межі з розділу Обмеження частоти запитів і ліміти. Тарифи — на сторінці тарифів.
- Зареєструйте кінцеву точку вебхука знову з ключем live: кінцеві точки належать одному середовищу.
- Перевіряйте також транзакції, де це потрібно; див. Перевірки транзакцій.
Переходите з інтеграції AMLBot? Див. Міграція з AMLBot: ваш поточний клієнт продовжить працювати після зміни трьох змінних середовища.