> ## Documentation Index
> Fetch the complete documentation index at: https://docs.0xarchive.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get webhook plan limits and usage JSON Schema

> Get webhook plan limits and usage JSON Schema contract. Includes parameters, response shapes, examples, and implementation notes from the 0xArchive contract.

Source OpenAPI: 0xArchive API 1.6.1; 168 paths; 190 component schemas.

What this plan allows for webhooks and what is currently in use: endpoints, subscriptions, watched wallets, today's delivery budget and how many subscriptions are paused. Free has no webhook delivery, so `included` is false and every cap is zero. Build allows 1 endpoint, 8 subscriptions, 2 watched wallets and 5,000 deliveries a day; Pro allows 4, 40, 15 and 50,000; Scale allows 12, 200, 50 and 500,000; Enterprise allows 100, 2,000, 250 and deliveries without a daily ceiling. The estimate and the dry-run stay available on every plan, so `preview_included` is always true. The delivery budget resets on its own and a paused subscription does not, which is why the paused count is reported here next to it. Authenticate with an API key or a signed-in dashboard session. Costs no credits.

## Route Metadata

| Field                | Value                         |
| -------------------- | ----------------------------- |
| Method               | `GET`                         |
| Path                 | `/v1/webhooks/limits`         |
| operationId          | `getWebhookLimits`            |
| Tag                  | Webhooks - Catalog and Limits |
| Family               | Webhooks                      |
| Deprecated or legacy | no                            |

## Response Contracts

### Status 200

Webhook plan limits and current usage

