SnipeIt/Dokumentacja

Funkcje

Integracje

Kanały dostawy powiadomień. Podpinasz raz, w Integracjach; każdy monitor może słać na inny kanał.

Telegram

  1. 1Napisz do @BotFather i stwórz bota (/newbot), skopiuj token.
  2. 2Napisz do @userinfobot, żeby poznać swój chat_id.
  3. 3W Integracjach → Telegram wklej token i chat_id.
  4. 4Napisz cokolwiek do swojego bota (inaczej Telegram nie pozwoli mu wysłać pierwszej wiadomości).

Discord

Integracja Discord krok po kroku.

Na swoim serwerze: Ustawienia kanału → Integracje → Webhooki → Nowy webhook, skopiuj URL i wklej w Integracjach. Powiadomienia przychodzą jako wiadomości na wybranym kanale.

Push w przeglądarce

Systemowe powiadomienia działające także przy zamkniętej karcie. Każde urządzenie (laptop, telefon z Androidem) łączysz osobno przyciskiem „Włącz na tym urządzeniu”; lista urządzeń z osobnym testem i usuwaniem jest w tym samym popupie.

Safari wspiera push od wersji 16.4; na iPhonie wymagane jest dodanie strony do ekranu początkowego.

Webhook i e-mail

Podajesz własny adres HTTPS, a każde trafienie monitora dostajesz jako POST z JSON-em (Content-Type: application/json). Body ma zawsze ten sam kształt — pola, których dla danej oferty nie znamy, przychodzą jako null:

{
  "title": "iPhone 13 Pro 256GB",
  "url": "https://vinted.pl/items/123456",
  "marketplace": "vinted",
  "price": "2 000 PLN",
  "image": "https://images.vinted.net/...jpg",
  "hidden": false,
  "monitorId": "8f3c1e2a-…-uuid",
  "seller": {
    "login": "ola_vinted",
    "country": "Polska",
    "countryFlag": "🇵🇱",
    "city": "Warszawa",
    "feedbackCount": 123,
    "feedbackReputation": 0.98,
    "photoUrl": "https://images.vinted.net/avatar.jpg"
  }
}
Przykładowe body POST-a.
  1. 1title, url, marketplace — zawsze obecne.
  2. 2price — sformatowany string (np. „2 000 PLN”) albo null.
  3. 3image — URL miniatury albo null.
  4. 4hidden — true, gdy ofertę znaleźliśmy przez id-probing i może być niewidoczna w publicznym wyszukiwaniu portalu.
  5. 5monitorId — UUID monitora, który złapał ofertę (do routingu po Twojej stronie).
  6. 6seller — dane sprzedającego; dziś tylko Vinted, gdzie indziej null. feedbackReputation to ułamek 0–1 (0.98 = 98%).

Requesty przychodzą z adresów IP Cloudflare (nie z naszego serwera). Jeśli filtrujesz ruch po IP, dopuść zakresy Cloudflare.

Opcjonalny klucz podpisu: gdy go ustawisz, każdy request niesie nagłówek x-snipeit-signature: sha256=<hex>, gdzie hex = HMAC-SHA256(klucz, surowe body). Policz to samo po swojej stronie i porównaj — tak potwierdzisz, że request pochodzi od nas i body nie zostało zmienione.

import { createHmac, timingSafeEqual } from "node:crypto";

function verify(rawBody, header, secret) {
  const expected =
    "sha256=" + createHmac("sha256", secret).update(rawBody).digest("hex");
  const a = Buffer.from(header ?? "");
  const b = Buffer.from(expected);
  return a.length === b.length && timingSafeEqual(a, b);
}
Weryfikacja podpisu w Node.js.

Każdy podpięty kanał ma przycisk „Testuj powiadomienie” (limit 3/min) — użyj go od razu po konfiguracji.

E-mail: najprostszy kanał — podajesz adres i odbierasz powiadomienia mailem z linkiem do oferty.