В админке для каждого API-проекта можно задать Callback URL для webhook и отдельный редирект после успешной оплаты. API рассчитан на работу с поддомена вида api.домен.ru. Внешние проекты создают счета, отправляют клиента на оплату переводом и получают webhook после ручного подтверждения.
Каждый проект получает API key и API secret в админке PayTransfer.
X-Api-Key: pt_xxxxxxxxx
X-Signature: sha256=HMAC_SHA256(raw_json_body, api_secret)
POST https://api.example.ru/v1/invoices
POST https://api.example.ru/v1/payments
Legacy:
POST /api/v1/invoices
POST /api/v1/payments
Content-Type: application/json
X-Api-Key: pt_xxxxxxxxx
X-Signature: sha256=...
{
"amount": 1500,
"currency": "RUB",
"description": "Оплата тарифа PRO",
"customer_name": "Иван Иванов",
"external_order_id": "artistflow_plan_123",
"success_url": "https://artistflow.ru/payment/success",
"fail_url": "https://artistflow.ru/payment/fail",
"callback_url": "https://artistflow.ru/api/payment-callback"
}
{
"success": true,
"invoice_id": "PT-260503-ABC12345",
"payment_url": "https://pay-site.ru/pay?invoice=PT-260503-ABC12345",
"status": "pending",
"amount": 1500
}
GET https://api.example.ru/v1/invoices/PT-260503-ABC12345
GET https://api.example.ru/v1/payments/PT-260503-ABC12345
Legacy:
GET /api/v1/invoices/PT-260503-ABC12345
GET /api/v1/payments/PT-260503-ABC12345
X-Api-Key: pt_xxxxxxxxx
callback_url используется только для server-to-server webhook. После смены статуса PayTransfer отправляет POST на callback URL. Подпись приходит в X-PayTransfer-Signature.
{
"invoice_id": "PT-260503-ABC12345",
"external_order_id": "artistflow_plan_123",
"amount": 1500,
"status": "paid",
"paid_at": "2026-05-03 01:30:00"
}
$body = json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$signature = 'sha256=' . hash_hmac('sha256', $body, $apiSecret);
После того как админ нажимает Оплачено, страница ожидания клиента получает статус paid через /status-feed и автоматически перенаправляет клиента на success_url. Если счёт не передал success_url, редирект не выполняется. Для старых счетов без success_url сохранён fallback на callback_url.