コンテンツにスキップ
コンソール →
公式サイト →
URL を貼り付けて AI に質問 https://keelson.dev/ja/llms.txt

エラーコードと対処方法

Keelson で発生する主なエラーと、その確認方法・対処方法をまとめています。CLI のエラーに加え、コンソールで確認できるデプロイの失敗や、公開したアプリへのアクセス時のエラーも扱います。

CLI のエラーでは code と message、対処の案内がある場合は hint を確認してください。CLI や API でデプロイの失敗を確認する場合は、failure_code と failure_hint を確認します。案内が表示されている場合は、個別の状況に応じた内容なので、このページより優先してください。AI エージェントに調査や修正を依頼するときも、これらの情報を渡すと役立ちます。

このページは全コードを網羅していません。掲載のないコードが出た場合も、表示されたメッセージや対処の案内を確認してください。

操作した場所によって、エラーを確認する画面や応答の形式が異なります。

確認する場所確認方法・応答の形式
コンソールアプリの概要やデプロイ履歴で、失敗したデプロイの理由とログを確認
CLIターミナルのエラーメッセージを確認。--json を付けると、標準出力の error に code、message、hint、retryable などが入る
デプロイの失敗(keelson status / keelson diagnose)failure_code と failure_hint を確認
Keelson API通常は detail にメッセージ。入力検証エラーでは detail が配列になる場合もある。承認が必要な操作、スナップショット、入力検証、管理権限などに関する一部のエラーでは、error に code、message、hint などが入る
公開したアプリへのアクセス拒否(ゲートウェイ)ブラウザには案内画面。fetch / XHR には {"detail":"ip-restricted"} などの JSON。X-Keelson-Auth-Error ヘッダーで拒否の理由を確認できる
稼働枠不足・停止中(ゲートウェイ)HTTP 503。x-keelson-platform-error ヘッダーに capacity-full / app-suspended。稼働枠不足では X-Keelson-Error-Code: CAPACITY_FULL も返る
存在しない URL・停止中・予約パスへのアクセス(エッジ)HTTP 404 / 410 / 503 / 403。ブラウザには案内画面、API 等には平文を返す。一部の予約パスはブラウザにも平文を返す。理由は x-keelson-platform-error ヘッダーで確認する。ゲートウェイに届かないため X-Keelson-Auth-Error は付かない
Files / Media の配信x-keelson-error ヘッダーで理由を確認。一部のコードでは error、hint、doc を含む JSON も返る

CLI の --json で返るエラーの例です。

{
"error": {
"code": "not_logged_in",
"message": "Not logged in.",
"hint": "Run `keelson login` or set KEELSON_TOKEN, then retry the command.",
"retryable": false
}
}

retryable は、同じ操作を再試行すると成功する可能性があるかを示します。HTTP ステータスだけでは判断できません。同じ 503 でも false の場合があり、ビルドの 429 にはトライアルの累積上限のように待っても解除されないものがあります。

アップロード前のチェック結果です。keelson deploy --check でも確認できます。エラーがあるとデプロイは中止されます。警告だけの場合は続行できます。

依存マニフェストとは、使用するライブラリを宣言するファイル(go.mod、requirements.txt、package.json など)です。Go では外部ライブラリを使わなくても go.mod が必要です。Python と Node.js では、依存マニフェストがなくても警告にとどまります。

