API документация
REST API для регистрации SHA-256 хэшей в блокчейне Polygon. Версия 1.0
Base URL
https://factflew-backend-production.up.railway.app/api/v1
Авторизация: B2B эндпоинты требуют API-ключ в заголовке:
Публичные эндпоинты (verify) работают без авторизации. Для получения API-ключа — напишите на
Authorization: Bearer YOUR_API_KEYПубличные эндпоинты (verify) работают без авторизации. Для получения API-ключа — напишите на
api@factflew.io или воспользуйтесь тарифом API на странице тарифов.
POST
/register-pwa
Регистрация SHA-256 хэша файла из веб-приложения. Файл остаётся на устройстве пользователя — на сервер отправляется только хэш. Транзакция в блокчейн выполняется асинхронно.
Заголовки
| Параметр | Тип | Описание |
|---|---|---|
| Content-Type | string | application/json |
| X-FF-Code | string | FF-код пользователя (опционально) |
Тело запроса
| Параметр | Тип | Описание |
|---|---|---|
| hash | string | SHA-256 хэш файла, 64 hex символа *обязательно |
| fileName | string | Имя файла (опционально) |
| fileSize | number | Размер файла в байтах (опционально) |
| ff_code | string | FF-код пользователя (опционально) |
Пример запроса
POST /api/v1/register-pwa
Content-Type: application/json
{
"hash": "a3f7c9d2e8b14f6c1234567890abcdef1234567890abcdef1234567890abcdef",
"fileName": "contract.pdf",
"fileSize": 204800,
"ff_code": "FF-3SZZXD-MRS44CL5"
}
Ответ
201 Успешно поставлено в очередь
{
"success": true,
"data": {
"status": "pending",
"jobId": "uuid-job-id",
"hash": "a3f7c9d2...",
"token_reward": 10,
"night_rate": false,
"message": "Registration queued. Blockchain confirmation in progress."
}
}
400 Неверный формат хэша
409 Хэш уже зарегистрирован
GET
/verify/:hash
Публичная верификация хэша. Проверяет наличие регистрации в базе данных и возвращает данные транзакции. Авторизация не требуется.
Параметры URL
| Параметр | Тип | Описание |
|---|---|---|
| hash | string | SHA-256 хэш файла, 64 hex символа *обязательно |
Пример запроса
GET /api/v1/verify/a3f7c9d2e8b14f6c1234567890abcdef1234567890abcdef1234567890abcdef
Ответ — найдено
200
{
"success": true,
"exists": true,
"hash": "a3f7c9d2e8b14f6c...",
"txHash": "0x05c59fb5561317a97a5822f106d6f42382daf378a88bf71f37819c6689658786",
"timestamp": "2026-07-20T09:08:01+00:00",
"ff_code": "FF-3SZZXD-MRS44CL5",
"polygonscan": "https://polygonscan.com/tx/0x05c59fb..."
}
Ответ — не найдено
{
"success": true,
"exists": false,
"message": "Хэш не найден"
}
POST
/register
B2B API
B2B эндпоинт для интеграции в корпоративные системы. Принимает хэш + метаданные, поддерживает webhook-уведомления. Требует API-ключ.
Заголовки
| Параметр | Тип | Описание |
|---|---|---|
| Authorization | string | Bearer YOUR_API_KEY *обязательно |
| Content-Type | string | application/json |
Тело запроса
| Параметр | Тип | Описание |
|---|---|---|
| hash | string | SHA-256 хэш файла *обязательно |
| final_hash | string | Составной хэш (файл + метаданные) — приоритет над hash (опционально) |
| file_size | number | Размер файла в байтах (опционально) |
| file_type | string | MIME-тип файла (опционально) |
| webhook_url | string | URL для callback после подтверждения транзакции (опционально) |
Пример запроса
POST /api/v1/register
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"hash": "a3f7c9d2e8b14f6c1234567890abcdef1234567890abcdef1234567890abcdef",
"file_size": 204800,
"file_type": "application/pdf",
"webhook_url": "https://your-server.com/factflew-callback"
}
Ответ
202 Принято в обработку
{
"success": true,
"data": {
"status": "pending",
"jobId": "uuid-job-id",
"hash": "a3f7c9d2...",
"token_reward": 10,
"night_rate": false,
"message": "Хэш принят. Транзакция отправляется в Polygon.",
"check_status": "https://factflew.io/verify?hash=a3f7c9d2..."
}
}
Коды ответов
| Код | Значение |
|---|---|
| 200 | Успешно |
| 201 / 202 | Принято в обработку (асинхронная транзакция) |
| 400 | Неверный запрос — проверьте формат хэша |
| 401 | Отсутствует или неверный API-ключ |
| 409 | Хэш уже зарегистрирован — возвращает данные существующей записи |
| 429 | Превышен лимит запросов (rate limit) |
| 500 | Внутренняя ошибка сервера |