Przejdź do treści
NaszLink
Programista przy biurku z kodem integracji na dwóch monitorach

API do skracania linków dla firm

API do skracania linków tworzy krótkie linki prosto z Twojego systemu: sklepu, CRM albo bramki SMS. Zmieniasz cel bez zmiany linku, pobierasz statystyki kliknięć i co minutę dostajesz webhook z nowymi kliknięciami. Prosty JSON, klucz z panelu, własna domena.

Zobacz endpointy

Pierwsze zapytanie

Klucz, nagłówek i gotowe

Klucz API tworzysz w panelu, w zakładce API. Każde zapytanie wysyłasz z nagłówkiem Authorization: Bearer nl_.... Adres bazowy to https://naszlink.pl/api/v1, a zapytania i odpowiedzi są w formacie JSON, w kodowaniu UTF-8.

Link utworzony przez API działa dokładnie tak jak link z panelu. Ma statystyki, kod QR, możesz go przypisać do kampanii i zmienić mu cel. Gdy podasz pole host, powstaje pod Twoją domeną, opisaną na stronie skracacz linków z własną domeną.

  • Klucze z nazwą i datą użycia
  • Wyłączenie klucza jednym kliknięciem
  • Alias do 50 znaków
  • Skan celu przy każdym zapisie
Utworzenie linku
curl -X POST https://naszlink.pl/api/v1/linki \
  -H "Authorization: Bearer nl_TWOJ_KLUCZ" \
  -H "Content-Type: application/json" \
  -d '{
    "cel": "https://twojafirma.pl/zamowienie/48213",
    "kod": "zamowienie-48213",
    "tytul": "SMS status zamówienia",
    "host": "link.twojafirma.pl"
  }'
Odpowiedź 201
{
  "id": 91827,
  "kod": "zamowienie-48213",
  "url": "https://link.twojafirma.pl/zamowienie-48213",
  "cel": "https://twojafirma.pl/zamowienie/48213",
  "tytul": "SMS status zamówienia",
  "host": "link.twojafirma.pl",
  "status": "aktywny",
  "klikniecia": 0,
  "utworzono": "2026-10-08T09:14:02+02:00"
}

Endpointy API

Pięć endpointów obsługuje cały cykl życia linku. Lista jest stronicowana parametrami page i per_page (domyślnie 50, najwyżej 200 linków na stronę).

MetodaŚcieżkaCo robi
GET/linkiLista linków firmy, od najnowszych, ze stronicowaniem
POST/linkiNowy link. Pole cel wymagane, kod (alias), tytul i host opcjonalne
GET/linki/{id}Jeden link z liczbą kliknięć
PATCH/linki/{id}Zmiana celu, tytułu albo statusu (aktywny, wylaczony)
GET/linki/{id}/statystykiKliknięcia według dni, krajów, miast, urządzeń i źródeł
Pole JSONTypOpis
idliczbaStały identyfikator linku
kodtekstKońcówka linku, do 50 znaków: litery, cyfry, myślnik, podkreślnik
celtekstAdres docelowy z https albo http
tytultekstNazwa widoczna w panelu i raportach
hosttekstDomena linku, naszlink.pl albo Twoja domena
statustekstaktywny, wylaczony albo wygasl
klikniecialiczbaKliknięcia od utworzenia, bez botów i podglądów linków
utworzonodataCzas utworzenia w formacie ISO 8601
Zmiana celu bez zmiany linku
curl -X PATCH https://naszlink.pl/api/v1/linki/91827 \
  -H "Authorization: Bearer nl_TWOJ_KLUCZ" \
  -H "Content-Type: application/json" \
  -d '{"cel": "https://twojafirma.pl/zamowienie/48213/odbior"}'
Statystyki z 30 dni
curl "https://naszlink.pl/api/v1/linki/91827/statystyki?od=2026-09-08&do=2026-10-08" \
  -H "Authorization: Bearer nl_TWOJ_KLUCZ"

Limity i błędy

Przewidywalne odpowiedzi

Plan Agencja ma limit 60 zapytań na minutę na firmę, plan Enterprise 600 zapytań na minutę. Po przekroczeniu limitu dostajesz kod 429 i nagłówek Retry-After z liczbą sekund do kolejnej próby. Każdy błąd ma ten sam kształt, więc obsłużysz go jednym fragmentem kodu.

KodZnaczenie
401Brak klucza albo klucz wyłączony
403Plan bez API albo domena spoza Twojej firmy
404Link nie istnieje albo należy do innej firmy
422Błąd walidacji, zajęty alias, cel na liście ostrzeżeń, wyczerpany limit linków
429Za dużo zapytań, sprawdź Retry-After
Odpowiedź 422, błąd walidacji
{
  "blad": "walidacja",
  "komunikat": "Popraw zaznaczone pola.",
  "pola": {
    "kod": ["Ten alias jest już zajęty w domenie link.twojafirma.pl."],
    "cel": ["Adres musi zaczynać się od https:// albo http://."]
  }
}
Odpowiedź 429
HTTP/1.1 429 Too Many Requests
Retry-After: 18

{"blad": "limit", "komunikat": "Limit 60 zapytań na minutę."}

Webhooki kliknięć z podpisem

