notpanel
УслугиТарифыFAQРозыгрышAPI
notpanel

Подписчики, лайки и просмотры для любой платформы.

Каталог сочетает услуги, которые мы выполняем напрямую, и мощности проверенных партнёров. Доступность, время, refill и drip-feed указаны для каждой услуги; маршрутизация и личности партнёров конфиденциальны.

Продукт

  • Услуги
  • Тарифы
  • Индекс цен
  • Партнёрская программа

Ресурсы

  • API
  • Блог
  • FAQ
  • Статус

Компания

  • О нас
  • Почему NotPanel
  • Связаться с нами

Правовая информация

  • Условия обслуживания
  • Политика конфиденциальности
  • Политика возвратов

Языки

  • English
  • Español
  • Português
  • Русский
  • Türkçe
  • العربية
  • हिन्दी
  • Bahasa Indonesia
  • Français
  • 中文

© 2026 NotPanel. Все права защищены.

support@notpanel.com
notpanel
Документация API
+
Документация API

Введение

  • Обзор
  • Начало работы
  • Аутентификация
  • Ограничения частоты
  • Ошибки

Каталог

  • Список услуг
  • Расширенный каталог
  • Типы услуг

Заказы

  • Разместить заказ
  • Статус заказа
  • Расчёт возврата
  • Refill
  • Отмена

Учётная запись

  • Состояние аккаунта
  • Баланс

Вебхуки

  • Управление вебхуками

Справочник

  • История изменений
  • SDK и библиотеки

Нужна помощь?

support@notpanel.com →

Зарегистрировать вебхук

Подписывает публичный URL на поддерживаемые события. Каждый эндпоинт получает свой секрет HMAC-SHA256, который показывается один раз при создании. Если он утрачен, удалите эндпоинт и добавьте его снова.

POSThttps://notpanel.com/api/v3action=webhook.add
Требуется API-ключОграничение частоты (общий аккаунт + IP + действие)Тело: application/x-www-form-urlencoded
Максимум 5 вебхуков на один API-ключ. Используйте общедоступный HTTPS URL. Небезопасные, частные, loopback и иные непубличные адреса отклоняются.

Параметры

НазваниеТипОписание
keyОбязательныйstringВаш API-ключ.
actionОбязательныйstringДолжно быть буквальной строкой «webhook.add».
urlОбязательныйstring (URL)Публичный HTTPS-эндпоинт, который будет получать POST-запросы. Должен быть доступен из публичного интернета.
eventsstring (CSV)Подмножество шести поддерживаемых событий ниже, разделённое запятыми. Не передавайте поле, чтобы подписаться на все шесть.

Пример запроса

Замените YOUR_API_KEY на ключ, сгенерированный на странице API в вашей панели.

curl -X POST https://notpanel.com/api/v3 \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "key=YOUR_API_KEY&action=webhook.add&url=https://your-server.example.com/notpanel-webhook&events=order.completed,order.refunded"
const res = await fetch("https://notpanel.com/api/v3", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({
    key: "YOUR_API_KEY",
    action: "webhook.add",
    url: "https://your-server.example.com/notpanel-webhook",
    events: "order.completed,order.refunded",
  }),
});

const data = await res.json();
console.log(data);
import requests

res = requests.post(
  "https://notpanel.com/api/v3",
  data={
    "key": "YOUR_API_KEY",
    "action": "webhook.add",
    "url": "https://your-server.example.com/notpanel-webhook",
    "events": "order.completed,order.refunded",
},
)
print(res.json())
<?php
$body = http_build_query([
    'key' => 'YOUR_API_KEY',
    'action' => 'webhook.add',
    'url' => 'https://your-server.example.com/notpanel-webhook',
    'events' => 'order.completed,order.refunded',
]);

$response = file_get_contents('https://notpanel.com/api/v3', false, stream_context_create([
    'http' => [
        'method'  => 'POST',
        'header'  => "Content-Type: application/x-www-form-urlencoded\r\n",
        'content' => $body,
        'ignore_errors' => true,
    ],
]));

print_r(json_decode($response, true));

Пример ответа

{
  "webhook_id": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
  "url": "https://your-server.example.com/notpanel-webhook",
  "secret": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
  "events": [
    "order.completed",
    "order.refunded"
  ]
}

