本文へスキップ
ecdsa.com

エラーコード

失敗した呼び出しには、HTTP ステータスと JSON エンベロープが返され、エンベロープの code に問題の内容が示されます。API が返すコードは、次の 25 種類ですべてです。v1 の範囲内でも新しいコードが追加されることがあります。未知のコードは HTTP ステータスに従って扱ってください。

エラーエンベロープ

エラーのボディはすべてこの形式です。code と message は常に含まれます。

フィールド型必須説明
errorobjectはい
error.codestringはい

Machine-readable error code. Each response lists the codes it can carry; new codes may be added within v1, so treat an unknown code by its HTTP status.

error.messagestringはい

Human-readable explanation (English).

error.requestIdstringいいえ

The X-Request-Id of this request — quote it when reporting a problem. Sent since v1.1.

error.detailobjectいいえ

Structured context for the error, such as the offending field; omitted when there is none.

  • メンバー名は任意
error.docsstringいいえ

Where the error codes are explained. Sent since v1.1.

  • 形式 uri

必須フィールドを省略したリクエストに対する、実際のエラーレスポンス:

curl
curl -sS 'https://ecdsa.com/api/v1/jwt/decode' \
  -H 'content-type: application/json' \
  -d '{}'
レスポンス 400
{
  "error": {
    "code": "missing_field",
    "message": "Field \"token\" is required and must be a non-empty string.",
    "requestId": "docs-example",
    "docs": "https://ecdsa.com/developers#errors"
  }
}

全コード一覧

コードHTTP意味発生する状況対処法SDK
invalid_json400The body is not valid JSON or not a JSON object; or the input nests arrays and objects more than 64 levels deep (JSON documents inside string fields count too), or is too complex to inspect for private keys.

よくある原因は、ボディが JSON ではなくフォームエンコード形式やプレーンテキストになっていること、トップレベルが JSON の配列や文字列になっていること、または自動生成した入力のネストが非常に深いことです。content-type ヘッダーは関係なく、判定の対象はボディです。

操作: Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, TLS signature-health grade for a domain, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

ボディには単一の JSON オブジェクトを送信してください。入力を自動生成している場合は、ネストの深さを確認してください。再試行なし
missing_field400A required field is absent or empty.

操作に必須のフィールドが存在しない、null、空、または文字列ではない場合です。publicKey を public_key と書くなど、名前の綴りが違っていることがよくあります。

操作: Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

メッセージに示されたフィールドを追加してください。必須フィールドは、その操作のリファレンスページに一覧があります。再試行なし
invalid_input400A field could not be parsed — the message explains exactly why.

フィールドはあるものの、解析できない場合です。鍵、署名、トークン、証明書が、その操作の認識できないエンコーディングまたは形式になっています。

操作: Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, Create a webhook endpoint

メッセージを確認してください。フィールドと理由が示されています。エンコーディング(hex、base64、PEM)と、署名の場合は曲線を確認してください。再試行なし
private_key_rejected400The request contains private-key material (a PEM PRIVATE KEY block, an OpenSSH, SSH2 or PuTTY private key, or a JWK with "d"). Never send private keys anywhere.

公開鍵だけが必要な場所に、鍵ファイル全体を貼り付けた場合です。PKCS#8 や SEC1 の PEM、OpenSSH や PuTTY の秘密鍵、「d」が残ったままの JWK が該当し、JSON を格納した文字列の中にネストされている場合も含みます。

操作: Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, TLS signature-health grade for a domain, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

公開データだけを送信してください。秘密鍵を扱う場合は、ブラウザーのツールを使ってください。ツールは手元のマシン上で動作し、何も送信しません。再試行なし
unsupported_algorithm400The token's algorithm is not one this operation verifies.

その操作が検証に対応していないアルゴリズム(HS*、RS*、PS*、EdDSA、ES256K、none)の JWT を送った場合です。

操作: Verify an ES256/ES384/ES512 JWT signature

この API が検証するのは ES256、ES384、ES512 です。ほかのアルゴリズムは、JWT ライブラリを使ってローカルで検証してください。HMAC のシークレットは、どこにも送信してはいけません。再試行なし
invalid_domain400Not a public DNS hostname (IP addresses, single-label names and paths are refused).

パスセグメントが、IP アドレス、localhost のようにドットを含まない名前、またはホスト名ではない文字列の場合です。名前の前後にあるスキーム、ポート、パスは先に取り除かれます。

操作: TLS signature-health grade for a domain

