Оглавление
SafeMatch — Руководство пользователя
Полное руководство по работе с платформой SafeMatch для площадок-клиентов.
1. Введение
Что такое SafeMatch
SafeMatch — P2P-платформа для обмена криптовалюты на фиат по модели эскроу. Платформа соединяет площадки, которым нужно пополнение (приём фиата и получение крипты), с площадками, которым нужен вывод (отдача крипты и получение фиата). SafeMatch выступает гарантом сделки: крипта замораживается на платформе до подтверждения оплаты, фиат переводится напрямую между сторонами.
Для кого
SafeMatch создан для бизнес-клиентов — легальных онлайн-площадок (казино, платёжные сервисы, биржи), которым нужно:
- принимать фиатные платежи от клиентов и конвертировать их в крипту;
- выводить криптовалюту клиентам, получая фиат.
Платформа работает по модели B2B: вы интегрируетесь через API, публикуете заявки от имени своих клиентов, а SafeMatch находит встречную сторону и обеспечивает безопасность сделки.
Как это работает (кратко)
- Ваша площадка публикует заявку (пополнение или вывод) через API.
- SafeMatch автоматически находит встречную заявку с подходящей суммой и курсом.
- Стороны получают реквизиты друг друга. Покупатель переводит фиат и загружает чек.
- Продавец подтверждает получение денег — крипта зачисляется покупателю.
Весь процесс занимает от нескольких минут до нескольких часов в зависимости от наличия встречных заявок.
2. Начало работы
Подключение площадки
Для начала работы с SafeMatch:
- Свяжитесь с нами — напишите в Telegram: @Kos_Change
- Предоставьте информацию о вашей площадке для верификации
- Получите учётные данные:
- API-ключ — для идентификации вашей площадки
- Секретный ключ — для подписи запросов (HMAC-SHA256)
- Настройте интеграцию — подключите API согласно руководству по интеграции
Что нужно для интеграции
- Возможность отправлять HTTP-запросы с вашего сервера
- Реализация подписи запросов (HMAC-SHA256)
- Хранилище для API-ключа и секретного ключа (не в коде, а в защищённых переменных окружения)
- Обработка WebSocket-уведомлений для получения событий в реальном времени
Безопасность
- Все запросы подписываются с помощью HMAC-SHA256 — никто не сможет подделать запрос от вашего имени.
- Секретный ключ никогда не передаётся по сети — он используется только для формирования подписи на вашей стороне.
- Храните секретный ключ в надёжном месте. В случае компрометации немедленно свяжитесь с @Kos_Change для перевыпуска.
3. Типы заявок
В SafeMatch существует два типа заявок:
IN-заявка (пополнение)
Сценарий: вашей площадке нужна криптовалюта, клиент готов заплатить фиат.
- Вы публикуете заявку с суммой в фиате и желаемым диапазоном курса.
- SafeMatch находит продавца, который готов отдать крипту за эту сумму.
- Ваш клиент переводит фиат на реквизиты продавца.
- После подтверждения оплаты крипта зачисляется на ваш баланс.
Пример: площадка создаёт IN-заявку на 100 000 RUB с курсом 95–105 RUB/USDT. SafeMatch находит продавца с курсом 98–102. Согласованный курс — 100 RUB/USDT. Клиент переводит 100 000 RUB продавцу, площадка получает 1 000 USDT (минус комиссия).
OUT-заявка (вывод)
Сценарий: площадка отдаёт криптовалюту, клиент хочет получить фиат.
- Вы публикуете заявку с суммой, диапазоном курса и платёжными реквизитами для получения фиата.
- SafeMatch находит покупателя (одного или нескольких), который переведёт фиат на ваши реквизиты.
- После подтверждения получения денег крипта передаётся покупателю.
Пример: площадка создаёт OUT-заявку на 100 000 RUB с курсом 95–105, указывает реквизиты карты Сбербанка. SafeMatch находит покупателя. Покупатель переводит 100 000 RUB на карту, площадка подтверждает — крипта переходит покупателю.
Ключевое различие
| IN (пополнение) | OUT (вывод) | |
|---|---|---|
| Вы получаете | Криптовалюту | Фиат |
| Вы отдаёте | Фиат (через клиента) | Криптовалюту |
| Реквизиты | Получаете от продавца | Указываете свои |
| Резервирование крипты | Не требуется | Крипта замораживается при матче |
| Встречных заявок | Одна IN → одна OUT | Одна OUT → одна или несколько IN |
4. Создание заявки
Параметры заявки
При создании заявки необходимо указать:
| Параметр | Описание | Обязательность |
|---|---|---|
side | Тип заявки: IN (пополнение) или OUT (вывод) | Всегда |
min_price | Минимальный допустимый курс (например, 95.0) | Всегда |
max_price | Максимальный допустимый курс (например, 105.0) | Всегда |
fiat | Фиатная валюта (например, RUB) | Всегда |
token | Криптовалюта (например, USDT) | Всегда |
fiat_qty | Сумма в фиатной валюте (например, 100000) | Всегда |
max_payments | Максимум встречных платежей | Только для OUT |
banks | Платёжные реквизиты | Только для OUT |
Пример IN-заявки
Площадке нужно получить USDT на сумму 100 000 RUB по курсу от 95 до 105 RUB/USDT:
{
"side": "IN",
"min_price": 95.0,
"max_price": 105.0,
"fiat": "RUB",
"token": "USDT",
"fiat_qty": 100000
}
Пример OUT-заявки
Площадка хочет продать крипту и получить фиат, принимая до 3 платежей:
{
"side": "OUT",
"min_price": 95.0,
"max_price": 105.0,
"fiat": "RUB",
"token": "USDT",
"fiat_qty": 100000,
"max_payments": 3,
"banks": [
{
"bank_name": "Сбербанк",
"recipient_details": "2200 0000 0000 0000",
"recipient_name": "Иван Иванов",
"detail_type": "CARD",
"priority": 1
}
]
}
Что проверяется при создании
- Разрешена ли торговля для вашей площадки
- Не превышены ли лимиты по апелляциям и отменам
- Достаточно ли средств:
- Для IN: на балансе должно хватить для оплаты будущей комиссии
- Для OUT: на балансе должна быть криптовалюта на указанную сумму
Важно: при создании заявки средства не списываются — система только проверяет их наличие. Резервирование и списание происходят позже.
Реквизиты для OUT-заявки
При создании OUT вы указываете реквизиты, на которые покупатель переведёт фиат:
| Поле | Описание |
|---|---|
bank_name | Название банка (например, «Сбербанк», «Тинькофф») |
recipient_details | Номер карты или телефон |
recipient_name | Имя получателя |
detail_type | Тип: CARD (карта) или PHONE_NUMBER (телефон) |
priority | Приоритет реквизитов (1 — наивысший) |
Можно указать несколько комплектов реквизитов — покупатель выберет наиболее подходящий.
5. Процесс мэтчинга
Как система находит пару
После создания заявки SafeMatch автоматически ищет подходящую встречную заявку. Для сопоставления должны совпасть три условия:
- Пересечение курсов — диапазоны курсов покупателя и продавца должны пересекаться.
- Точная сумма — сумма одной или нескольких IN-заявок должна точно совпадать с суммой OUT-заявки.
- Лимит платежей — количество IN-заявок не превышает
max_payments, указанный в OUT.
Как определяется курс
Курс сделки рассчитывается как среднее от пересечения диапазонов:
| Покупатель (IN) | Продавец (OUT) | Пересечение | Курс | |
|---|---|---|---|---|
| Диапазон | 95–105 | 98–102 | 98–102 | (98 + 102) / 2 = 100 |
Что происходит при матче
- Покупатель (IN): получает реквизиты продавца для перевода фиата. Баланс не меняется.
- Продавец (OUT): криптовалюта переводится из доступного баланса в зарезервированные средства (замораживается). Покупатель не может получить крипту, пока продавец не подтвердит оплату.
Один OUT — несколько IN
Одна OUT-заявка может быть сопоставлена с несколькими IN-заявками, если их суммы в сумме дают нужную сумму. Например:
- OUT на 100 000 RUB может быть сопоставлен с двумя IN по 50 000 RUB каждая.
- Для каждого IN замораживается соответствующая часть крипты.
Время ожидания
Заявка может ожидать сопоставления неограниченное время, пока не найдётся подходящая встречная сторона. Вы можете в любой момент удалить заявку, если она ещё не сопоставлена.
6. Оплата и чек
После сопоставления
Когда система находит пару, покупатель получает реквизиты продавца и должен:
- Перевести фиат по указанным реквизитам (карта или телефон).
- Загрузить чек — подтверждение перевода в формате PDF.
Загрузка чека
- Формат: только PDF.
- Способ: загрузка файла через API (multipart/form-data).
- При загрузке указывается приоритет выбранного банка из реквизитов продавца.
Таймаут на загрузку чека
После сопоставления у покупателя есть 20 минут на загрузку чека.
| Ситуация | Что произойдёт |
|---|---|
| Чек загружен в течение 20 минут | Заявка переходит в ожидание подтверждения |
| Чек не загружен за 20 минут | IN-заявка автоматически отменяется |
| Чек загружен, ожидает подтверждения | Таймаут не действует — продавец подтверждает без ограничений по времени |
| Заявка в апелляции | Таймаут приостанавливается |
Что происходит при отмене по таймауту
- IN-заявка переходит в статус «отменена».
- Зарезервированная крипта возвращается продавцу в доступный баланс.
- OUT-заявка переходит в режим поиска замены (подробнее — в разделе Отмена и замена).
7. Подтверждение и завершение
Подтверждение оплаты
После загрузки чека продавец (создатель OUT) проверяет поступление денег и принимает решение:
- Подтвердить — деньги получены, сделка завершается.
- Оспорить — деньги не поступили, создаётся апелляция.
Что происходит при подтверждении
В момент подтверждения оплаты выполняются все финансовые операции:
- Комиссия покупателя — списывается с доступного баланса покупателя.
- Перевод крипты — из зарезервированных средств продавца в доступный баланс покупателя.
- Комиссия продавца — списывается с доступного баланса продавца.
- Реферальные выплаты — начисляются рефереру (если площадка была приведена партнёром).
Пример
Сделка на 100 000 RUB по курсу 100 RUB/USDT (1 000 USDT):
| Операция | Сумма | Результат |
|---|---|---|
| Комиссия покупателя (2%) | 1 000 × 2% = 20 USDT | Списано с баланса покупателя |
| Перевод крипты | 1 000 USDT | Зачислено покупателю |
| Комиссия продавца (1.5%) | 1 000 × 1.5% = 15 USDT | Списано с баланса продавца |
Итого покупатель получил: 1 000 USDT, заплатил 20 USDT комиссии.
Продавец отдал: 1 000 USDT, заплатил 15 USDT комиссии.
Завершение OUT-заявки
OUT-заявка завершается, когда все привязанные IN-заявки завершены или отменены. Если после завершения у продавца остались зарезервированные средства (например, часть IN была отменена) — остаток автоматически возвращается в доступный баланс.
8. Отмена и замена
Удаление заявки
Вы можете удалить свою заявку, пока она не сопоставлена (статус «ожидание сопоставления»). После сопоставления удаление невозможно.
При удалении OUT-заявки зарезервированные средства (если были) возвращаются в доступный баланс.
Когда IN-заявка отменяется
| Причина | Описание |
|---|---|
| Таймаут | Чек не загружен в течение 20 минут после сопоставления |
| Отклонение чека | Продавец оспорил чек, администратор подтвердил отмену |
| Несоответствие реквизитов | Перевод выполнен на неверные реквизиты |
Поиск замены (для OUT)
Если один из IN-заявок по вашему OUT был отменён, система автоматически переходит в режим поиска замены:
- OUT-заявка получает статус «поиск замены».
- Система ищет новую IN-заявку на недостающую сумму.
- При нахождении замены — дополнительное резервирование крипты и продолжение сделки.
Отмена поиска замены
Если вы не хотите ждать замену, можно отменить поиск. В этом случае:
- OUT-заявка завершится по тем IN, которые уже подтверждены.
- Неиспользованные зарезервированные средства вернутся в доступный баланс.
9. Апелляции
Когда можно создать апелляцию
| Ситуация | Когда доступно |
|---|---|
| Деньги не поступили, неверная сумма, ошибка | После завершения заявки |
| Продавец считает чек недействительным | При получении чека (через оспаривание) |
Причины апелляций
Для покупателя (IN):
| Причина | Описание |
|---|---|
| Средства не поступили | Крипта не зачислена после подтверждения |
| Неверная сумма | Зачислена не та сумма |
| Неверный получатель | Указан неверный получатель |
| Задержка платежа | Средства задерживаются |
Для продавца (OUT):
| Причина | Описание |
|---|---|
| Криптовалюта не получена | Крипта не пришла |
| Неверная сумма крипты | Пришла не та сумма |
| Ошибка транзакции | Ошибка при переводе |
| Задержка перевода | Перевод задерживается |
Как проходит апелляция
- Подача — вы указываете причину и описание проблемы.
- Рассмотрение — администратор SafeMatch изучает материалы (чеки, данные сделки).
- Решение — одно из трёх:
- В вашу пользу — корректировка балансов.
- В пользу контрагента — апелляция отклонена.
- Нейтральное решение — без изменений.
- Вы также можете отозвать свою апелляцию до решения.
Пока идёт апелляция, связанные заявки не могут быть отменены по таймауту или удалены.
10. Балансы
У каждой площадки на SafeMatch есть три типа баланса:
Доступный баланс
Средства, которыми вы можете свободно распоряжаться:
- Создавать заявки
- Оплачивать комиссии
- Получать зачисления криптовалюты
Зарезервированные средства
Криптовалюта, заблокированная по вашим активным OUT-заявкам:
- Замораживается при сопоставлении (переходит из доступного в зарезервированный)
- Возвращается при отмене IN-заявки
- Передаётся покупателю при подтверждении оплаты
- Остаток возвращается при завершении OUT
Зарезервированные средства нельзя использовать для новых заявок и операций.
Реферальный баланс
Вознаграждение за приведённые площадки (подробнее — в разделе Реферальная программа).
Когда меняется баланс
| Событие | Доступный | Зарезервированный | Реферальный |
|---|---|---|---|
| Пополнение баланса (депозит) | +сумма | — | — |
| Создание заявки | Проверка (без изменений) | — | — |
| Сопоставление (матч) | Продавец: −крипта | Продавец: +крипта | — |
| Подтверждение оплаты | Покупатель: −комиссия, +крипта; Продавец: −комиссия | Продавец: −крипта | Реферер: +доля |
| Отмена IN | — | Продавец: −крипта (возврат) | — |
| Завершение OUT | Продавец: +остаток | Продавец: −остаток | — |
| Удаление OUT | Продавец: +зарезервированные | Продавец: обнуляется | — |
11. Комиссии
Как рассчитывается комиссия
Процент комиссии назначается индивидуально для каждой площадки при подключении. Комиссия списывается только при подтверждении оплаты, а не при создании заявки.
Формула:
Сумма крипты = сумма в фиате ÷ согласованный курс
Комиссия = сумма крипты × процент комиссии
Пример расчёта
Условия: сделка на 100 000 RUB, курс 100 RUB/USDT, комиссия покупателя 2%, комиссия продавца 1.5%.
| Шаг | Расчёт | Результат |
|---|---|---|
| Сумма крипты | 100 000 ÷ 100 | 1 000 USDT |
| Комиссия покупателя | 1 000 × 2% | 20 USDT |
| Комиссия продавца | 1 000 × 1.5% | 15 USDT |
| Итого комиссий | 35 USDT |
Когда списывается
- Не при создании заявки (только проверка достаточности средств).
- Не при сопоставлении.
- Только при подтверждении оплаты продавцом.
Если сделка отменена
Если IN-заявка отменена (таймаут, отклонение чека), комиссия не списывается — ни с покупателя, ни с продавца.
12. Реферальная программа
Как работает
Если вашу площадку привёл партнёр (реферер), часть комиссии с каждой вашей завершённой сделки автоматически начисляется партнёру.
- Процент реферальной выплаты назначается индивидуально.
- Выплата начисляется в реферальный баланс партнёра.
Когда начисляются выплаты
Реферальные выплаты происходят только при подтверждении оплаты — одновременно с комиссиями. Не при создании заявки и не при сопоставлении.
Пример
Площадка A (покупатель) приведена Партнёром X с реферальным процентом 30%.
Сделка: 100 000 RUB, курс 100, комиссия A = 2% (20 USDT).
| Получатель | Расчёт | Сумма |
|---|---|---|
| Партнёр X | 20 USDT × 30% | 6 USDT (в реферальный баланс) |
| SafeMatch | 20 USDT − 6 USDT | 14 USDT |
Партнёр получает свою долю автоматически — никаких дополнительных действий не требуется.
Как стать реферером
Свяжитесь с @Kos_Change в Telegram для обсуждения условий партнёрской программы.
13. WebSocket-уведомления
SafeMatch отправляет уведомления о событиях в реальном времени через WebSocket. Это позволяет вашей системе моментально реагировать на изменения без постоянного опроса API.
Типы уведомлений
| Тип | Описание | Когда приходит |
|---|---|---|
order_created | Заявка создана | После успешного создания заявки |
order_matched | Заявка сопоставлена | Найдена встречная сторона, выданы реквизиты |
order_updated | Данные заявки обновлены | Смена статуса или обновление параметров |
order_completed | Заявка завершена | Сделка успешно завершена |
order_cancelled | Заявка отменена | Отмена по таймауту, отклонение или другая причина |
order_supplemented | К OUT добавлен новый IN | Найдена замена после отмены одного из IN |
balance_updated | Баланс изменён | Зачисление, списание, заморозка или разморозка |
Содержание уведомления
Каждое уведомление содержит актуальные данные по заявке: текущий статус, реквизиты, курс, суммы и другие параметры.
Рекомендации
- Подключайтесь к WebSocket сразу после получения ключей — это самый быстрый способ узнавать о событиях.
- Обрабатывайте
order_matchedдля оперативной реакции на сопоставление. - Используйте
balance_updatedдля актуализации данных о балансе в вашей системе. - URL для подключения:
wss://ws.safematch.pro. Детали аутентификации — в API-документации.
14. Частые сценарии
Сценарий 1: Простая покупка крипты
Условия: Площадка A хочет получить USDT за 50 000 RUB. Комиссия A — 2%.
- Площадка A создаёт IN-заявку: 50 000 RUB, курс 95–105 RUB/USDT.
- SafeMatch находит OUT-заявку Площадки B на ту же сумму. Курс — 100 RUB/USDT.
- A получает реквизиты B. Клиент A переводит 50 000 RUB на карту B.
- A загружает чек (PDF).
- B подтверждает получение денег.
- Результат:
- A получает: 500 USDT (50 000 ÷ 100)
- A платит комиссию: 500 × 2% = 10 USDT
- Итого на балансе A: +490 USDT
Сценарий 2: Продажа крипты (OUT с несколькими IN)
Условия: Площадка B создаёт OUT на 200 000 RUB (max_payments = 3). Баланс B — 5 000 USDT. Комиссия B — 1.5%.
- B создаёт OUT-заявку. Курс 95–105 RUB/USDT.
- SafeMatch находит два IN: площадка C (120 000 RUB) и площадка D (80 000 RUB). Курс — 100.
- У B замораживается: 120 000 ÷ 100 + 80 000 ÷ 100 = 2 000 USDT.
- Доступный баланс B: 5 000 → 3 000. Зарезервировано: 2 000.
- C переводит 120 000 RUB, загружает чек. B подтверждает.
- Комиссия B: 1 200 × 1.5% = 18 USDT. C получает 1 200 USDT (минус своя комиссия).
- Зарезервировано у B: 2 000 → 800.
- D переводит 80 000 RUB, загружает чек. B подтверждает.
- Комиссия B: 800 × 1.5% = 12 USDT. D получает 800 USDT (минус своя комиссия).
- Зарезервировано: 800 → 0.
- OUT завершён. Итого B отдала 2 000 USDT, заплатила 30 USDT комиссий, получила 200 000 RUB на карту.
Сценарий 3: Таймаут и поиск замены
Условия: OUT Площадки B на 100 000 RUB. Найден один IN — Площадка A (100 000 RUB). Курс 100.
- Матч: у B замораживается 1 000 USDT.
- A не загружает чек в течение 20 минут — таймаут.
- IN A отменён. Крипта (1 000 USDT) возвращается B в доступный баланс.
- OUT B переходит в «поиск замены».
- SafeMatch находит новую IN-заявку — Площадка E (100 000 RUB). Матч.
- У B снова замораживается 1 000 USDT.
- E загружает чек, B подтверждает — сделка завершена.
Сценарий 4: Апелляция после завершения
- Сделка между A (IN) и B (OUT) завершена: A получила 500 USDT, B получила 50 000 RUB.
- A обнаруживает, что зачислена неверная сумма, и создаёт апелляцию (причина: «неверная сумма»).
- Администратор рассматривает материалы.
- Решение в пользу A — производится корректировка баланса.
Сценарий 5: Частичное выполнение OUT с отменой поиска
Условия: OUT Площадки B на 150 000 RUB (max_payments = 3). Курс 100.
- Найдены два IN: A (100 000 RUB) и C (50 000 RUB). Заморожено: 1 500 USDT.
- A загружает чек, B подтверждает — IN A завершён (1 000 USDT переведены A).
- C не загружает чек — таймаут. IN C отменён. Крипта (500 USDT) возвращена B.
- OUT переходит в «поиск замены» на 50 000 RUB.
- B решает не ждать замену и отменяет поиск.
- OUT завершается по тем IN, которые уже подтверждены (только A).
- Итог: B отдала 1 000 USDT (вместо 1 500), получила 100 000 RUB (вместо 150 000).
Контакты
По всем вопросам, подключению и партнёрской программе — @Kos_Change в Telegram.
Техническая документация по API: Руководство по интеграции