コード原因対処
missing_dependency_manifest選択したランタイムの依存マニフェストがないGo ではプロジェクトルートに go.mod を置く。Python または Node.js で外部ライブラリを使う場合は、その依存関係を宣言するファイルを置く
command_installs_dependenciescommand に pip install / npm install / go build がある削除し、起動コマンドだけにする
runtime_command_mismatchruntime と command の言語が合わない(例: python-slim で node)どちらかを直す
assets_dir_emptyassets.dir が無い、空、またはパスの大文字小文字が違うビルドを実行する。パスを確認する
assets_fallback_missingassets.fallback のファイルが assets.dir にないビルド出力を確認する
db_wiring_fail(警告)db.mode とコードの DB 接続が食い違う(本番の接続先が KEELSON_DB_URL を読んでいない、ローカル開発用の file: フォールバックが本番経路に残っている、宣言との不一致など複数の規則がある。file:local.db を環境変数未設定時のフォールバックとして持つこと自体は問題ない)表示された hint に従う。多くは KEELSON_DB_URL を読む libSQL クライアントに直す
file_wiring_fail(警告)状態ファイルやアップロードをローカルディスクに書いているFiles / Media SDK に置き換える
icon.pathicon のファイルが無い、読めない、シンボリックリンク、またはアップロードから除外されるアップロードされる場所に画像を置き、keelson.yaml からの相対パスで icon を書く。icon を参照
icon.format / icon.size / icon.dimensions / icon.corrupticon の画像が PNG・JPEG・WebP でない、256KB を超える、縦横が 32〜2048 ピクセルの外、またはヘッダーが読めない条件に合う PNG・JPEG・WebP で書き出し直す

keelson.yaml とアップロード内容の検証

Section titled “keelson.yaml とアップロード内容の検証”

次のエラーがあるとデプロイできません。

コード原因対処
invalid_keelson_configYAML が不正、db.mode が libsql / none 以外、db.migrate を none と併用、KEELSON_ で始まる env、/__keelson 配下のパス、不明な runtime、cron が 10 本超、などmessage の内容を直す
config_missing_field必須フィールドがない(slug、runtime、db など。静的サイトでは type と assets も)追加する
env_value_not_stringenv の値が文字列でない、YAML が曖昧に解釈するキー、キーの重複、merge key(<<)値は引用符かブロック文字列にする。曖昧なキー(on / yes / 数字など)は引用符で囲む。重複は削除する。merge key は展開して書く。重複と merge key は引用符で囲んでも拒否される
description_too_longdescription が 300 文字超短くする
workers_not_supportedworkers: がある削除する。リクエストを受けて走らせる処理は tasks、時刻で動く処理は crons で書く
DB_DATABASES_REMOVEDdatabases: がある削除する。永続データは db.mode: libsql
SQLITE_LOCAL_SQLITE_INVALID_PATHdb.local_sqlite.paths が /tmp/ の外/tmp/ か :memory: にする
CRON_TIMEOUT_EXCEEDS_STANDARD_LIMITcrons[].timeout が 600 秒超600 秒以内にするか、処理を分割する
plan_cron_limit / plan_cron_min_interval / plan_schedule_timeoutcron の本数・実行間隔・timeout がプランの制限に合わない本数を減らす、実行間隔を長くする、timeout を短くする。または必要な条件を満たすプランに変更する
tasks_require_command_or_cronstasks があるのに command も crons も無く、タスクを投入するコードが無いタスクを投入する Web アプリの command、または crons のジョブを追加する
task_name_conflicts_with_crontasks[].name が crons[].name と同じ(前後の空白を除いて小文字化した後で比べる)タスクかジョブの名前を変える
TASK_TIMEOUT_EXCEEDS_STANDARD_LIMITtasks[].timeout が 600 秒超600 秒以内にするか、処理を小さなタスクに分ける
plan_task_timeout明示した tasks[].timeout がプランの 1 回の実行時間の上限を超えるtimeout を短くするか、上限の大きいプランに変更する。timeout を省略した場合は拒否されず、プランの上限に切り下げられる
ARTIFACT_SQLITE_FILE_DRIVERファイル SQLite クライアント(sqlite3、better-sqlite3 など)が検出されたlibSQL クライアントへ移行。一時用途なら db.local_sqlite で宣言

ビルド出力の直下に __keelson ディレクトリがあるとビルドが失敗します。このときの failure_code は deploy.build.failed で、ビルドログに reserved_path_conflict が出ます。ディレクトリ名を変えてください。

アップロード内容に関する警告

Section titled “アップロード内容に関する警告”

次のコードは警告であり、これだけでデプロイが失敗することはありません。処理の目的に応じて対応してください。

