Przegląd API
4 min czytania
REST API MailingAPI pozwala wysyłać emaile transakcyjne, zarządzać domenami, konfigurować webhooki i programowo uzyskiwać dostęp do analityki.
Bazowy URL
Wszystkie żądania API używają tego bazowego URL:
https://api.mailingapi.com/v1
Uwierzytelnianie
Uwierzytelniaj używając tokenów Bearer w nagłówku Authorization:
curl https://api.mailingapi.com/v1/messages \
-H "Authorization: Bearer twoj_klucz_api"
Klucze API są przypisane do pojedynczej domeny. Pobierz swój klucz z Ustawienia → Klucze API.
Zobacz Uwierzytelnianie po szczegóły.
Format żądań
Content-Type
Wysyłaj JSON z Content-Type: application/json:
curl -X POST https://api.mailingapi.com/v1/messages/send \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"from": "hello@twojadomena.pl", "to": "user@example.com", ...}'
Body żądania
Wszystkie żądania POST/PUT/PATCH przyjmują body JSON:
{
"from": "hello@twojadomena.pl",
"to": "user@example.com",
"subject": "Cześć",
"html": "<p>Witaj świecie</p>"
}
Format odpowiedzi
Wszystkie odpowiedzi zwracają JSON ze spójną strukturą.
Odpowiedź sukcesu
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "queued",
"from": "hello@twojadomena.pl",
"to": "user@example.com",
"subject": "Cześć",
"created_at": "2024-01-15T10:30:00Z"
}
}
Odpowiedź listowa
{
"data": [
{"id": "550e8400-...", "status": "delivered"}
],
"meta": {
"count": 25,
"total": 150,
"limit": 25,
"offset": 0,
"has_more": true
}
}
Odpowiedź błędu
{
"error": {
"message": "Invalid email address format"
}
}
Metody HTTP
| Metoda | Użycie |
|---|---|
GET |
Pobieranie zasobów |
POST |
Tworzenie zasobów |
PATCH |
Częściowa aktualizacja |
PUT |
Pełna zamiana |
DELETE |
Usuwanie zasobów |
Kody statusów
| Kod | Znaczenie |
|---|---|
200 |
Sukces |
201 |
Utworzono |
204 |
Brak treści (udane usunięcie) |
400 |
Złe żądanie (nieprawidłowe dane) |
401 |
Nieautoryzowany (nieprawidłowy/brak klucza API) |
403 |
Zabroniony (niewystarczające uprawnienia) |
404 |
Nie znaleziono |
422 |
Nieobrobialna encja (walidacja nie powiodła się) |
429 |
Za dużo żądań (rate limited) |
500 |
Wewnętrzny błąd serwera |
Paginacja
Endpointy listowe wspierają paginację:
curl "https://api.mailingapi.com/v1/messages?limit=25&offset=50" \
-H "Authorization: Bearer $API_KEY"
Parametry:
-
limit— Liczba elementów do pobrania (domyślnie: 25, max: 100) -
offset— Przesunięcie od początku (domyślnie: 0)
Odpowiedź zawiera metadane paginacji:
{
"data": [...],
"meta": {
"count": 25,
"total": 150,
"limit": 25,
"offset": 50,
"has_more": true
}
}
Filtrowanie
Wiele endpointów wspiera filtrowanie:
curl "https://api.mailingapi.com/v1/messages?status=delivered&from=2024-01-01" \
-H "Authorization: Bearer $API_KEY"
Typowe filtry:
-
since/until— Zakres dat (ISO 8601) -
status— Status zasobu -
to— Filtruj po odbiorcy
Rate limiting
Żądania API są limitowane per klucz API:
| Endpoint | Limit |
|---|---|
| Wysyłka emaila | 100/minutę, 10/sekundę burst |
| Endpointy odczytu | 1000/minutę |
| Endpointy zarządzania | 100/minutę |
Udane odpowiedzi zawierają nagłówki:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1705315860
X-RateLimit-Reset to znacznik Unix w sekundach. Jeśli domena ma dzienny limit wysyłki, odpowiedzi zawierają też X-Daily-Limit i X-Daily-Remaining.
Przy przekroczeniu limitu otrzymujesz 429 Too Many Requests:
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded",
"retry_after": 5
}
}
Każda odpowiedź 429 zawsze zawiera standardowy nagłówek Retry-After (liczba całkowita sekund) oraz tę samą wartość jako retry_after w body. Zalecamy czytanie nagłówka Retry-After. 429 dla limitu na sekundę lub minutę zawiera też nagłówki X-RateLimit-*; 429 dla limitu dziennego (daily_limit_exceeded) zawiera X-Daily-Limit i X-Daily-Remaining: 0. 429 z kodem recipient_rate_limited oznacza, że ten sam odbiorca dostał od Twojej organizacji za dużo emaili (maks. 10 na godzinę, 50 na dobę). Wszystkie kody błędów opisuje Obsługa błędów.
Dokumentacja API i OpenAPI
Interaktywna dokumentacja API (Swagger UI) jest pod /api/docs i wymaga JavaScript. Specyfikacja OpenAPI 3 w formie maszynowej (JSON) jest pod /api/openapi.
Idempotencja
POST /v1/messages/send, POST /v1/messages/batch i POST /v1/messages/analyze przyjmują nagłówek Idempotency-Key. Wysyłaj ten sam klucz przy ponawianiu żądania — wtedy timeout czy błąd sieci nigdy nie skończy się zdublowanym e-mailem:
curl -X POST https://api.mailingapi.com/v1/messages/send \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4f9c2a8e-6b1d-4c3e-9a7f-2d5e8b1c0a93" \
-d '{...}'
- Klucz ma 1–255 znaków. Używaj UUID lub innego identyfikatora unikalnego dla danego logicznego żądania (np. ID zamówienia).
- Klucze obowiązują w obrębie klucza API i są ważne przez 24 godziny.
- Nagłówek jest opcjonalny. Bez niego każde żądanie jest przetwarzane niezależnie.
-
Batch to jedna całość: ponowienie
/v1/messages/batchz tym samym kluczem odtwarza odpowiedź całego batcha — żadna wiadomość z niego nie zostanie wysłana drugi raz.
| Sytuacja | Odpowiedź | Ponawiać? |
|---|---|---|
| Pierwsze żądanie z kluczem | Przetwarzane normalnie; odpowiedź jest zapisywana | — |
| Ten sam klucz, to samo body |
Oryginalny status i body z nagłówkiem Idempotent-Replayed: true. Nic nie jest wysyłane ponownie |
— |
| Ten sam klucz, inne body |
422 idempotency_key_reused |
Nie — użyj nowego klucza |
| Ten sam klucz, pierwsze żądanie wciąż w toku |
409 idempotency_request_in_progress, Retry-After: 1 |
Tak, po Retry-After sekundach |
| Nieprawidłowy klucz (pusty lub dłuższy niż 255 znaków) |
400 invalid_idempotency_key |
Nie |
Zapisywane i odtwarzane są zarówno odpowiedzi udane, jak i błędy klienta (2xx, 4xx). Błędy serwera (5xx) i 429 nie są zapisywane, więc ponowienie z tym samym kluczem wykona żądanie od nowa.
Body porównywane jest po treści, nie po formatowaniu — zmiana kolejności pól JSON nie oznacza innego body.
Wersjonowanie
API jest wersjonowane przez ścieżkę URL:
https://api.mailingapi.com/v1/...
Utrzymujemy wsteczną kompatybilność wewnątrz głównych wersji. Zmiany łamiące wymagają nowej wersji.
SDK
Oficjalne SDK dostępne:
Pełna dokumentacja SDK: SDK i biblioteki.
Zasoby API
| Zasób | Opis |
|---|---|
| Messages | Wysyłka i śledzenie emaili |
| Domains | Zarządzanie domenami wysyłkowymi |
| Webhooks | Konfiguracja powiadomień o zdarzeniach |
| Templates | Szablony email |
| Validation | Walidacja adresów email |