W zakładce API dodajesz adres URL i dostajesz sekret. Co minutę wysyłamy na ten adres zapytanie POST z nowymi kliknięciami, zebranymi w jedno zdarzenie (do 500 kliknięć w jednym zapytaniu). Nagłówek X-NaszLink-Podpis zawiera podpis HMAC-SHA256 surowego ciała zapytania, liczony Twoim sekretem i zapisany szesnastkowo. Sprawdź podpis, zanim przetworzysz dane. Gdy Twój serwer nie odpowie kodem 2xx w ciągu 10 sekund, ponawiamy wysyłkę do 5 razy z rosnącym odstępem.

Zdarzenie klikniecie
{
  "id": "zd_7f3a91c2kq0m4x1p",
  "typ": "klikniecie",
  "czas": "2026-10-08T09:22:00+02:00",
  "liczba": 1,
  "klikniecia": [{
    "link_id": 91827,
    "kod": "zamowienie-48213",
    "host": "naszlink.pl",
    "czas": "2026-10-08T09:21:47+02:00",
    "kraj": "PL",
    "miasto": "Poznań",
    "urzadzenie": "mobile",
    "zrodlo": null,
    "qr": false,
    "utm": {"utm_source": "sms"}
  }]
}
Weryfikacja w PHP
$cialo = file_get_contents('php://input');
$sekret = getenv('NASZLINK_SEKRET');
$podpis = $_SERVER['HTTP_X_NASZLINK_PODPIS'] ?? '';

$oczekiwany = hash_hmac('sha256', $cialo, $sekret);

if (hash_equals($oczekiwany, $podpis) === false) {
    http_response_code(401);
    exit;
}

$zdarzenie = json_decode($cialo, true);
http_response_code(200);
Weryfikacja w Node
const crypto = require('crypto');

function podpisPoprawny(surowe, podpis, sekret) {
  const oczekiwany = crypto
    .createHmac('sha256', sekret)
    .update(surowe)
    .digest('hex');
  const a = Buffer.from(oczekiwany);
  const b = Buffer.from(podpis || '');
  return a.length === b.length
    && crypto.timingSafeEqual(a, b);
}
// surowe = ciało zapytania przed JSON.parse
Telefon z wiadomością SMS od sklepu z krótkim linkiem pod domeną marki

Zastosowania

Gdzie firmy wpinają API

  • SMS transakcyjne

    Sklep tworzy osobny krótki link do każdego zamówienia i wkłada go w SMS o statusie. Link mieści się w jednej wiadomości, a Ty widzisz, ile osób go otworzyło.

  • Powiadomienia i maile

    System przypomnień generuje link z tytułem i kampanią. Gdy adres strony się zmieni, poprawiasz cel jednym zapytaniem PATCH, bez ponownej wysyłki.

  • CRM i sprzedaż

    Handlowiec wysyła ofertę z linkiem utworzonym w CRM. Webhook kliknięć w ciągu minuty zapisuje w karcie klienta, że oferta została otwarta.

Dane z API i webhooków to te same statystyki kliknięć linków, które widzisz w panelu. API jest w planach Agencja i Enterprise, szczegóły w cenniku skracacza linków.

Pytania o API

Pytania techniczne wysyłaj na kontakt@naszlink.pl.

W którym planie jest API do skracania linków?

API i webhooki kliknięć są w planach Agencja i Enterprise. Agencja ma limit 60 zapytań na minutę, Enterprise 600 zapytań na minutę. Linki utworzone przez API liczą się do tego samego miesięcznego limitu nowych linków co linki z panelu.

Gdzie znajdę klucz API?

W panelu, w zakładce API. Klucz zaczyna się od nl_ i widzisz go w całości tylko raz, zaraz po utworzeniu. Możesz mieć kilka kluczy, na przykład osobny dla sklepu i dla CRM, i w każdej chwili wyłączyć jeden z nich bez ruszania pozostałych.

Czy przez API mogę tworzyć linki pod własną domeną?

Tak. W polu host podajesz domenę podpiętą w panelu, na przykład link.twojafirma.pl. Gdy pole pominiesz, link powstaje pod domeną naszlink.pl. Domena musi mieć zweryfikowany rekord CNAME i aktywny certyfikat.

Czy link utworzony przez API jest sprawdzany pod kątem nadużyć?

Tak, tak samo jak link z panelu. Każdy cel skanujemy przy utworzeniu i przy każdej zmianie. Gdy cel trafi na listę ostrzeżeń, API zwraca błąd 422 z opisem, a link nie powstaje.

Co się stanie, gdy mój serwer nie odbierze webhooka?

Ponawiamy wysyłkę zdarzenia, gdy Twój adres odpowie kodem innym niż 2xx albo nie odpowie w ciągu 10 sekund. Robimy to do 5 razy, z rosnącym odstępem od 1 minuty do kilku godzin. Każde zdarzenie ma unikalne id, więc łatwo pominiesz duplikaty.

Czy API zwraca dane osobowe klikających?

Nie. Statystyki pokazują kraj, miasto, urządzenie, system, przeglądarkę i źródło. Adresów IP nie zapisujemy w pełnej postaci, więc nie ma ich ani w API, ani w webhookach.

Pierwszy link z API jeszcze dziś

Załóż konto firmy z NIP, wybierz plan Agencja albo Enterprise i utwórz klucz w zakładce API. Bez rozmów handlowych i czekania.