コード原因対処
ARTIFACT_EXEC_NODE_CRON / ARTIFACT_EXEC_APSCHEDULERアプリのプロセス内で定期処理を登録しているアプリがスリープすると実行されないため、定期処理を独立したコマンドに切り出し、keelson.yaml の crons に定義する
ARTIFACT_EXEC_BACKGROUND_TASKSレスポンスを返した後に実行する処理がある短い外部呼び出しや、リクエストの成功に必要な処理は、レスポンスを返す前に await して完了を待つ。レスポンスの後に続ける処理は tasks に宣言して SDK で投入する(バックグラウンドタスク)
ARTIFACT_EXEC_SET_INTERVALサーバー側のコードで setInterval を使っている実行が抜けても問題のないキャッシュ更新などは変更不要。継続的な定期実行が必要な処理は crons に移す

コンソールのアプリ概要・デプロイ履歴で、失敗の理由とログを確認できます。CLI の keelson status / keelson diagnose や API では、失敗コードを failure_code、対処の案内を failure_hint で確認します。デプロイ開始時に操作を受け付けられなかった場合のコードも、下表に記載しています。

コード原因対処
deploy.config.invalidkeelson.yaml の内容が不正指摘されたキーを直して再デプロイ
deploy.config.secret_missingsecrets.required で宣言したシークレットが未設定keelson secrets set <KEY>(値は標準入力)で全て設定してから再デプロイ
deploy.artifact.invalidアップロードしたアーカイブの検証に失敗した(必要なロックファイルの不足など)エラーメッセージで指摘されたファイルやコードを直す
deploy.artifact.assets_invalidassets.dir / assets.fallback で宣言したファイルがアップロードに含まれていない手元でビルドしてから再デプロイ
deploy.build.failedビルド失敗(依存の解決失敗、ビルドスクリプトのエラー、予約パスの衝突)keelson logs deploy <deploy_id> でビルド出力の末尾を見る
deploy.build.timed_outビルドが制限時間内に終わらなかった不要な依存を減らす、重い前処理をビルドの外に出す
deploy.build.image_too_largeイメージが大きすぎる不要な依存やファイルを減らす
deploy.runtime.start_failedアプリが起動中に終了、またはコンテナが起動状態にならなかったkeelson logs deploy <deploy_id> で保存済みのアプリの起動ログを読み、PORT と 0.0.0.0 を確認
deploy.runtime.health_check_failed起動・ヘルス検証の制限時間内に、/(もしくは health.path)から期待する応答(2xx / 3xx / 404)を得られなかった。アプリが起動中に終了した場合や、401 / 403 / 5xx を返し続ける場合を含むkeelson logs deploy <deploy_id> で保存済みのアプリの起動ログを読み、待ち受けポートと health.path を確認
deploy.runtime.migration_faileddb.migrate が 0 以外で終了。旧リビジョンが配信を継続マイグレーションを直して再デプロイ。途中まで適用された DB の変更は自動では戻らない
deploy.verify.failedverify のパスが取得できない、または JS / CSS の Content-Type が不一致パスとビルド出力を確認。詳細は failure_logs の verification_* コードに出る
deploy.plan.limit_exceededプランの上限を超えているfailure_hint で対象の上限を確認し、設定や使用量を上限内に収める。または必要な上限のあるプランに変更する
deploy.plan.cron_count_exceededcron の本数がプラン上限を超えているcron の本数を減らすか、より多く登録できるプランに変更する
deploy.plan.cron_interval_too_shortcron の間隔がプランの最小間隔より短い実行間隔を長くするか、より短い間隔で実行できるプランに変更する
deploy.plan.schedule_timeout_exceeded明示した crons[].timeout がプラン上限を超えているtimeout を短くするか、必要な実行時間に対応したプランに変更する
deploy.app.suspendedアプリまたはワークスペースが Keelson 側の制限措置を受けているサポートへ連絡する。利用者や管理者による再開では解除されない
deploy.app.operation_in_progressこのアプリで別の操作が進行中だったため、デプロイを開始できなかった別の操作が完了してから再デプロイ
deploy.platform.temporarily_unavailable一時的な障害待ってから再試行する。追加で 3 回まで。それでも失敗するなら deploy_id を添えてサポートへ
deploy.platform.errorプラットフォーム側のエラー再試行しても直らない。deploy_id を添えてサポートへ
deploy.cancelledデプロイが取り消された必要なら再デプロイ
deploy_in_progress(409)別のデプロイまたはアプリ操作が進行中進行中の操作が完了してから同じコマンドを再実行
build_rate_limit_exceeded / build_guardrail_exceeded(429)ビルド回数・ビルド時間・同時実行・連続失敗の上限メッセージが解除条件を示す。連続失敗は原因を直して記載の時刻を待つ。トライアルのビルド枠は累積で、待っても解除されないので、その場合はプランを変更する
saved_config_unsupported(409)再デプロイ / ロールバック対象の keelson.yaml が現在のスキーマに合わない直して通常のデプロイをする

