APIキーから公開済みのバージョンまで:リンクの追加、先頭への移動、デザインの変更、下書きの検証、公開をcurlとjqで行います。
この例では、既存のページをすべてAPIで更新します。リンクを追加し、先頭に移動し、ボタンのスタイルを変更し、下書きを検証して公開します。コマンドはcurlとjqがあれば、どのシェルでも実行できます。
1. APIキーを作成する
- ダッシュボードで「コールバック&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":"Autumn sale","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. 下書きでデザインを変更する
theme_configはPATCHで完全に置き換えられます。そのため、まず下書きを読み取り、変更したい値だけを変えて、オブジェクト全体を送り返します。
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に問題が一覧表示されます。公開する前に修正してください。そもそも下書きが公開中のバージョンと異なるかどうかは、GET /v1/pages/$PAGE_IDのhas_unpublished_changesフィールドで分かります。falseなら公開は省略できます。
8. 公開する
curl -sS -X POST "$API/v1/pages/$PAGE_ID/publish" -H "Authorization: Bearer $LH_TOKEN"
# → {"ok":true,"version":8,"checksum":"…"} これで訪問者には、新しいリンク、順序、デザインを含む新しいバージョンが表示されます。page.publishedのWebhookがある場合は、ここで配信を受け取ります。下書きを公開できない場合、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を1つのフィールドだけで送信し、テーマ全体が置き換えられました。テーマ全体をもう一度送信するか、restore currentで最後の公開以降の下書きの変更をすべて破棄してください。
すべてのコードはAPIのエラー形式とエラーコードで説明し、すべてのエンドポイントは分野別のAPIエンドポイントに一覧があります。
こちらもおすすめ
答えが見つかりませんか?
お困りのことをお知らせください。サポートチームが個別にお手伝いします。