API oddzwon.pl
Proste REST API: przyjmuj zgłoszenia z dowolnego źródła, zarządzaj konsultantami i kolejką, czytaj statystyki, odbieraj zdarzenia webhookami. JSON, HTTPS, klucz w nagłówku. REST API i webhooki działają w planie Pro i w okresie próbnym.
https://api.oddzwon.pl
Format: JSON
Integracje: MCP · Zapier, n8n, Make
Pobierz specyfikację OpenAPI (YAML)
Szybki start
Weź klucze z panelu
Publiczny (pk_) do widgetu i formularzy, klucz dostępu do reszty API. Znajdziesz go w panelu: Integracje, karta „Klucz dostępu (API)”.
Wyślij pierwsze zgłoszenie
Jeden POST na /v1/callback. Odpowiedź 202 znaczy, że routing ruszył.
Podepnij webhooki
Dodaj swój adres w panelu i odbieraj zdarzenia podpisane HMAC.
Autoryzacja
Dwa poziomy dostępu:
Klucz publiczny
public_key (pk_…) w ciele żądania. Tylko do tworzenia zgłoszeń callback z Twojej strony/widgetu. Bezpieczny do umieszczenia w kodzie front-endu.
Klucz dostępu (API)
Nagłówek Authorization: Bearer <klucz dostępu>. Pełen dostęp do danych Twojego konta (statystyki, konsultanci, kolejka, webhooki). Trzymaj po stronie serwera.
Utwórz zgłoszenie (callback)
POST /v1/callback, publiczny, wymaga public_key. Odpowiedź 202.
Pola opcjonalne: name, mode (immediate/scheduled), preferred_slot, utm, gclid, idempotency_key. Dedup po naturalnym kluczu (tenant + numer + okno czasowe).
Zarządzanie (Bearer)
Wszystkie pod /v1/manage/* z nagłówkiem Authorization: Bearer <klucz dostępu>.
| Metoda | Ścieżka | Opis |
|---|---|---|
| GET | /v1/manage/stats | Statystyki dnia (zamówione, odebrane, skuteczność, śr. czas reakcji) |
| GET | /v1/manage/usage | Zużycie w bieżącym miesiącu: zgłoszenia, odebrane i połączone |
| GET | /v1/manage/plan | Plan, limit konsultantów, status subskrypcji |
| GET/POST | /v1/manage/consultants | Lista / dodanie konsultanta (limit wg planu) |
| GET/PUT | /v1/manage/hours | Godziny pracy zespołu |
| GET | /v1/manage/queue | Kolejka nieodebranych (+ requeue / resolve) |
| GET | /v1/manage/history | Historia oddzwonień ze statusami |
| GET/POST | /v1/manage/webhooks | Webhooki wychodzące Twojego konta |
| POST | /v1/manage/erase | RODO: usunięcie danych numeru |
Webhooki wychodzące
Zdarzenia wysyłamy POST-em na Twój URL (dodaj w panelu → Integracje), podpisane HMAC-SHA256.
Nagłówki
X-Oddzwon-Event: typ zdarzeniaX-Oddzwon-Delivery: id dostawyX-Oddzwon-Signature: sha256=<hmac> surowego body
Zdarzenia
callback.requested, callback.scheduled, call.ringing, call.answered, call.connected, call.missed, call.completed, lead.created, disposition.set
Zestaw pól w data zależy od typu zdarzenia: inne pola niesie callback.requested, a inne call.completed. Wynik rozmowy (disposition) to jedna z wartości: connected, no_answer, wrong_number, scheduled, not_interested, callback_later.
Nieudane dostawy ponawiamy z rosnącym odstępem (backoff), a po kilku próbach zdarzenie trafia do kolejki błędów (dead-letter). Weryfikuj podpis surowego body sekretem z panelu. Gotowe szablony Make i przewodnik: Integracje.
Weryfikacja podpisu w Twoim języku
Policz HMAC-SHA256 z surowego body (bajty przed parsowaniem JSON!) sekretem z panelu i porównaj z nagłówkiem X-Oddzwon-Signature w stałym czasie. Wszystkie przykłady dają identyczny podpis (sprawdzone przeciw naszej implementacji).
Node.js
PHP
Python
Ruby
Java
Czy klucz publiczny w kodzie strony jest bezpieczny?
Tak. Klucz pk_ jest z założenia jawny, tak jak identyfikator Google Analytics czy klucz publiczny Stripe. Służy wyłącznie do identyfikacji Twojej firmy przy zostawianiu numeru przez klienta. Nie da się nim odczytać żadnych danych: kolejka, historia i dane osobowe wymagają osobnego klucza dostępu (API) albo tokenu sparowanego urządzenia.
Przed nadużyciami (zgłoszenia spoza Twojej strony) chroni lista dozwolonych domen: w panelu, w zakładce Widget (ustawienie Dozwolone domeny), wpisz domeny, na których działa widget, a zgłoszenia z innych stron będą odrzucane. Do tego działają limity zapytań, pole-pułapka na boty i deduplikacja numerów.
Kody odpowiedzi
API zwraca standardowe kody HTTP. Najważniejsze:
| Kod | Znaczenie |
|---|---|
| 202 | Zgłoszenie przyjęte i skierowane do routingu. Duplikat w oknie dedup zwraca 202 z dedup:true. |
| 200 | Żądanie zarządcze wykonane poprawnie. |
| 422 | Błąd walidacji: invalid_payload, consent_required, invalid_phone, invalid_slot. |
| 401 | Brak lub zły token Bearer (klucz dostępu lub sesja panelu). |
| 403 | invalid_tenant (zły klucz publiczny), brak uprawnień roli albo pro_required (funkcja planu Pro, pole feature mówi która). |
| 429 | Za dużo żądań, zadziałał limit anty-spam. |
Agenci AI też to potrafią
Ten sam backend wystawiamy jako serwer MCP. Twój asystent AI (np. Cursor albo Claude Code) czyta leady i umawia oddzwonienia bez pisania kodu.
Zobacz MCP →