定期実行ジョブの失敗・スキップ

Section titled “定期実行ジョブの失敗・スキップ”

keelson crons runs list --json の executions[].failure_code で確認できます。失敗の調査には keelson logs cron で実行ログも確認してください。

cron.failed.* は開始したジョブの失敗、dispatch_failed はジョブを起動できなかったことを示します。cron.skipped.* は、条件を満たさないため予定されていた実行をスキップしたことを示します。

コード意味
cron.failed.command_failedコマンドが 0 以外で終了した
cron.failed.timed_outtimeout を超えた
cron.failed.terminated_no_callback実行が終了したが結果が報告されなかった
dispatch_failed実行の起動に失敗した
cron.skipped.schedule_disabledジョブが無効化されている
cron.skipped.quota_exceededプランの実行枠を超えた
cron.skipped.due_to_lock / cron.skipped.lease_held前回の実行がまだ終わっていない
cron.skipped.missed_run予定時刻を過ぎたため実行をスキップした
cron.skipped.app_suspendedアプリが停止中
cron.skipped.plan_downgradeプラン変更で実行できなくなった

バックグラウンドタスクのエラー

Section titled “バックグラウンドタスクのエラー”

アプリが enqueue や get を呼んだときに、Tasks SDK が返すエラーです。SDK のエラーは言語ごとに 1 種類(Python と Node.js は TasksError、Go は *tasks.Error)で、code・status・message を持ちます。分岐は code で行い、message の文言に頼らないでください。使い方はバックグラウンドタスクを参照してください。

