От API-ключа до опубликованной версии: добавьте ссылку, поднимите её наверх, измените дизайн, проверьте черновик и опубликуйте — с curl и jq.
В этом примере вы обновляете существующую страницу полностью через API: добавляете ссылку, поднимаете её наверх, меняете стиль кнопок, проверяете черновик и публикуете его. Команды работают в любой оболочке с curl и jq.
1. Создайте API-ключ
- Откройте в панели управления «Callback и API»
- Нажмите «+ Создать ключ»
- Выберите «Запись» и для «Страницы», и для «Ссылки» (это включает доступ на чтение)
- Нажмите «Создать ключ» и скопируйте секрет ключа
- Скопируйте ID ключа из списка
Сохраните оба значения в переменных окружения, а не в скрипте:
export LH_KEY_ID="6F668EA6598B0692"
export LH_KEY_SECRET="lt_…"
export API="https://dock.at-harbor.com" 2. Получите токен доступа
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) Токен действует 15 минут. Если ваш скрипт работает дольше, получите новый в процессе.
3. Найдите страницу
curl -sS "$API/v1/pages" -H "Authorization: Bearer $LH_TOKEN" \
| jq '.items[] | {id, handle, title, status, current_version}' Запомните id страницы. В этом примере это 42:
PAGE_ID=42 4. Добавьте ссылку
LINK_ID=$(curl -sS -X POST "$API/v1/pages/$PAGE_ID/links" \
-H "Authorization: Bearer $LH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Осенняя распродажа","target_url_template":"https://shop.example.com/autumn","enabled":true}' \
| jq -r .id)
echo "New link: $LINK_ID" API отвечает HTTP 201 и новым ID. Новые ссылки добавляются в конец списка. Если лимит ссылок по вашему тарифу достигнут, вы получите 409 link_limit_reached.
5. Поднимите ссылку наверх
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]}" Достаточно отправить ID, которые должны переместиться в начало. Все остальные ссылки сохраняют свой порядок после них.
6. Измените дизайн в черновике
При PATCH theme_config заменяется полностью. Поэтому сначала прочитайте черновик, измените только нужное значение и отправьте объект обратно целиком:
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 принимает rounded, pill и square. Среди других полей theme_config — bg_color, text_color, button_color, button_text_color и background.
7. Проверьте черновик
curl -sS "$API/v1/pages/$PAGE_ID/draft/validate" -H "Authorization: Bearer $LH_TOKEN"
# → {"ok":true,"valid":true,"issues":[]} Если valid равно false, в issues перечислены проблемы. Исправьте их перед публикацией. Отличается ли черновик от опубликованной версии вообще, показывает поле has_unpublished_changes в GET /v1/pages/$PAGE_ID — если там false, публикацию можно пропустить.
8. Опубликуйте
curl -sS -X POST "$API/v1/pages/$PAGE_ID/publish" -H "Authorization: Bearer $LH_TOKEN"
# → {"ok":true,"version":8,"checksum":"…"} Теперь посетители видят новую версию — с новой ссылкой, новым порядком и дизайном. Если у вас есть вебхук для page.published, он сейчас получит доставку. Если черновик нельзя опубликовать, API отвечает 409 draft_not_publishable и списком в details.issues.
9. Отмена
Если результат вам не нравится, верните предыдущую версию в черновик и опубликуйте снова:
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" Вместо номера версии можно передать current: это отменяет все изменения черновика с последней публикации. Восстановление возвращает дизайн, шаблон, собственный CSS, SEO, блоки и ссылки; заголовок, хэндл и видимость не версионируются.
Частые ошибки
- 400 bad_request
- Нет заголовка Content-Type: application/json. Без него curl -d отправляет другой тип.
- 401 invalid_token
- Токен истёк через 15 минут. Получите новый.
- 403 insufficient_scope
- У ключа нет нужной области доступа, например «Запись» для ссылок.
- Дизайн внезапно сбросился
- theme_config был отправлен только с одним полем и заменил всю тему. Отправьте полную тему снова или используйте restore с current, чтобы отменить все изменения черновика с последней публикации.
Все коды объяснены в статье Формат ошибок и коды ошибок, а все эндпоинты перечислены в статье Эндпоинты по разделам.
Вам также может пригодиться
Ничего не нашли?
Напишите, что вам нужно, и наша служба поддержки поможет вам лично.