APRESLY API V1

Dokumentacja API v1

Endpointy, autoryzacja, parametry, odpowiedzi i limity publicznego API Apresly. Specyfikacja OpenAPI gotowa do importu.

Sprawdzono z produkcyjnym API: 9 października 2026

Na tej stronie

Adres i autoryzacja

Adres bazowy: https://app.apresly.com/api/public/v1. Wszystkie trzy operacje wymagają nagłówka Authorization: Bearer <YOUR_API_KEY>. Klucz tworzysz w ustawieniach API. Używaj go wyłącznie po stronie serwera lub w prywatnym połączeniu automatyzacji.

Pobierz OpenAPI 3.1 do importu w Postmanie lub narzędziu generującym klienta. Plik na tej stronie wskazuje pełny adres produkcyjny. Specyfikacja bezpośrednio z API używa ścieżki względnej i nie wymaga klucza.

Lista kampanii

GET /campaigns

Zwraca kampanie konta w kolejności rosnących ID. Bez filtra obejmuje szkice i kampanie opublikowane.

Parametr query Wartość Znaczenie
limit 1-100, domyślnie 50 Liczba kampanii na stronie
afterId Dodatnia liczba całkowita ID z nextAfterId poprzedniej odpowiedzi
isDraft true lub false false: opublikowane, true: szkice
curl --fail-with-body "https://app.apresly.com/api/public/v1/campaigns?isDraft=false&limit=50" \
  -H "Authorization: Bearer $APRESLY_API_KEY"
{
  "items": [
    {
      "id": 42,
      "name": "Post-purchase upsell",
      "type": {
        "id": 1,
        "name": "Campaign type"
      },
      "isDraft": false
    }
  ],
  "nextAfterId": null
}

Odpowiedź 200 zawiera items oraz nextAfterId. Każda kampania ma id, name, type (id i name) oraz isDraft. Gdy nextAfterId jest null, to ostatnia strona. W przeciwnym razie wywołaj np. /campaigns?isDraft=false&limit=50&afterId=42, używając otrzymanego kursora.

Rejestracja leada

POST /campaigns/{campaignId}/leads

campaignId to dodatnie ID kampanii należącej do konta klucza. Kampania musi być opublikowana. Wysyłaj Content-Type: application/json i poniższe pola, bez dodatkowych właściwości.

Pole JSON Wymagane Wartość
email Tak Poprawny adres, maks. 254 znaki, bez spacji na początku i końcu
language Nie en albo pl, domyślnie en; język obrazu licznika
curl --fail-with-body -X POST "https://app.apresly.com/api/public/v1/campaigns/42/leads" \
  -H "Authorization: Bearer $APRESLY_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"email":"[email protected]","language":"pl"}'

201 oznacza nowego logicznego leada, 200 istniejącego leada. Szkic zwraca 409 / CAMPAIGN_NOT_PUBLISHED bez rejestracji. Zachowaj pisownię, wielkość liter i aliasy + e-maila między integracjami, to tożsamość używana przez kampanię. Nie wysyłaj deadline, clientId ani adresu IP.

Odczyt istniejącej oferty

POST /campaigns/{campaignId}/leads/lookup

Wymaga tego samego JSON i nagłówków co rejestracja. Zwraca 200, ale bez pola created. Nie rejestruje leada, nie aktywuje ani nie odnawia licznika. POST pozwala nie umieszczać adresu e-mail w URL żądania. Autoryzacja, limity i historia żądań nadal obowiązują.

curl --fail-with-body -X POST "https://app.apresly.com/api/public/v1/campaigns/42/leads/lookup" \
  -H "Authorization: Bearer $APRESLY_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"email":"[email protected]","language":"pl"}'

Brak leada daje 404 / LEAD_NOT_FOUND. Można otrzymać wygasły termin. Historyczny lead w szkicu zwraca CAMPAIGN_NOT_PUBLISHED w ostrzeżeniach, bez linków i licznika.

Pola odpowiedzi

Poniżej ilustracyjna odpowiedź rejestracji, z kampanii bez stron oferty i licznika mailowego. Daty i ID są przykładowe.