コード意味出る場面対処
TASK_INVALID_REQUESTタスク名が空、idempotency_key が 1〜128 文字の印字可能 ASCII でない、payload を JSON にできない、などの不正な要求enqueue(本番・手元)引数を直す。同じ呼び出しを繰り返しても通らない
TASK_NOT_DECLAREDタスク名が、現在デプロイされている tasks に無い(手元では keelson.yaml に無い)。tasks から外した名前を含むenqueue(本番・手元)tasks に宣言してデプロイするか、名前を直す
TASK_NOT_FOUNDtask_id が存在しないか、別のアプリのタスク。手元の get は同じプロセスで投入したタスクしか知らないget(本番・手元)アプリが保存した task_id を確かめる
TASKS_UNAVAILABLEタスクの受付が閉じている、またはアプリがサスペンド・隔離・削除中。繰り返しても通らないenqueue(本番だけ)コンソールでアプリの状態を確認する。Keelson が制限したアプリはサポートに連絡する
TASK_PAYLOAD_TOO_LARGE投入要求の body(payload と idempotency_key を JSON にしたもの)が 65,536 bytes を超えるenqueue(本番・手元)大きな入力はデータベースかファイル保存の SDK に置き、その ID を payload で渡す
TASK_BACKLOG_LIMIT_EXCEEDEDアプリの未処理(queued)のタスクが 1,000 件に達しているenqueue(本番だけ)未処理のタスクが減るのを待つか、投入の頻度を下げる。投入済みのタスクには影響しない
TASK_MONTHLY_QUOTA_EXCEEDEDワークスペースの月間枠「バックグラウンド実行」で、1 回目の試行の分を確保できないenqueue(本番だけ)確保済みの枠が返されたとき・プランを上げたとき・翌 UTC 月初のいずれかで通るようになる。同じ月の中でも通ることがあるので、翌月まで止まると決め打ちしない。SDK は自動で再試行しない
TASKS_UNAVAILABLE_TRANSIENT一時的な障害(エラー本文の無い 502 / 503 / 504、接続の失敗、1 回あたり 15 秒の時間切れ)enqueue・get(本番だけ)SDK が合計 3 回まで試す。enqueue は idempotency_key があるときだけ再試行するので、重複を作らないようキーを付ける
TASKS_UNAUTHORIZEDruntime API が ID トークンを受け付けなかった(401)enqueue・get(本番だけ)続く場合はサポートに連絡する
TASKS_FORBIDDENCloud Run が呼び出しを拒否した(403)。tasks を宣言した最初のデプロイの直後は、権限の反映に数分かかることがあるenqueue・get(本番だけ)最初のデプロイから数分待って試し直す。続く場合はサポートに連絡する
TASKS_SERVER_ERRORエラー本文の無い、その他の 5xxenqueue・get(本番だけ)時間をおいて試し直す。enqueue を試し直すときは idempotency_key を付ける
TASKS_HTTP_ERRORエラー本文の無い、その他の失敗の応答enqueue・get(本番だけ)続く場合はサポートに連絡する
TASKS_UNEXPECTED_RESPONSE成功の応答が決められた形でなかったenqueue・get(本番だけ)SDK を更新する。続く場合はサポートに連絡する
TASKS_IDENTITY_TOKEN_ERRORメタデータサーバーから ID トークンを取れなかったenqueue・get(本番だけ)続く場合はサポートに連絡する
TASKS_NOT_CONFIGUREDSDK が本番と手元のどちらで動かすかを決められなかった(KEELSON_MODE が不明な値、KEELSON_MODE=keelson なのに KEELSON_TASKS_BASE_URL か KEELSON_APP_ID が無い、など)enqueue・get本番では KEELSON_MODE などの KEELSON_ 変数を上書きしない。手元では KEELSON_MODE=local にするか Keelson の変数を外す。環境変数を参照
TASKS_LOCAL_CLI_NOT_FOUNDPATH に keelson が無いenqueue(手元だけ)https://keelson.dev/install.sh で CLI を入れる
TASKS_LOCAL_CLI_FAILEDCLI がタスクを実行できなかった(keelson dev task run の無い古い CLI、中断など)enqueue(手元だけ)keelson upgrade を実行する。keelson dev task run <name> --payload '<JSON>' で直接エラーを確かめる

コマンドが 0 以外で終わった・時間切れになったことは enqueue のエラーではありません。タスクは failed で終わり、get の last_failure_code に理由が入ります。

タスクの失敗理由(last_failure_code)

Section titled “タスクの失敗理由(last_failure_code)”

get は、failed のタスクと、再試行を待っているタスクに last_failure_code を返します。最後の試行の標準エラーは、コンソールのアプリ画面の「バックグラウンドタスク」タブで確認できます。

値意味試行回数に数えるか再試行
exit_nonzeroコマンドが 0 以外の終了コードで終わった数える試行回数が残っていればする
timed_out試行が timeout を超え、Keelson がコマンドを打ち切った数える試行回数が残っていればする
no_completion結果の連絡が無いまま期限を過ぎた数える試行回数が残っていればする
delivery_failed試行を 1 時間以内に開始できなかった数えないしない
manifest_unresolvable待っている間にデプロイが 2 回以上重なり、投入時の宣言を使えなくなった数えないしない
quota_exhausted再試行、または月をまたいで開始する試行で、月間枠「バックグラウンド実行」を確保できなかった数えないしない