github.com のような公開ホスト名を送信してください。IP アドレスや内部の名前は、ここからはスキャンできません。再試行なし
scan_dns_error400The domain does not resolve in public DNS.

公開 DNS で名前を解決できない場合です。原因は、ドメインが存在しない(入力ミス、登録の期限切れ、内部 DNS にしかない名前)、A レコードも AAAA レコードもない、または DNS の障害です。

操作: TLS signature-health grade for a domain

綴りと、その名前に A または AAAA レコードがあることを確認してください。再試行なし
scan_private_address400The domain resolves (at least partly) to a private or reserved address.

名前のアドレスのいずれか(IPv4、IPv6、または IPv6 に埋め込まれた IPv4)が、内部ネットワークやループバックなどのプライベートまたは予約済みの範囲にある場合です。パブリックアドレスとプライベートアドレスが混在している場合は、全体が拒否されます。

操作: TLS signature-health grade for a domain

パブリックなインターネットから到達できるホストをチェックしてください。内部ホストはここからはスキャンできません。再試行なし
webhook_url_refusedAPI キー導入後400The webhook URL cannot receive deliveries: it is not https on port 443, its host is not a public DNS name, or the name does not resolve or resolves (at least partly) to a private or reserved address.

エンドポイントの作成時に、http の URL、443 以外のポート、IP アドレスや内部の名前、または DNS の応答にプライベートアドレスや予約済みアドレスを含むホストを指定した場合です。複数のアドレスのうち 1 つだけが該当する場合も同様です。

操作: Create a webhook endpoint

デフォルトのポートと公開ホスト名を使った https の URL を指定してください。メッセージには、URL が違反したルールと、アドレスが拒否された場合はそのアドレスと範囲が示されます。再試行なし
unauthorized401The Authorization or X-API-Key header is malformed, the API key is not valid (wrong checksum, unknown, revoked or expired), or the operation needs a key.

Authorization ヘッダーまたは X-API-Key ヘッダーがあるものの、形式が正しくない場合です。API キーの提供開始後は、不明なキー、失効したキー、期限切れのキーも該当します。

操作: Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, TLS signature-health grade for a domain, List webhook endpoints, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

匿名で呼び出す場合はヘッダーを削除し、そうでなければ完全で有効なキーを送信してください。再試行なし
forbidden_scopeAPI キー導入後403The API key is valid but lacks a scope this operation requires; the message names it.

操作に必要なスコープなしで作成されたキーを使った場合です。たとえば、scan スコープが必要なドメインのヘルスチェックの操作を、api スコープしか持たないキーで呼び出した場合が該当します。

操作: Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, TLS signature-health grade for a domain, List webhook endpoints, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

そのスコープを持つキーで呼び出してください。再試行なし
webhook_limit_reachedAPI キー導入後403The account already has as many webhook endpoints as its plan allows.

アカウントにプランの上限数のエンドポイントがすでにある状態で、エンドポイントを作成した場合です。無料プランの上限は 1 つです。

操作: Create a webhook endpoint

不要になったエンドポイントを削除してください。既存のエンドポイントの説明やイベントを変更する場合は、同じ URL で作成し直してください。再試行なし
not_found404No operation exists at this path.

/api/v1 の下のパスが、どの操作にも該当しない場合です(入力ミス、セグメントの不足や余分なセグメント)。

どの操作でも返される可能性があります。

パスを API リファレンスと照らし合わせて確認してください。操作は /api/v1 の下にあります。再試行なし
webhook_not_foundAPI キー導入後404The API key's account has no webhook endpoint with this id.

エンドポイントの ID が、キーのアカウントに属していない場合です(削除済み、入力ミス、または別のアカウントのもの)。

操作: Delete a webhook endpoint, Send a test event

GET /api/v1/webhooks でアカウントのエンドポイントを一覧表示し、その中の ID を使ってください。再試行なし
method_not_allowed405The path exists but does not accept this HTTP method; see the Allow header.

POST の操作を GET で呼び出した場合(たとえば、ブラウザーのアドレスバーで開いた場合)、またはその逆の場合です。

どの操作でも返される可能性があります。

Allow ヘッダーに示されたメソッドを使ってください。JSON ボディを受け取る操作は POST、それ以外は GET です。再試行なし
payload_too_large413The body exceeds 100 KB.

ボディが 100 KB を超えている場合です。多くは、証明書バンドルやファイル全体を 1 つのフィールドに貼り付けたことが原因です。

操作: Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

1 回の呼び出しで送る量を減らしてください(証明書チェーンもトークンも 1 つずつ)。再試行なし
rate_limited429Too many requests — see Retry-After.