{
  "campaignId": 42,
  "email": "[email protected]",
  "registeredAt": "2026-09-12T12:00:00.000Z",
  "deadline": "2026-09-14T12:00:00.000Z",
  "timeZone": "Europe/Warsaw",
  "offerLinks": [],
  "mailTimerUrl": null,
  "warnings": [
    "NO_OFFER_PAGES",
    "NO_MAIL_TIMER"
  ],
  "created": true
}
Pole Znaczenie
campaignId ID kampanii.
email Adres użyty w żądaniu.
registeredAt Pierwsza zachowana rejestracja lub aktywacja, ISO 8601 w UTC. Nie czas odpowiedzi.
deadline Termin z mechanizmu kampanii w UTC albo null, jeśli go nie ustalono.
timeZone Strefa czasowa kampanii, np. Europe/Warsaw.
offerLinks Tablica stron posortowana po pageId. Może być pusta.
offerLinks[].pageId ID strony, użyj do wyboru właściwej oferty.
offerLinks[].pageUrl Skonfigurowany adres strony.
offerLinks[].url Spersonalizowany link CTA. Ten adres wstaw do przycisku.
mailTimerUrl Adres obrazu licznika mailowego albo null.
warnings Lista ostrzeżeń o brakujących zasobach. Zobacz poradnik rozwiązywania problemów.
created Tylko rejestracja. true, gdy wcześniej nie było identyfikowalnego leada.

Zasady kampanii i linków

API stosuje istniejące ustawienia terminu, resetu i cykli kampanii. Powtórzenie rejestracji nie wydłuża terminu, gdy reset jest wyłączony. created opisuje tożsamość leada, nie uruchomienie nowego cyklu ani jednokrotną wysyłkę wiadomości.

API nie wysyła e-maili. Nie zastępuje widgetu: zachowanie HIDE, ZERO lub REDIRECT po wygaśnięciu egzekwują istniejące strony i zainstalowany widget. Wygenerowanie URL nie aktywuje oferty; otwarcie CTA lub obrazu licznika podlega standardowym zasadom kampanii.

Spersonalizowane linki można przekazać dalej. Zawierają tożsamość odbiorcy i nie są tajnymi, jednorazowymi tokenami dostępu. Zmiana stron lub ustawień kampanii może zmienić linki w kolejnych odpowiedziach. Unieważnienie klucza nie unieważnia wcześniej otrzymanych linków.

Limity i ponowienia

  • Domyślnie 120 autoryzowanych żądań na minutę UTC na konto, wspólnie dla wszystkich kluczy. Limit jest konfigurowalny po stronie usługi.
  • JSON maks. 16 KiB. Nieznane pola i parametry query są odrzucane.
  • Listy: 1-100 pozycji, domyślnie 50.
  • Po 429 odczekaj liczbę sekund z nagłówka Retry-After.
  • Timeout i 503 ponawiaj z rosnącym opóźnieniem oraz ograniczoną liczbą prób.
  • Utracona odpowiedź nie oznacza wycofania rejestracji. Deduplikuj zdarzenia i wysyłkę w swoim systemie, nie opieraj ich wyłącznie na created.

Błędy i diagnostyka

Błędy zawierają status, code, message i requestId. Odpowiedzi API zawierają także nagłówek X-Request-Id oraz Cache-Control: no-store. Nie zapisuj kluczy, e-maili ani spersonalizowanych linków w logach.

{
  "status": "error",
  "code": "UNAUTHORIZED",
  "message": "Invalid API key",
  "requestId": "00000000-0000-4000-8000-000000000001"
}
HTTP Kod
400 INVALID_JSON, INVALID_CURSOR
401 UNAUTHORIZED
403 ACCOUNT_SUSPENDED
404 CAMPAIGN_NOT_FOUND, LEAD_NOT_FOUND, NOT_FOUND
409 CAMPAIGN_NOT_PUBLISHED
413 PAYLOAD_TOO_LARGE
415 UNSUPPORTED_MEDIA_TYPE
422 VALIDATION_ERROR
429 RATE_LIMITED
500 INTERNAL_ERROR
503 SERVICE_UNAVAILABLE

Sposoby rozwiązania błędów i ostrzeżeń. Historia żądań w panelu pokazuje domyślnie ostatnie 7 dni bez payloadów, e-maili i sekretów. Awaria zapisu historii może pozostawić luki.

Następny poradnikPołącz z Make

UTKNĄŁEŚ?

Porozmawiajmy o Twojej integracji.

Napisz, co chcesz połączyć. Przy błędzie dołącz requestId i kod błędu, bez klucza API i danych klientów.

Napisz do nas