手動の再実行はありません。もう一度実行するには、アプリから投入し直してください。

keelson snapshots ... のエラーです。snapshot_export_ で始まるコードは、snapshots export で発生します。

コード意味対処
snapshot_plan_not_included手動スナップショットがプランに含まれない(現在は全プランで利用できるため、通常は発生しない)サポートに連絡する
snapshot_no_managed_dbManaged SQLite を使っていないdb.mode: libsql でデプロイし、DB を作成する
snapshot_db_name_invalid / snapshot_db_name_unknownDB 名が不正、または存在しないhint に出る名前を使う
snapshot_already_running / snapshot_export_already_running前の処理が実行中終わってから再試行
snapshot_rate_limited / snapshot_export_rate_limited回数上限hint の時刻まで待つ
snapshot_export_invalid_timestamp復元可能な範囲の外の時刻範囲内の時刻を指定する
snapshot_app_deleting / snapshot_export_app_deletingアプリが削除中—
snapshot_launch_failed / snapshot_export_launch_failed起動に失敗再試行。続くならサポートへ
snapshot_disabled / snapshot_storage_unconfigured(snapshot_export_ で始まるコードも同様)機能が無効、または保存先が未設定サポートへ連絡する
snapshot_not_readyまだダウンロードできない(X-Keelson-Error-Code ヘッダー)完了を待つ

コマンドの実行時に表示される主なコードです。

コード意味対処
not_logged_in未ログインkeelson login
multiple_workspaces / workspace_ambiguous / workspace_not_foundワークスペースを特定できない--workspace <slug> で指定する。keelson workspaces list --query <検索文字列> で検索できる
no_workspaces利用できるワークスペースがないコンソールでワークスペースを作成する
app_not_foundアプリが見つからないslug を確認。新規なら --new
app_manage_requiredアプリは存在するが、管理権限がない現在の管理者に、管理権限を持つグループへ自分を追加してもらう。ワークスペースの OWNER / ADMIN なら keelson groups members add <グループ> <メール> で自分を追加する
app_deleting削除中のアプリ完了を待つ
forbidden権限がない。CONSOLE_ONLY_OPERATION ならコンソール限定の操作ロール・アプリ権限を確認
confirmation_expired / confirmation_rejected承認の期限切れ(削除・SQL・復元は 15 分、preview / app curl は 30 分)/ 却下コマンドをやり直す
deploy_failedデプロイ失敗keelson diagnose <deploy_id>
sql_faileddb apply の SQL エラー。ロールバック済みSQL を直す
usage(access set。API の 409 detail.reason が last_manage_binding_removed / no_effective_manager / self_lockout)管理グループが空になる、有効な管理者がいなくなる、自分の権限が失われる管理グループを残す。--allow-self-lockout で解除できるのは自分が外れる場合だけで、管理グループや有効な管理者がゼロになる変更は解除できない
transient一時的なネットワークエラー--retry 3 のように再試行回数を指定して実行

旧コードとの互換性: ワークスペースに関する一部のコードでは、旧 tenant 名のコードを互換用の error.aliases に含めます。旧コードの撤去時期は未定です。

ブラウザでの承認が必要な場合

Section titled “ブラウザでの承認が必要な場合”

confirmation_required は、操作を進めるためにブラウザでの承認が必要なことを示します。表示された URL を開いて承認してください。

  • 削除・SQL・復元は承認と同時に実行されるため、コマンドの再実行は不要です。
  • preview / app curl は、承認後に --confirmation <id> を付けて同じコマンドを再実行してください。

AI エージェント向け Skill の更新案内

Section titled “AI エージェント向け Skill の更新案内”

meta.skill_outdated または keelson doctor の skill_outdated 警告は、インストール済みの Skill が CLI より古いことを示します。この警告だけでコマンドが失敗することはありません。keelson install-agent --yes で更新してください。

公開したアプリにアクセスしたときのエラー

