Skip to content
言語: 日本語

開発者向けAPI

APIのエラー形式とエラーコード

2026年11月1日更新 約7分で読めます

LinkHarbor APIのエラーレスポンスの構造、主なエラーコードの意味、コードでの対応方法を説明します。

APIのエラーレスポンスはすべて同じ形式です。コードでは、messageのテキストではなく、errorフィールドのエラーコードを頼りにしてください。コードは変わりませんが、テキストは変わることがあり、アカウント言語に翻訳されます。

エラーレスポンスの構造

例:422 validation_failed
{
  "error": "validation_failed",
  "message": "Some of the information provided is invalid. Please check and try again.",
  "details": [
    { "field": "title", "reason": "minLength", "message": "…" }
  ],
  "request_id": "6b1f0c2e-…"
}
error
機械可読なコードです(例:not_found)。ほとんどのエラーではX-Error-Codeヘッダーにも入っていますが、本文のフィールドを頼りにしてください。
message
人が読める説明で、アカウント言語で書かれています。APIキーの場合はワークスペースのオーナーの言語、接続したアプリの場合は接続した人の言語です。トークンのチェックによる401など、有効なトークンがない場合はAccept-Languageに従い、それもなければ英語です。言語はContent-Languageヘッダーに示されます。
details
追加の情報があるときだけ含まれます。入力の検証による422では、問題ごとにfield、reason、messageを含むリストです。業務ロジックによる422やその他のすべてのエラーでは、reason、retry_after_sec、問題のリストなどを含むオブジェクトです。サイズ超過の場合はfield、reason、limitを含み、413 request_too_largeではmax_bytesとmax_kbを含みます。そのため、detailsがリストかどうかを確認してください。
request_id
リクエストのIDです。X-Request-Idヘッダーにも入っています。サポートに問い合わせるときは添えてください。

例外:429 rate_limitedのレスポンスにはdetailsの代わりにretry_after_secフィールドがあります。429と403 insufficient_scopeでは、本文にrequest_idがありません。トークンのチェックによる401とスキーマチェックによる422にはX-Error-Codeヘッダーがなく、スキーマチェックでは最上位のmessageだけが翻訳され、details内のテキストは英語のままです。X-Request-Idヘッダーは常に設定されます。

主なコード

HTTPerror意味対処法
400invalid_json本文が有効なJSONではありませんJSONを確認してください
400bad_requestContent-Typeが間違っているか、リクエストの形式が不正ですContent-Type: application/jsonを設定してください
401missing_bearer_tokenAuthorizationヘッダーにトークンがありませんAuthorization: Bearer …ヘッダーを設定してください
401invalid_tokenトークンが期限切れか無効、またはキーが削除されました新しいトークンを取得してください。解決しない場合はキーを確認してください
401invalid_api_keyトークン交換でキーIDかシークレットが間違っています認証情報を確認してください
402plan_limit_reached短縮リンクなどでプランの上限に達しましたアップグレードするか、項目を削除してください
403insufficient_scopeスコープがないか、エンドポイントがAPIキーで使えません正しいスコープでキーを作成してください
403forbiddenこの操作の権限がありませんダッシュボードで行ってください
403feature_not_available機能がプランに含まれていませんプランを確認してください
403block_type_requires_planブロックの種類は上位のプランでのみ使えます別のブロックの種類を選ぶか、アップグレードしてください
403template_lockedプレミアムテンプレートは現在のプランでは使えませんGET /v1/templates/availableからテンプレートを選んでください
403workspace_suspended, workspace_read_only, workspace_grace_expired未払いのため、ワークスペースがロックされているか読み取り専用ですダッシュボードで支払いを解決してください
404not_foundリソースが存在しないか、ワークスペースに属していませんIDを確認してください
409conflict現在の状態との一般的な競合です状態を読み込み直し、入力を変更してください
409workspace_template_in_useワークスペーステンプレートがまだページで使われています。数はdetails.countにありますページを別のテンプレートに切り替えてから削除してください
409handle_taken, slug_takenハンドルまたは短縮リンクのスラッグがすでに使われています別の値を選んでください
409form_in_use, page_not_private, page_not_published, never_published状態との競合:フォームがまだページにある、ページが非公開でない、公開されていない、一度も公開されていない状態を変更してから再度お試しください
409page_limit_reached, link_limit_reached, block_limit_reached, form_limit_reached, asset_limit_reached, asset_storage_limit_reached, workspace_template_limit_reachedプランの数量またはストレージの上限に達しました項目を削除するか、アップグレードしてください
409draft_not_publishable下書きに問題があります。一覧はdetails.issuesにあります問題を修正してから再び公開してください
413request_too_large本文がこのエンドポイントで許可される大きさ(64 KB、1 MB、2 MB)を超えています。上限はdetails.max_kbにあります1回のリクエストで送るデータを減らしてください。レート制限をご覧ください
413payload_too_largeアップロードしたファイルが10 MBを超えていますファイルを小さくしてください
422validation_failed無効な入力または不明なフィールドです。詳細はdetailsにありますdetailsの説明に従ってフィールドを修正してください
422handle_reserved, target_url_invalid, target_url_scheme, target_url_hostハンドルが予約されているか、リンク先URLが無効または許可されていません別の値を選んでください
422workspace_template_disabled選んだワークスペーステンプレートは無効になっています「ドメインとテンプレート」でテンプレートを有効にするか、別のものを選んでください
422template_css_external, template_section_invalidワークスペーステンプレート:CSSが外部のサーバーから読み込んでいるか、{{#if}}/{{#unless}}/{{#each}}のセクションの位置が正しくありません外部のアドレスを削除するか、同じタグまたはテキストの中でセクションを閉じてください
422custom_css_externalカスタムCSSが外部のサーバーから何かを読み込んでいますCSSから外部のアドレスを削除してください
429rate_limited, api_key_lockedリクエストが多すぎるか、失敗によりキーがロックされましたRetry-Afterまたはdetails.retry_after_secの時間だけ待ってください
500internal_error予期しないエラーです後でもう一度お試しください。request_idを控えておいてください
503service_unavailableサービスが一時的に利用できません少し待ってから再度お試しください

入力エラーの読み方

422 validation_failedでは、detailsにすべての問題が個別に一覧表示されます。fieldはフィールドのパス(ネストしたオブジェクトはスラッシュ区切り、例:theme_config/button_style)、reasonは違反したルール(required、minLength、maxLength、enum、additionalPropertiesなど)です。additionalPropertiesの場合、messageにどのフィールドが不明かが示されます。多くの場合、フィールド名の入力ミスです。

コードでの推奨される対応

  • 400、413、422:再試行せず、リクエストを修正してください
  • 401 invalid_token:新しいトークンを一度取得して再試行してください
  • 403:再試行せず、スコープ、プラン、誰がこの操作をできるかを確認してください
  • 404:IDを確認してください。削除後であれば正常です
  • 409:状態を読み込み直し、その操作がまだ必要か判断してください
  • 429:Retry-Afterの時間だけ待ってから再試行してください。レート制限をご覧ください
  • 500と503:間隔を広げながら数回再試行してください

答えが見つかりませんか?

お困りのことをお知らせください。サポートチームが個別にお手伝いします。

サポートに問い合わせる