Быстрый старт
Подключение занимает пять минут:
- Зарегистрируйтесь в @MefosPayBot и дождитесь активации.
- Откройте «Профиль» — там ваш
api_keyиapi_secret. - Создайте первый платёж через POST-запрос.
- Перенаправьте клиента на полученный
payment_link.
Совет: для первых тестов включите тестовый режим — платежи создаются мгновенно, без реальных денег.
Авторизация
Все API-запросы требуют заголовок X-API-Key:
HTTPX-API-Key: your_api_key_here
Content-Type: application/json
api_secret в запросах не используется — он нужен только для проверки подписи вебхуков.
Никогда не публикуйте
api_secret в клиентском коде (JS, мобильные приложения). Храните его только на сервере.
Base URL
Все запросы идут на:
https://pay.mefos.mom/api/v1
POST/api/v1/payments
Создаёт новый платёж. Возвращает ссылку на страницу оплаты.
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
amount | float | Сумма к получению (UAH). Минимум 100, максимум — max_payment |
order_id | string | Ваш ID заказа. Только A-Z a-z 0-9 _ -, до 64 символов |
currency | string | Валюта. По умолчанию UAH |
description | string | Опционально. Описание для клиента |
test | bool | Опционально. Тестовый платёж |
Пример запроса
cURLcurl -X POST https://pay.mefos.mom/api/v1/payments \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 500,
"order_id": "order_123",
"description": "Подписка на месяц"
}'
Ответ · 201
JSON{
"payment_id": 42,
"order_id": "order_123",
"status": "waiting",
"amount": 500.0,
"client_amount": 561.80,
"currency": "UAH",
"payment_link": "https://pay.snova.me/...",
"test": false
}
Пример на Python
Pythonimport requests
r = requests.post(
"https://pay.mefos.mom/api/v1/payments",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"amount": 500, "order_id": "order_123"},
)
print(r.json()["payment_link"])
GET/api/v1/payments/{order_id}
Возвращает статус платежа по order_id.
cURLcurl https://pay.mefos.mom/api/v1/payments/order_123 \
-H "X-API-Key: YOUR_API_KEY"
Ответ · 200
{
"id": 42,
"order_id": "order_123",
"status": "success",
"amount": 500.0,
"client_amount": 561.80,
"paid_at": "2026-10-08T14:22:00+00:00",
"test": false
}
Статусы платежа
| Статус | Значение |
|---|---|
pending | Платёж создаётся |
waiting | Ждём оплату от клиента |
success | Оплачен, деньги зачислены |
failed | Платёж не прошёл |
canceled | Отменён клиентом |
expired | Истёк срок оплаты |
Вебхуки
Когда клиент оплачивает, мы отправляем POST-запрос на ваш webhook_url. Указать URL можно в настройках бота.
Событие payment.success
JSON{
"event": "payment.success",
"payment_id": 42,
"order_id": "order_123",
"amount": 561.80,
"commission": 61.80,
"commission_percent": 11.0,
"credited": 11.66,
"currency": "UAH",
"status": "success",
"paid_at": "2026-10-08T14:22:00+00:00"
}
Заголовки
X-Signature: hmac_sha256_hex_signature
Content-Type: application/json
Проверка подписи
Никогда не доверяйте вебхуку без проверки подписи. Без неё злоумышленник сможет подделать платёж.
Подпись = HMAC_SHA256(api_secret, raw_body), где raw_body — сырое тело запроса.
Python · FastAPI
Pythonimport hmac, hashlib
from fastapi import Request, HTTPException
@app.post("/webhook")
async def hook(request: Request):
sig = request.headers.get("X-Signature", "")
body = await request.body()
expected = hmac.new(
API_SECRET.encode(), body, hashlib.sha256
).hexdigest()
if not hmac.compare_digest(sig, expected):
raise HTTPException(401, "invalid signature")
data = await request.json()
return {"ok": True}
PHP
PHP$body = file_get_contents("php://input");
$sig = $_SERVER["HTTP_X_SIGNATURE"] ?? "";
$expected = hash_hmac("sha256", $body, API_SECRET);
if (!hash_equals($expected, $sig)) {
http_response_code(401);
exit("invalid signature");
}
echo "ok";
Node.js · Express
Nodeconst crypto = require("crypto");
app.post("/webhook", express.raw({ type: "*/*" }), (req, res) => {
const sig = req.headers["x-signature"] || "";
const expected = crypto
.createHmac("sha256", process.env.API_SECRET)
.update(req.body)
.digest("hex");
if (sig !== expected) return res.status(401).send("bad sig");
const data = JSON.parse(req.body.toString());
res.send("ok");
});
Коды ошибок
| Код | Значение | Что делать |
|---|---|---|
400 | Некорректный запрос | Проверить amount, order_id |
401 | Неверный ключ | Проверить X-API-Key |
403 | Не активирован | Написать в поддержку |
404 | Не найден | Проверить order_id |
429 | Rate limit | 60 запросов в минуту |
502 | Провайдер упал | Повторить через 30 сек |
Лимиты
- Rate limit: 60 запросов в минуту на мерчанта
- Минимум: 100 UAH
- Максимум: 50 000 UAH (по умолчанию)
- Дневной лимит: 100 000 UAH (по умолчанию)