Section titled “公開したアプリにアクセスしたときのエラー”

以下は公開したアプリを開いたときの案内です。コンソール自体のエラー画面ではありません。

表示状態対処
ログイン画面未ログインワークスペースに登録されたアカウントでログイン
「このアプリへのアクセス権限がありません」(403)メンバーでない、ブロック済み、アプリの閲覧権限がない管理者にメンバー登録・権限を依頼
「このアプリは、許可されたアクセス元からのみ利用できます」(403)IP 制御で拒否。画面に送信元 IP が表示される管理者に、表示された IP アドレスを許可するか確認してもらう
「アプリの稼働枠が空いていないため現状アプリが起動できません。」(503)同時に使えるアプリ数の上限通常は、枠を使っている別のアプリへのアクセスが約 5 分途絶えると空く。枠が空かない場合は、管理者にアプリの停止やプラン変更を相談する
「アプリを起動しています」スリープからの起動中自動で画面が切り替わるまで待つ
「このアプリは停止されています」(503)管理者による停止、または Keelson 側の制限措置管理者に停止理由を確認する。管理者が再開できない場合はサポートへ連絡する
「アプリが見つかりません」(404)URL に対応するアプリが見つからない。URL の誤り、アプリの停止・削除、作成直後の公開待ちなどURL とアプリの状態を確認する。作成直後なら少し待つ
「この URL は利用できません」(410)公開 URL が変更された(旧 URL は 30 日間予約)管理者に現在の URL を確認する

API や XHR から同じ状況になると、ゲートウェイの拒否では JSON の detail と X-Keelson-Auth-Error ヘッダーに理由(ip-restricted、app-view-denied など)が入ります。稼働枠不足と停止中は x-keelson-platform-error ヘッダー(capacity-full、app-suspended)です。

アプリへのリクエストで返る HTTP エラー

Section titled “アプリへのリクエストで返る HTTP エラー”

次のエラーは、アプリへのリクエストや接続で発生します。特に WebSocket 接続の 501 は、そのままブラウザの案内画面として表示されるものではなく、利用者への表示はアプリ側のエラー処理によって異なります。

HTTP ステータス原因アプリ開発者の対処
504アプリが 120 秒以内に応答ヘッダーを返し始めなかった。ストリーミング全体の時間制限ではない応答までの処理時間を短くする。時刻や間隔を指定して実行できる定期処理なら crons に移す
501Keelson が WebSocket に対応していないSSE やポーリングを使う

外部連携(アプリトークン / Webhook)

Section titled “外部連携(アプリトークン / Webhook)”

ゲートウェイで認証・認可が拒否された場合は、詳しい理由が X-Keelson-Auth-Error ヘッダーで返ります。IP 許可範囲による拒否でも、互換性のため JSON の detail は machine-forbidden または webhook-forbidden のままです。

ゲートウェイでは、アプリの経路が見つからない場合と、トークンが別のアプリのものである場合を、machine-forbidden / webhook-forbidden にまとめて返します。一方、ゲートウェイに届く前にエッジで URL の経路が見つからない場合は 404 になります。

X-Keelson-Auth-Error原因
invalid-app-tokenトークンが無効、または失効済み
machine-scope-deniedトークンに api スコープがない
machine-endpoint-deniedauth.endpoints で宣言されていないパス・メソッド
machine-forbidden / webhook-forbiddenゲートウェイでアプリの経路が見つからない、またはトークンが別のアプリのもの
machine-ip-not-allowedアプリトークンの許可 IP の外から呼ばれた
invalid-webhook-secretWebhook シークレットが一致しない
webhook-scope-deniedトークンに webhook スコープがない
webhook-ip-not-allowedWebhook トークンの許可 IP の外から呼ばれた

/api/webhooks/email などプラットフォーム予約のパスへの Webhook は、ゲートウェイより手前のエッジが 403 の平文で拒否します。このときのヘッダーは X-Keelson-Auth-Error ではなく x-keelson-platform-error: auth-webhook-endpoint-blocked です。