#### application/json

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "getWebhookLimits response 200",
  "description": "API response containing webhook plan limits and current usage.",
  "type": "object",
  "properties": {
    "data": {
      "description": "What this plan allows and what is in use, in one call. Every number is read from the same place the caps are enforced from, so a refusal and this report cannot disagree.",
      "type": "object",
      "required": [
        "deliveries_per_day",
        "endpoints",
        "included",
        "paused_subscriptions",
        "plan",
        "preview_included",
        "subscriptions",
        "watched_addresses"
      ],
      "properties": {
        "deliveries_per_day": {
          "description": "Today's delivery budget. The budget resets on its own; a paused rule does not.",
          "type": "object",
          "required": [
            "limit",
            "remaining",
            "resets_at",
            "unlimited",
            "used"
          ],
          "properties": {
            "limit": {
              "description": "Deliveries a day the plan allows. Null when the plan has no ceiling.",
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "example": 50000
            },
            "remaining": {
              "description": "Deliveries left today, never below zero. Null when the plan has no ceiling.",
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "example": 49588
            },
            "resets_at": {
              "description": "When the budget resets.",
              "type": "string",
              "format": "date-time"
            },
            "resets_at_note": {
              "description": "Present only while something is paused, to say that the reset time is the budget's and not the pause's.",
              "type": "string"
            },
            "unlimited": {
              "description": "True when the plan has no daily ceiling.",
              "type": "boolean",
              "example": false
            },
            "used": {
              "description": "Deliveries today.",
              "type": "integer",
              "format": "int64",
              "example": 412
            }
          }
        },
        "endpoints": {
          "description": "One cap: what the plan allows, what is in use, and what is left.",
          "type": "object",
          "required": [
            "limit",
            "remaining",
            "used"
          ],
          "properties": {
            "limit": {
              "description": "What the plan allows. Zero on a plan without webhook delivery.",
              "type": "integer",
              "format": "int64",
              "example": 4
            },
            "remaining": {
              "description": "What is left, never below zero. A plan change can leave an account legitimately over a cap.",
              "type": "integer",
              "format": "int64",
              "example": 3
            },
            "used": {
              "description": "In use now.",
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        },
        "included": {
          "description": "Whether the plan has webhook delivery at all. False on Free, where every cap is zero.",
          "type": "boolean",
          "example": true
        },
        "notice": {
          "description": "Why the caps are zero, and what to do about it. Present only on a plan without webhook delivery.",
          "type": "string"
        },
        "paused_subscriptions": {
          "description": "Paused rules on the account. Always present, so zero paused needs no special case.",
          "type": "object",
          "required": [
            "count",
            "reasons"
          ],
          "properties": {
            "count": {
              "description": "How many rules are paused and delivering nothing.",
              "type": "integer",
              "format": "int64",
              "example": 0
            },
            "earliest_paused_at": {
              "description": "Start of the oldest pause still in force.",
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "message": {
              "description": "What is paused and what clears it, in plain words. Present only when something is paused.",
              "type": "string"
            },
            "reasons": {
              "description": "Distinct causes across the paused rules: the account reached its daily delivery limit, or the plan does not include webhook delivery.",
              "type": "array",
              "items": {
                "type": "string"
              },
              "example": []
            }
          }
        },
        "plan": {
          "description": "The plan webhook decisions are priced at.",
          "type": "string",
          "example": "pro"
        },
        "plan_label": {
          "description": "The plan's display name, or null for a plan this build cannot name.",
          "type": "string",
          "nullable": true,
          "example": "Pro"
        },
        "preview_included": {
          "description": "Whether the estimate and the dry-run are available. True on every plan, including Free.",
          "type": "boolean",
          "example": true
        },
        "subscriptions": {
          "description": "One cap: what the plan allows, what is in use, and what is left.",
          "type": "object",
          "required": [
            "limit",
            "remaining",
            "used"
          ],
          "properties": {
            "limit": {
              "description": "What the plan allows. Zero on a plan without webhook delivery.",
              "type": "integer",
              "format": "int64",
              "example": 4
            },
            "remaining": {
              "description": "What is left, never below zero. A plan change can leave an account legitimately over a cap.",
              "type": "integer",
              "format": "int64",
              "example": 3
            },
            "used": {
              "description": "In use now.",
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        },
        "watched_addresses": {
          "description": "One cap: what the plan allows, what is in use, and what is left.",
          "type": "object",
          "required": [
            "limit",
            "remaining",
            "used"
          ],
          "properties": {
            "limit": {
              "description": "What the plan allows. Zero on a plan without webhook delivery.",
              "type": "integer",
              "format": "int64",
              "example": 4
            },
            "remaining": {
              "description": "What is left, never below zero. A plan change can leave an account legitimately over a cap.",
              "type": "integer",
              "format": "int64",
              "example": 3
            },
            "used": {
              "description": "In use now.",
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        }
      }
    },
    "success": {
      "type": "boolean",
      "example": true
    }
  }
}
```

### Status 401

Authentication required

#### application/json

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "getWebhookLimits response 401",
  "description": "Error response",
  "type": "object",
  "properties": {
    "code": {
      "description": "HTTP status code",
      "type": "integer"
    },
    "error": {
      "description": "Error message",
      "type": "string"
    },
    "error_code": {
      "description": "Machine-readable error code. Common values: `invalid_query_params` (a query parameter failed to parse or validate) and `invalid_path_params` (a path parameter failed to parse). Other endpoint-specific codes exist; treat unknown codes as generic errors of the given HTTP status.",
      "type": "string"
    },
    "request_id": {
      "description": "Unique request ID for support",
      "type": "string",
      "format": "uuid"
    }
  }
}
```

##### OpenAPI example

```json theme={"theme":"github-dark"}
{
  "code": 401,
  "error": "Missing or invalid API key. Provide X-API-Key header."
}
```

### Status 429

Rate limit exceeded

#### application/json

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "getWebhookLimits response 429",
  "description": "Error response",
  "type": "object",
  "properties": {
    "code": {
      "description": "HTTP status code",
      "type": "integer"
    },
    "error": {
      "description": "Error message",
      "type": "string"
    },
    "error_code": {
      "description": "Machine-readable error code. Common values: `invalid_query_params` (a query parameter failed to parse or validate) and `invalid_path_params` (a path parameter failed to parse). Other endpoint-specific codes exist; treat unknown codes as generic errors of the given HTTP status.",
      "type": "string"
    },
    "request_id": {
      "description": "Unique request ID for support",
      "type": "string",
      "format": "uuid"
    }
  }
}
```

##### OpenAPI example

```json theme={"theme":"github-dark"}
{
  "code": 429,
  "error": "Rate limit exceeded"
}
```
