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, idempotencję 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 przejdź do Ustawienia → API → Generuj i utwórz Bearer Token. 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://msg-api.actio.pl/api/sms \
-H "Authorization: Bearer $ACTIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"from": "FirmaXYZ",
"to": "48732129000",
"body": "Twój kod logowania: 482910"
}'Trzy pola robią całą robotę: from (nazwa nadawcy lub numer w formacie E.164), to (numer odbiorcy w E.164 bez znaku „+") oraz body (treść w UTF-8). Pełna referencja, w tym pola opcjonalne jak scheduled_at i idempotency_key, jest 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://msg-api.actio.pl/api/sms", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.ACTIO_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
from: "FirmaXYZ",
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 event przy każdej zmianie statusu – sms.delivered, sms.failed, sms.expired, sms.bounced. Payload zawiera message_id, znacznik czasu i operatora docelowego. Dzięki temu Twój system reaguje w czasie rzeczywistym, np. ponawia wysyłkę na inny numer, gdy SMS się odbił.
Idempotencja i obsługa błędów
Na produkcji liczy się odporność na powtórzenia. Jeśli Twój serwer wyśle ten sam request dwa razy (timeout, retry kolejki), bez zabezpieczenia odbiorca dostanie dwa SMS-y. Rozwiązanie to nagłówek/pole idempotency_key (UUID v4): ten sam klucz gwarantuje, że wiadomość wyjdzie tylko raz.
Warto też z góry obsłużyć najczęstsze kody odpowiedzi: 401 (zły token), 402 (brak środków), 422 (błędny numer lub treść), 429 (limit – sprawdź nagłówek Retry-After). 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 event o każdej zmianie statusu (delivered, failed, expired, bounced) na Twój URL, w czasie rzeczywistym i bez dopłat. Nie musisz odpytywać API.
Jak uniknąć podwójnej wysyłki przy retry?+
Użyj pola idempotency_key (UUID v4). Ten sam klucz gwarantuje, że wiadomość wyjdzie tylko raz, nawet jeśli request poleci kilka razy.