Jak wysłać pierwszego SMS-a przez API w 5 minut – kompletny przewodnik
Większość „bramek SMS" wymaga dni na wdrożenie: wniosek, umowa, kontakt z handlowcem, własne SDK do zainstalowania. My idziemy w drugą stronę – pierwszy SMS przez API wysyłasz w 5 minut: zakładasz konto, generujesz token, robisz jeden request HTTP. W tym przewodniku przejdziemy całą drogę: od konta, przez działający kod w czterech językach, po webhooki i obsługę błędów, czyli rzeczy, które decydują o tym, czy integracja przetrwa zderzenie z produkcją.
Krok 1: konto i Bearer Token
Załóż konto na stronie rejestracji – dostajesz 100 SMS gratis, bez karty kredytowej i bez umowy. Aktywacja jest natychmiastowa, więc nie czekasz na akceptację handlową ani na „kontakt w ciągu 24h".
W panelu klienta wygenerujesz i pobierzesz Bearer Token (token można też pozyskać przez biuro obsługi klienta). To poświadczenie w stylu OAuth2: dołączasz je w nagłówku każdego żądania. Potraktuj token jak hasło – trzymaj go w zmiennych środowiskowych (np. ACTIO_TOKEN), nigdy w repozytorium ani w kodzie front-endu. Jeśli token wycieknie, unieważnij go w panelu i wygeneruj nowy; stary natychmiast przestaje działać.
Krok 2: pierwszy request (curl)
Najszybszy test to jedno wywołanie z terminala. Endpoint przyjmuje JSON i zwraca identyfikator wiadomości oraz status:
curl -X POST https://api.sendly.link/api/sms \
-H "Authorization: Bearer $ACTIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"to": "48732129000",
"body": "Twój kod logowania: 482910"
}'Dwa pola robią całą robotę: to (numer odbiorcy, 9–11 cyfr) oraz body (treść wiadomości). Pełną referencję – w tym opcjonalne pole from – znajdziesz w dokumentacji.
Krok 3: integracja w Twoim stacku
API jest czystym REST-em, więc działa z każdym językiem, który mówi po HTTP – bez instalowania zamkniętych bibliotek. W Node.js wystarczy wbudowany fetch:
const res = await fetch("https://api.sendly.link/api/sms", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.ACTIO_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
to: "48732129000",
body: "Twój kod: 482910"
})
});
const data = await res.json();
console.log(data.message_id);W Pythonie analogicznie użyjesz requests.post(...), w PHP cURL, w Go standardowego net/http. Gotowe wycinki w pięciu językach znajdziesz w dokumentacji – kopiujesz, podmieniasz token i działa.
Krok 4: webhooki zamiast odpytywania
Wysłanie SMS-a to dopiero połowa historii – chcesz wiedzieć, czy dotarł. Zamiast odpytywać API w pętli (kosztowne i wolne), skonfiguruj webhook: wskazujesz swój URL, a my wysyłamy na niego żądanie POST. Są dwa typy: MESSAGE (wiadomość przychodząca – pola from, to, body) oraz NOTIFICATION (potwierdzenie statusu – pole status: DELIVERED lub ERROR). Dzięki temu Twój system reaguje w czasie rzeczywistym, np. ponawia wysyłkę, gdy status to ERROR.
Obsługa błędów
Na produkcji warto z góry obsłużyć kody odpowiedzi API. Sukces to 200 – wiadomość przyjęta do wysyłki, w odpowiedzi message_id. Błędy: 403 (problem z autoryzacją), 422 (błąd walidacji – szczegóły w polach errors.token / errors.to / errors.body) oraz 429 (przekroczono limit żądań). Dobra integracja loguje message_id i status, a przy 429 stosuje wykładniczy backoff.
Najczęstsze zastosowania jednego API
To samo API obsłuży trzy zupełnie różne scenariusze bez zmiany integracji: powiadomienia transakcyjne (status zamówienia, przypomnienie o wizycie), kody 2FA / OTP oraz masowe kampanie do tysięcy odbiorców. Rozliczenie jest pay-as-you-go, bez abonamentu i progów wejścia – stawkę dla swojego wolumenu sprawdzisz w cenniku.
FAQ
Czy potrzebuję umowy, żeby przetestować API?+
Nie. Rejestrujesz się e-mailem, dostajesz 100 SMS gratis i testujesz od razu, bez umowy i bez karty kredytowej.
W jakich językach są przykłady kodu?+
curl, Node.js, Python, PHP i Go – wszystkie w dokumentacji, gotowe do skopiowania i podmiany tokenu.
Jak sprawdzę, czy SMS dotarł?+
Webhook wysyła żądanie NOTIFICATION ze statusem DELIVERED lub ERROR na Twój URL, w czasie rzeczywistym. Nie musisz odpytywać API.
Jakie kody błędów zwraca API?+
Sukces to 200 (z polem message_id). Błędy: 403 (problem z autoryzacją), 422 (błąd walidacji) oraz 429 (przekroczony limit żądań).