Распространённые ошибки

СтатусТелоПричина
400{"error":"Maximum 5 webhook endpoints per API key"}Существующие эндпоинты исчерпали лимит. Сначала удалите неиспользуемый эндпоинт через action=webhook.remove.
400{"error":"Webhook URL must be a publicly reachable HTTPS URL"}URL не был допустимым HTTPS-адресом, не распарсился или разрешился в частный/loopback IP.
400{"error":"Webhook event is invalid","error_code":"INVALID_WEBHOOK_EVENT"}Имя события отсутствует в списке разрешённых. Проверьте написание — имена имеют форму «order.<status>».

Доступные события

  • order.completed
  • order.partial
  • order.processing
  • order.in_progress
  • order.refunded
  • order.refill_completed

Список вебхуков

action=webhook.list возвращает каждый эндпоинт, зарегистрированный под вызывающим ключом, включая состояние его доставки (status, failureCount, lastDeliveredAt).

key=YOUR_API_KEY&action=webhook.list
[
  {
    "id": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
    "url": "https://your-server.example.com/notpanel-webhook",
    "events": ["order.completed", "order.refunded"],
    "status": "active",
    "failureCount": 0,
    "lastDeliveredAt": "2026-04-30T15:42:11.000Z",
    "createdAt": "2026-04-15T09:01:00.000Z"
  }
]

Удалить вебхук

action=webhook.remove с UUID эндпоинта удаляет его и отзывает секрет подписи. Уже выполняемая доставка ещё может прийти; новые события для него больше не ставятся в очередь.

key=YOUR_API_KEY&action=webhook.remove&id=3f2504e0-4f89-41d3-9a0c-0305e82c3301

{
  "success": true
}

Полезная нагрузка доставки

Каждая доставка — POST с Content-Type: application/json. В теле есть events, timestamp и deliveryId. Текущие публичные настройки группируют до 5 секунд и включают не более 50 событий; у каждого есть стабильный логический id, а также event, timestamp и data. Очередь или сбой могут добавить задержку, поэтому доставка за 5 секунд не обещается. Заголовки:

  • X-Webhook-Signature — sha256=&lt;hex&gt;, вычисленный по &lt;timestamp&gt;.&lt;точные байты тела JSON&gt;.
  • X-Webhook-Timestamp — Unix-время доставки в секундах.
  • X-Webhook-Delivery-Id — UUID пакета, повторно используемый при повторе того же пакета. Заголовка события на уровне доставки нет; читайте каждое событие в теле.
{
  "events": [
    {
      "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "event": "order.completed",
      "timestamp": 1777534931,
      "data": {
        "order": 7001,
        "orderId": 7001,
        "serviceId": 1,
        "status": "Completed",
        "status_key": "completed",
        "charge": "0.50",
        "startCount": 1234,
        "remains": 0
      }
    }
  ],
  "timestamp": 1777534931,
  "deliveryId": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}

Проверка подписей

Прочитайте X-Webhook-Timestamp и точные байты JSON. Вычислите HMAC-SHA256 для &lt;timestamp&gt;.&lt;body bytes&gt; с секретом, оформите как sha256=&lt;hex&gt; и сравните с X-Webhook-Signature за постоянное время. При повторе сохраняются ID событий и deliveryId, но меняются timestamp, тело и подпись.

В рамках собственной защиты от повторов можно отклонить правильно подписанную доставку, если её timestamp отличается от часов сервера более чем на 5 минут.

Поведение доставки и повторные попытки

  • Доставка по возможности с повторными попытками. Ответ 2xx завершает доставку. Тайм-аут каждой попытки — 30 секунд. После сбоя повтор может начаться через 5 секунд с экспоненциальной задержкой, ограниченной 5 минутами, но долговременной гарантии «как минимум один раз» нет.
  • Порог паузы. Эндпоинт приостанавливается после 10 последовательных неудачных попыток. Действий включения и обновления нет: удалите его, зарегистрируйте замену через action=webhook.add и сохраните показанный новый секрет.
  • Порядок не гарантируется. Делайте обработчики идемпотентными, обрабатывайте каждое событие пакета, дедуплицируйте логический переход по id события или повторный пакет по deliveryId и сверяйте важное состояние через action=status.