notpanel
ServiçosPreçosFAQSorteioAPI
notpanel

Seguidores, curtidas e visualizações para todas as plataformas.

O catálogo combina serviços operados diretamente com capacidade de parceiros verificados. Disponibilidade, tempo, refill e drip-feed são mostrados por serviço; as rotas e identidades dos parceiros permanecem confidenciais.

Produto

  • Serviços
  • Preços
  • Índice de preços
  • Programa de afiliados

Recursos

  • API
  • Blog
  • FAQ
  • Status

Empresa

  • Sobre
  • Por que o NotPanel
  • Fale Conosco

Jurídico

  • Termos de Serviço
  • Política de Privacidade
  • Política de Reembolso

Idiomas

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

© 2026 NotPanel. Todos os direitos reservados.

support@notpanel.com
notpanel
Documentação da API
+
Documentação da API

Introdução

  • Visão geral
  • Primeiros passos
  • Autenticação
  • Limites de taxa
  • Erros

Catálogo

  • Listar serviços
  • Catálogo avançado
  • Tipos de serviço

Pedidos

  • Fazer pedido
  • Status do pedido
  • Cotação de reembolso
  • Reabastecer
  • Cancelar

Conta

  • Estado da conta
  • Saldo

Webhooks

  • Gerenciar webhooks

Referência

  • Changelog
  • SDKs e bibliotecas

Precisa de ajuda?

support@notpanel.com →

Registrar webhook

Subscreve uma URL pública aos eventos suportados. Cada endpoint recebe o seu próprio segredo HMAC-SHA256, mostrado uma única vez na criação. Se o perder, remova o endpoint e adicione-o novamente.

POSThttps://notpanel.com/api/v3action=webhook.add
Chave de API obrigatóriaSujeito a limite de taxa (conta partilhada + IP + ação)Corpo: application/x-www-form-urlencoded
Máximo de 5 webhooks por chave de API. Use uma URL HTTPS acessível publicamente. Destinos inseguros, privados, de loopback ou que não sejam públicos são rejeitados.

Parâmetros

NomeTipoDescrição
keyObrigatóriostringSua chave de API.
actionObrigatóriostringDeve ser a string literal "webhook.add".
urlObrigatóriostring (URL)Endpoint HTTPS público que receberá POSTs. Deve ser acessível pela internet pública.
eventsstring (CSV)Subconjunto separado por vírgulas dos seis eventos suportados abaixo. Omita-o para subscrever os seis.

Exemplo de requisição

Substitua YOUR_API_KEY pela chave gerada na página de API do seu painel.

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));

Exemplo de resposta

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

Erros comuns

StatusCorpoCausa
400{"error":"Maximum 5 webhook endpoints per API key"}Os endpoints existentes esgotaram o limite. Remova um endpoint não utilizado com action=webhook.remove primeiro.
400{"error":"Webhook URL must be a publicly reachable HTTPS URL"}A URL não era HTTPS válida, não pôde ser analisada ou resolveu para um IP privado/loopback.
400{"error":"Webhook event is invalid","error_code":"INVALID_WEBHOOK_EVENT"}O nome do evento não está na lista de permitidos. Verifique a grafia — os nomes usam a forma "order.<status>".

Eventos disponíveis

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

Listar webhooks

action=webhook.list retorna todos os endpoints registrados sob a chave que está chamando, incluindo o estado de entrega (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"
  }
]

Remover um webhook

action=webhook.remove com o UUID do endpoint remove o endpoint e revoga o respetivo segredo de assinatura. Uma entrega já em curso ainda pode chegar; não serão enfileirados novos eventos para ele.

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

{
  "success": true
}

Payload de entrega

Cada entrega é um POST com Content-Type: application/json. O corpo tem events, timestamp e deliveryId. O padrão público atual agrupa por até 5 segundos e inclui no máximo 50 eventos, cada um com id lógico estável, event, timestamp e data. Fila ou indisponibilidade podem atrasar, portanto não é promessa de entrega em 5 segundos. Cabeçalhos:

  • X-Webhook-Signature — sha256=&lt;hex&gt;, calculada sobre &lt;timestamp&gt;.&lt;bytes exatos do corpo JSON&gt;.
  • X-Webhook-Timestamp — timestamp Unix da entrega, em segundos.
  • X-Webhook-Delivery-Id — UUID do lote, reutilizado ao repetir o mesmo lote. Não há cabeçalho de evento no nível da entrega; leia cada evento no corpo.
{
  "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"
}

Verificando assinaturas

Leia X-Webhook-Timestamp e os bytes JSON exatos recebidos. Calcule HMAC-SHA256 sobre &lt;timestamp&gt;.&lt;body bytes&gt; com o segredo, formate como sha256=&lt;hex&gt; e compare com X-Webhook-Signature em tempo constante. Uma nova tentativa mantém IDs de evento e deliveryId, mas recebe novo timestamp, corpo e assinatura.

Como política própria contra repetição, pode rejeitar uma entrega corretamente assinada se o timestamp diferir mais de 5 minutos do relógio do seu servidor.

Comportamento da entrega e novas tentativas

  • Melhor esforço com novas tentativas. Uma resposta 2xx conclui uma entrega. Cada tentativa expira após 30 segundos. Falhas podem ser repetidas a partir de 5 segundos com atraso exponencial limitado a 5 minutos, mas não existe uma garantia durável de entrega pelo menos uma vez.
  • Limite de pausa. O endpoint é pausado após 10 tentativas falhadas consecutivas. Não existe ação de ativação ou atualização; remova-o, registe um substituto com action=webhook.add e guarde o novo segredo apresentado.
  • A ordem não é garantida. Mantenha handlers idempotentes, processe todos os eventos do lote, deduplique uma transição lógica pelo id do evento ou um lote repetido pelo deliveryId e reconcilie estados importantes com action=status.