Od klucza API do opublikowanej wersji: dodaj link, przenieś go na górę, zmień wygląd, sprawdź wersję roboczą i opublikuj – z curl i jq.
W tym przykładzie aktualizujesz istniejącą stronę wyłącznie przez API: dodajesz link, przenosisz go na górę, zmieniasz styl przycisków, sprawdzasz wersję roboczą i ją publikujesz. Polecenia działają w każdej powłoce z curl i jq.
1. Utwórz klucz API
- Otwórz w panelu „Callback i API”
- Kliknij „+ Utwórz nowy klucz”
- Wybierz „Zapis” zarówno dla „Strony”, jak i dla „Linki” (obejmuje to dostęp do odczytu)
- Kliknij „Utwórz klucz” i skopiuj sekret klucza
- Skopiuj ID klucza z listy
Zapisz obie wartości jako zmienne środowiskowe, nie w skrypcie:
export LH_KEY_ID="6F668EA6598B0692"
export LH_KEY_SECRET="lt_…"
export API="https://dock.at-harbor.com" 2. Pobierz token dostępu
LH_TOKEN=$(curl -sS -X POST "$API/v1/token" \
-H "Content-Type: application/json" \
-d "{\"key_id\":\"$LH_KEY_ID\",\"key_secret\":\"$LH_KEY_SECRET\"}" \
| jq -r .token) Token jest ważny przez 15 minut. Jeśli Twój skrypt działa dłużej, pobierz w międzyczasie nowy.
3. Znajdź stronę
curl -sS "$API/v1/pages" -H "Authorization: Bearer $LH_TOKEN" \
| jq '.items[] | {id, handle, title, status, current_version}' Zanotuj id strony. W tym przykładzie to 42:
PAGE_ID=42 4. Dodaj link
LINK_ID=$(curl -sS -X POST "$API/v1/pages/$PAGE_ID/links" \
-H "Authorization: Bearer $LH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Jesienna wyprzedaż","target_url_template":"https://shop.example.com/autumn","enabled":true}' \
| jq -r .id)
echo "Nowy link: $LINK_ID" API odpowiada kodem HTTP 201 i nowym ID. Nowe linki trafiają na koniec listy. Jeśli limit linków w Twoim planie został osiągnięty, dostajesz 409 link_limit_reached.
5. Przenieś link na górę
curl -sS -X POST "$API/v1/pages/$PAGE_ID/links/reorder" \
-H "Authorization: Bearer $LH_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"order\":[$LINK_ID]}" Wystarczy wysłać ID, które mają przejść na początek. Wszystkie pozostałe linki zachowują za nimi swoją kolejność.
6. Zmień wygląd w wersji roboczej
Przy PATCH theme_config jest zastępowany w całości. Dlatego najpierw odczytujesz wersję roboczą, zmieniasz tylko potrzebną wartość i odsyłasz cały obiekt:
THEME=$(curl -sS "$API/v1/pages/$PAGE_ID/draft" -H "Authorization: Bearer $LH_TOKEN" \
| jq -c '(.theme_config // {}) | .button_style = "pill"')
curl -sS -X PATCH "$API/v1/pages/$PAGE_ID/draft" \
-H "Authorization: Bearer $LH_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"theme_config\":$THEME}" button_style przyjmuje rounded, pill i square. Inne pola theme_config to między innymi bg_color, text_color, button_color, button_text_color i background.
7. Sprawdź wersję roboczą
curl -sS "$API/v1/pages/$PAGE_ID/draft/validate" -H "Authorization: Bearer $LH_TOKEN"
# → {"ok":true,"valid":true,"issues":[]} Jeśli valid ma wartość false, issues wymienia problemy. Usuń je przed publikacją. Czy wersja robocza w ogóle różni się od wersji na żywo, pokazuje GET /v1/pages/$PAGE_ID w polu has_unpublished_changes – jeśli ma ono wartość false, możesz pominąć publikację.
8. Opublikuj
curl -sS -X POST "$API/v1/pages/$PAGE_ID/publish" -H "Authorization: Bearer $LH_TOKEN"
# → {"ok":true,"version":8,"checksum":"…"} Odwiedzający widzą teraz nową wersję – z nowym linkiem, kolejnością i wyglądem. Jeśli masz webhook dla page.published, dostaje on teraz dostarczenie. Jeśli wersji roboczej nie da się opublikować, API odpowiada kodem 409 draft_not_publishable i listą w details.issues.
9. Cofnij
Jeśli wynik Ci się nie podoba, przenieś poprzednią wersję z powrotem do wersji roboczej i opublikuj ponownie:
curl -sS -X POST "$API/v1/pages/$PAGE_ID/versions/7/restore" -H "Authorization: Bearer $LH_TOKEN"
curl -sS -X POST "$API/v1/pages/$PAGE_ID/publish" -H "Authorization: Bearer $LH_TOKEN" Zamiast numeru wersji możesz podać current: odrzuca to wszystkie zmiany w wersji roboczej od ostatniej publikacji. Przywrócenie przywraca wygląd, szablon, własny CSS, SEO, bloki i linki; tytuł, handle i widoczność nie są wersjonowane.
Częste błędy
- 400 bad_request
- Brakuje nagłówka Content-Type: application/json. Bez niego curl -d wysyła inny typ.
- 401 invalid_token
- Token wygasł po 15 minutach. Pobierz nowy.
- 403 insufficient_scope
- Kluczowi brakuje zakresu, na przykład „Zapis” dla linków.
- Wygląd nagle zresetowany
- theme_config został wysłany z tylko jednym polem i zastąpił cały motyw. Wyślij ponownie pełny motyw albo użyj restore z current, aby odrzucić wszystkie zmiany w wersji roboczej od ostatniej publikacji.
Wszystkie kody wyjaśnia artykuł Format błędów API i kody błędów, a wszystkie endpointy wymienia artykuł Endpointy API według obszarów.
Może Ci się też przydać
Nic nie znaleziono?
Napisz, czego potrzebujesz, a nasz zespół pomocy technicznej pomoże Ci osobiście.