Introduction
Finance OS API - это REST-интерфейс к финансовой платформе Finance OS для внешних партнёров. Через него мерчант ведёт своих конечных клиентов, выдаёт им крипто-кошельки, принимает и выплачивает средства, проверяет адреса на комплаенс и принимает рублёвые платежи - всё под одним секретным ключом.
GET /api/v1/merchant/balance.
Принципы API
- REST — стандартная семантика:
GETдля чтения,POSTдля создания,PATCHдля обновления,DELETEдля удаления. - JSON — тела запросов и ответов всегда в JSON. Обязательные заголовки:
Content-Type: application/json,Accept: application/json. - HTTPS-only — обычный HTTP отклоняется на уровне nginx.
- Bearer-auth - все приватные endpoints требуют
Authorization: Bearer {sk_live_…}: секретный API-ключ учётной записи, выданный в кабинете. Ключsk_test_…адресует песочницу. Детали - в разделе Authentication. - UTF-8 — все строки, включая поля адресов и комментариев на кириллице.
Базовый URL
Production:
https://fin-os.io/api/v1
Версия зафиксирована в пути: /api/v1/…. Пути в этой документации указываются целиком, вместе с префиксом. Ломающие изменения выйдут новым major-префиксом, старый продолжит работать до объявленного срока снятия.
sk_live_… двигает реальные деньги, sk_test_… - нет. Проверьте, каким ключом ходит ваш сервис, прежде чем запускать выводы.
Формат данных
Соглашения по типам
string
UTF-8 string
optional
integer
int64
optional
decimal
string
optional
"1234.56789012". Никогда не float — потеря точности.uuid
string
optional
5f8d…. Используется как первичный ключ для большинства публичных ресурсов.timestamp
string (ISO-8601, UTC)
optional
2026-05-27T14:23:00Z. Локальная зона клиента — забота клиента.currency
string (ISO-4217 или ticker)
optional
RUB, USD, USDT, BTC, KAS, LTC.network
enum
optional
TRC20, ERC20, BEP20, BTC, LTC, KAS, SOL, TON.| Name | Type | Required | Description |
|---|---|---|---|
string
|
UTF-8 string
|
optional | Кириллица и эмодзи разрешены, RTL не поддерживается. |
integer
|
int64
|
optional | Идентификаторы и счётчики. |
decimal
|
string
|
optional |
Только строкой с точкой как разделителем: "1234.56789012". Никогда не float — потеря точности.
|
uuid
|
string
|
optional |
UUID v4: 5f8d…. Используется как первичный ключ для большинства публичных ресурсов.
|
timestamp
|
string (ISO-8601, UTC)
|
optional |
2026-05-27T14:23:00Z. Локальная зона клиента — забота клиента.
|
currency
|
string (ISO-4217 или ticker)
|
optional |
RUB, USD, USDT, BTC, KAS, LTC.
|
network
|
enum
|
optional |
TRC20, ERC20, BEP20, BTC, LTC, KAS, SOL, TON.
|
Форма ответа
Все успешные ответы имеют единую обёртку:
{
"data": { ... },
"meta": { ... }
}
Для списков с пагинацией добавляются поля links и meta.current_page / last_page / per_page / total — детально в Pagination.
Ошибки
Ошибки возвращают HTTP-статус из семейства 4xx/5xx и тело вида:
{
"message": "The given data was invalid.",
"errors": {
"email": ["The email field is required."]
}
}
Полный справочник кодов и форматов — в Errors.
Лимиты
По умолчанию: 60 запросов в минуту на ключ, 10 на IP для неавторизованных публичных endpoints. Превышение → 429 Too Many Requests. Заголовки X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After - в каждом ответе. Подробнее в Rate Limiting.
Поддержка
Технические вопросы: admin@fin-os.io. Об авариях и плановых работах мы оповещаем через статус-страницу (планируется в v1.1).
Примеры кода
# Первый запрос: остаток мастер-счёта
curl -X GET https://fin-os.io/api/v1/merchant/balance \
-H "Authorization: Bearer ${TOKEN}" \
-H "Accept: application/json"
// JavaScript fetch
const TOKEN = process.env.FINOS_SECRET_KEY; // sk_live_xxx из .env
const res = await fetch('https://fin-os.io/api/v1/merchant/balance', {
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Accept': 'application/json',
},
});
const balance = await res.json();
console.log(balance.data);
// PHP (Laravel HTTP)
$response = Http::withToken($token)
->acceptJson()
->get('https://fin-os.io/api/v1/merchant/balance');
$balance = $response->json('data');
import requests
TOKEN = os.environ['FINOS_SECRET_KEY'] # sk_live_xxx
r = requests.get(
'https://fin-os.io/api/v1/merchant/balance',
headers={
'Authorization': f'Bearer {TOKEN}',
'Accept': 'application/json',
},
)
balance = r.json()['data']