現在の時間枠でリクエストが多すぎる場合です。キーなしでは IP ごと、キーありではキーごとに数えます。ドメインの実際のスキャンは、ホストごとの枠と全体の枠も消費します。

操作: API self-description, Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, TLS signature-health grade for a domain, List webhook endpoints, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

Retry-After に示された秒数だけ待ってから再試行し、利用側でもレスポンスをキャッシュしてください。最大 2 回再試行
quota_exceededAPI キー導入後429A daily or monthly quota of the API key's account is used up. X-Quota-Reset (and Retry-After) say when it starts over; retrying earlier cannot succeed.

キーを使った呼び出しで、アカウントの日次・月次のクォータユニット、または日次のドメインスキャン数を使い切った場合です。テスト用キーには、より小さい独自のクォータがあります。

操作: Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, TLS signature-health grade for a domain, List webhook endpoints, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

X-Quota-Reset に示された時刻より前に再試行しないでください。クォータがリセットされるのはその時刻で、それより早くはなりません。再試行なし
internal_error500Unexpected server error.

API が想定していない障害です。リクエスト ID とともにログに記録されますが、リクエストボディが記録されることはありません。

どの操作でも返される可能性があります。

問題が続く場合は、エラーボディの requestId を添えて報告してください。再試行なし
scan_unreachable502The domain refused or dropped the connection on port 443.

名前は解決できるものの、インターネットからポート 443 への TCP 接続がどれも成功しない場合です。原因は、HTTPS サーバーがない、ファイアウォールが接続を拒否または破棄している、またはホストが停止していることです。

操作: TLS signature-health grade for a domain

ホストがパブリックなインターネットに向けて、ポート 443 で HTTPS を提供していることを確認してください。最大 2 回再試行
scan_tls_error502The TLS handshake failed or presented no usable certificate.

ポート 443 への接続は確立するものの、TLS ハンドシェイクがアラートまたはプロトコルの不一致で終了する場合、またはサーバーがスキャナーで読み取れる証明書を送信しない場合です。

操作: TLS signature-health grade for a domain

サーバーの TLS 設定を確認してください。たとえば、ドメインのヘルスレポートで確認できます。最大 2 回再試行
service_unavailableAPI キー導入後503API keys cannot be verified right now (the key store is unreachable); retry shortly.

キーストアに接続できないため、提示されたキーを確認できない場合です。キーを提示した呼び出しが匿名として処理されることはありません。

操作: Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, TLS signature-health grade for a domain, List webhook endpoints, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

少し待ってから再試行してください。SDK は自動で再試行します。最大 2 回再試行
webhooks_unavailableAPI キー導入後503Webhooks are switched off on this server: it has no signing keys configured.

サーバーに webhook の署名鍵が設定されていないため、配信に署名できない場合です。鍵が設定されるまで、webhook のすべての操作がこのコードを返します。

操作: List webhook endpoints, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

リクエストを変更する必要はありません。このサーバーでは現在 webhook が無効になっています。後でもう一度試してください。最大 2 回再試行
scan_timeout504The scan did not finish in time.

名前解決、接続、または TLS ハンドシェイクに、スキャナーの許容時間より長くかかった場合です。原因は、ホストの応答が遅いか過負荷になっていること、またはパケットが通知なく破棄されていることです。

操作: TLS signature-health grade for a domain

後で再試行してください。応答が遅いホストや過負荷のホストでは、制限時間を超えることがあります。最大 2 回再試行
timeout504The operation did not finish within its time budget.

リクエストの処理が、制限時間の 10 秒を超えた場合です。リクエストの制限内に収まる入力で、これが起こることは想定されていません。

操作: API self-description, Verify an ECDSA signature, Convert a signature between DER and raw r‖s, Decode a JWT (no signature check), Verify an ES256/ES384/ES512 JWT signature, Decode an X.509 certificate or chain, List webhook endpoints, Create a webhook endpoint, Delete a webhook endpoint, Send a test event

一度だけ再試行してください。同じ入力で再びタイムアウトした場合は、エラーボディの requestId を添えて報告してください。最大 2 回再試行

再試行

公式 SDK は、429(quota_exceeded を除く)、502、503、504 を最大 2 回再試行します。待機時間は Retry-After の指定に従い(最大 60 秒)、指定がない場合はフルジッター付きの指数バックオフを使います。どの操作も入力だけで結果が決まる純粋関数なので、再試行は常に安全です。独自のクライアントでも同じルールに従うことができます。