本文へスキップ
ecdsa.com

Webhooks

List webhook endpoints

GEThttps://ecdsa.com/api/v1/webhooks

The webhook endpoints of the API key's account, oldest first, each with its most recent delivery, and the number of endpoints the account's plan allows. Deliveries are POST requests with a JSON body, signed with ECDSA P-256 (ES256): headers ECDSA-Webhook-Id, ECDSA-Webhook-Timestamp and ECDSA-Signature (t=<unix seconds>,kid=<key id>,es256=<base64url r‖s>) over the UTF-8 bytes of "<id>.<t>.<raw body>". The public keys are the JWKS at https://ecdsa.com/.well-known/ecdsa-webhook-keys.json; every official SDK verifies deliveries with verifyWebhook().

API キー
必須(webhooks スコープが必要)
キー使用時のクォータ消費
呼び出しごとに 1 ユニット
レート制限
IP あたり毎分 60 リクエスト

リクエスト

この操作は入力を受け取りません。

レスポンス

200The account's webhook endpoints.

フィールド型必須説明
endpointsWebhookEndpoint[]はい
limitintegerはい

How many endpoints the account's plan allows.

  • 0 以上
keysstringはい

The JWKS with the public keys deliveries are signed with.

  • 形式 uri

ヘッダー: X-Request-Id · X-RateLimit-Limit · X-RateLimit-Remaining · X-RateLimit-Reset · X-Quota-Limit · X-Quota-Remaining · X-Quota-Reset

ステータス意味コード
401Unauthorized.
403Forbidden.
404Not found.
405Method not allowed.
429Too many requests.
500Internal server error.
503Service unavailable.
504Gateway timeout.

エラーのレスポンスにはすべて JSON エンベロープが含まれます。各コードの意味と対処法はエラー一覧表で確認できます。

例

The account's endpoints

curl
curl -sS 'https://ecdsa.com/api/v1/webhooks' \
  -H "authorization: Bearer $ECDSA_API_KEY"
JavaScript (fetch)
const response = await fetch("https://ecdsa.com/api/v1/webhooks", {
  headers: { authorization: `Bearer ${process.env.ECDSA_API_KEY}` },
});
console.log(response.status, await response.json());
Python (httpx)
import os

import httpx

response = httpx.get(
    "https://ecdsa.com/api/v1/webhooks",
    headers={"authorization": f"Bearer {os.environ['ECDSA_API_KEY']}"},
    timeout=30.0,
)
print(response.status_code, response.json())
レスポンス 200
{
  "endpoints": [
    {
      "id": "7349e17c-8b41-4fc1-b1a9-dca88578ca1c",
      "url": "https://hooks.example.com/ecdsa",
      "description": "Production alerts",
      "events": [
        "monitor.*"
      ],
      "enabled": true,
      "createdAt": "2026-10-20T07:34:27.000Z",
      "disabledAt": null,
      "disabledReason": null,
      "lastDelivery": {
        "id": "d651f9e5-2002-4bde-a6d0-e7439333a4bd",
        "type": "webhook.test",
        "status": "delivered",
        "attempts": 1,
        "createdAt": "2026-10-20T07:34:27.000Z",
        "lastAttemptAt": "2026-10-20T07:34:27.000Z",
        "lastStatusCode": 204,
        "lastError": null,
        "nextAttemptAt": null,
        "deliveredAt": "2026-10-20T07:34:27.000Z"
      }
    }
  ],
  "limit": 1,
  "keys": "https://ecdsa.com/.well-known/ecdsa-webhook-keys.json"
}

この例に対する API のレスポンスです。2026年10月20日にこのページ用に取得したもので、含まれる相対時間や日数はその日を基準にしています。

エラーコード

コードステータス意味
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.
forbidden_scope403The API key is valid but lacks a scope this operation requires; the message names it.
not_found404No operation exists at this path.
method_not_allowed405The path exists but does not accept this HTTP method; see the Allow header.
rate_limited429Too many requests — see Retry-After.
quota_exceeded429A 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.
internal_error500Unexpected server error.
service_unavailable503API keys cannot be verified right now (the key store is unreachable); retry shortly.
webhooks_unavailable503Webhooks are switched off on this server: it has no signing keys configured.
timeout504The operation did not finish within its time budget.

スキーマ

WebhookEndpoint

フィールド型必須説明
idstringはい
  • 形式 uuid
  • パターン ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
urlstringはい
descriptionstring | nullはい
eventsstring[]はい

Subscribed event types or families ("monitor.*"); empty receives every event.

enabledbooleanはい
createdAtstringはい

UTC time, ISO 8601.

  • 形式 date-time
disabledAtstring | nullはい
disabledReasonstring | nullはい

Why deliveries stopped: "consecutive_failures" after five failed deliveries in a row.

lastDeliveryWebhookDelivery | nullはい

WebhookDelivery

フィールド型必須説明
idstringはい

Delivery id, sent as ECDSA-Webhook-Id and as the body's id; the same on every retry.

typestringはい

Event type, e.g. "monitor.grade_changed" or "webhook.test".

statusstringはい
  • "pending"、"delivered"、または"failed" のいずれか
attemptsintegerはい
  • 0 以上
createdAtstringはい

UTC time, ISO 8601.

  • 形式 date-time
lastAttemptAtstring | nullはい
lastStatusCodeinteger | nullはい

HTTP status of the last attempt; null when no response arrived.

lastErrorstring | nullはい

Why the last attempt failed: "http_status" (any status outside 200–299, redirects included), "timeout", "address_refused", "tls_certificate", "endpoint_disabled", … ; null after a success.

nextAttemptAtstring | nullはい

When a pending delivery is tried again.

deliveredAtstring | nullはい

Error

The error envelope of every non-2xx response.

フィールド型必須説明
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

すべての操作は API リファレンスに掲載しています。