> ## 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.

# Resume a paused subscription JSON Schema

> Resume a paused subscription JSON Schema contract. Includes route metadata, request parameters, response statuses, examples, and JSON fields for implementation.

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

Put one paused rule back into service. Nothing is buffered while a rule is paused, so the response hands back the window that was missed, how much of it was counted and what can be re-read from the REST routes, instead of replaying it. A rule that is already serving is left exactly as it is, with `gap` null. If resuming would be undone within seconds, because the plan has no webhook delivery or today's budget is already spent, the request is refused with the reason rather than granted and reversed. Your own on and off switch is never touched by a resume. Authenticate with an API key or a signed-in dashboard session. Costs no credits.

## Route Metadata

| Field                | Value                                    |
| -------------------- | ---------------------------------------- |
| Method               | `POST`                                   |
| Path                 | `/v1/webhooks/subscriptions/{id}/resume` |
| operationId          | `resumeWebhookSubscription`              |
| Tag                  | Webhooks - Subscriptions                 |
| Family               | Webhooks                                 |
| Deprecated or legacy | no                                       |

## Request Parameters

### Path Parameters

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "resumeWebhookSubscription path parameters",
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "description": "Subscription identifier.",
      "type": "string",
      "format": "uuid",
      "example": "3c1f0a52-8d6b-4f0e-9b1a-6f2c4d8e9a10",
      "x-parameter-location": "path"
    }
  }
}
```

## Response Contracts

### Status 200

The subscription, and the window it missed

#### application/json

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "resumeWebhookSubscription response 200",
  "description": "API response for resuming one paused subscription.",
  "type": "object",
  "properties": {
    "data": {
      "description": "A rule: one event type, one configuration, delivered to one endpoint.",
      "type": "object",
      "required": [
        "created_at",
        "enabled",
        "endpoint_id",
        "event_type",
        "filters",
        "id",
        "last_suppressed_count",
        "status",
        "suppressed_count"
      ],
      "properties": {
        "created_at": {
          "description": "When the rule was created.",
          "type": "string",
          "format": "date-time"
        },
        "enabled": {
          "description": "Your own on and off switch. Resuming a paused rule never changes it.",
          "type": "boolean",
          "example": true
        },
        "endpoint_id": {
          "description": "Endpoint that receives this rule's deliveries.",
          "type": "string",
          "format": "uuid"
        },
        "event_type": {
          "description": "Event type this rule subscribes to.",
          "type": "string",
          "example": "market.liquidation"
        },
        "filters": {
          "description": "What a subscription matches on. Every key is checked against the event type's catalog declaration, so an unknown key, an undeclared parameter or a condition on an undeclared metric is refused rather than ignored. The stored config is the normalised form: venues and addresses lowercased, declared parameters filled in at their defaults, and operators written in their canonical spelling.",
          "type": "object",
          "properties": {
            "addresses": {
              "description": "Wallets to match, for an address scoped event type. Every address must already be on your watched list. Omit to match all of them.",
              "type": "array",
              "items": {
                "type": "string"
              },
              "example": [
                "0x6b9e773128f453f5c2c60935ee2de2cbc5390a24"
              ]
            },
            "conditions": {
              "description": "Conditions on the event's metrics, all of which must hold for a delivery. At most 16 per subscription.",
              "type": "array",
              "items": {
                "description": "One condition on an event metric. The operator vocabulary is grouped by the metric's type; see `operators` on the event type.",
                "type": "object",
                "required": [
                  "metric",
                  "op"
                ],
                "properties": {
                  "metric": {
                    "description": "A metric declared by the event type.",
                    "type": "string",
                    "example": "notional_usd"
                  },
                  "op": {
                    "description": "Comparison to apply. Symbol spellings such as `>=` are accepted on the way in and stored in the canonical spelling shown here.",
                    "type": "string",
                    "enum": [
                      "greater_than",
                      "greater_than_or_equal",
                      "less_than",
                      "less_than_or_equal",
                      "equal",
                      "not_equal",
                      "between",
                      "not_between",
                      "in",
                      "not_in",
                      "contains",
                      "not_contains",
                      "starts_with",
                      "ends_with",
                      "before",
                      "after",
                      "is_empty",
                      "is_not_empty"
                    ],
                    "example": "greater_than_or_equal"
                  },
                  "value": {
                    "description": "What to compare against. A number, string, boolean or RFC 3339 timestamp for a single value comparison; a two entry `[low, high]` list for `between` and `not_between`; a non-empty list for `in` and `not_in`. Omitted for `is_empty` and `is_not_empty`.",
                    "example": 100000
                  }
                }
              }
            },
            "min_notional_usd": {
              "description": "Shorthand for a `notional_usd` at-or-above condition, kept for compatibility. It is stored as a condition, and it is mirrored back here as the loosest notional lower bound the config carries.",
              "type": "number",
              "example": 100000
            },
            "params": {
              "description": "Parameter values for the event type, keyed by the parameter names it declares. A declared parameter you leave out is stored at its default. A declared parameter may also be written at the top level of the config.",
              "type": "object",
              "additionalProperties": true,
              "example": {
                "max_age_s": 3600
              }
            },
            "symbols": {
              "description": "Instrument symbols to match. Omit to match every symbol.",
              "type": "array",
              "items": {
                "type": "string"
              },
              "example": [
                "BTC",
                "ETH"
              ]
            },
            "venue": {
              "description": "Venue or venues to match, from the event type's `venues` list. Accepts a single string, a pipe separated string or a list. Omit to match every covered venue.",
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "example": "hyperliquid"
            }
          }
        },
        "id": {
          "description": "Subscription identifier.",
          "type": "string",
          "format": "uuid"
        },
        "last_pause_reason": {
          "description": "Cause of the last pause that has already ended, in the same vocabulary as `pause_reason`.",
          "type": "string",
          "nullable": true
        },
        "last_paused_at": {
          "description": "Start of the last pause that has already ended.",
          "type": "string",
          "format": "date-time",
          "nullable": true
        },
        "last_resumed_at": {
          "description": "When that pause ended.",
          "type": "string",
          "format": "date-time",
          "nullable": true
        },
        "last_suppressed_count": {
          "description": "Matches suppressed during the last pause that has already ended.",
          "type": "integer",
          "format": "int64",
          "example": 0
        },
        "last_suppressed_first_at": {
          "description": "First suppressed match of that pause.",
          "type": "string",
          "format": "date-time",
          "nullable": true
        },
        "last_suppressed_last_at": {
          "description": "Most recent suppressed match of that pause.",
          "type": "string",
          "format": "date-time",
          "nullable": true
        },
        "pause_message": {
          "description": "Why this rule is paused and what clears it, in plain words. Present only while the rule is paused.",
          "type": "string",
          "example": "This rule was paused because the account reached its Pro plan limit of 50000 webhook deliveries in a day. The daily allowance resets at 2026-09-21 00:00 UTC, and a paused rule does not restart with it. Resume it with POST /v1/webhooks/subscriptions/resume."
        },
        "pause_reason": {
          "description": "Machine readable cause of the current pause, either `deliveries_per_day_cap` (the account reached its daily delivery limit) or `plan_no_webhooks` (the plan does not include webhook delivery). Null while the rule is serving. Render `pause_message` for people.",
          "type": "string",
          "nullable": true,
          "example": "deliveries_per_day_cap"
        },
        "paused_at": {
          "description": "Start of the current gap. Null while the rule is serving.",
          "type": "string",
          "format": "date-time",
          "nullable": true
        },
        "status": {
          "description": "`active` is serving. `auto_paused` means delivery was paused for you and nothing is being sent; it stays paused until you resume it.",
          "type": "string",
          "enum": [
            "active",
            "auto_paused"
          ],
          "example": "active"
        },
        "suppressed_count": {
          "description": "Matches observed but not delivered since the current pause began. A lower bound, not a total: occurrences no active rule asked for are never looked at.",
          "type": "integer",
          "format": "int64",
          "example": 0
        },
        "suppressed_first_at": {
          "description": "First suppressed match of the current pause.",
          "type": "string",
          "format": "date-time",
          "nullable": true
        },
        "suppressed_last_at": {
          "description": "Most recent suppressed match of the current pause.",
          "type": "string",
          "format": "date-time",
          "nullable": true
        }
      }
    },
    "gap": {
      "description": "The window the resume closed. Null when the rule was already serving, in which case nothing was changed.",
      "nullable": true,
      "allOf": [
        {
          "description": "The window a resume just closed. Nothing is buffered while a rule is paused, so this describes what was missed rather than replaying it.",
          "type": "object",
          "required": [
            "counted",
            "note",
            "paused_at",
            "replay_window",
            "resumed_at"
          ],
          "properties": {
            "counted": {
              "description": "Whether anything inside the window was counted. False means the count is null because nothing was looked at, not because nothing happened.",
              "type": "boolean",
              "example": true
            },
            "note": {
              "description": "What can and cannot be recovered for the window, and how.",
              "type": "string"
            },
            "pause_message": {
              "description": "The cause in plain words.",
              "type": "string",
              "nullable": true
            },
            "paused_at": {
              "description": "Start of the gap.",
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "reason": {
              "description": "Cause of the pause that was cleared. Null on a bulk resume whose rules were paused for more than one reason; each rule then carries its own.",
              "type": "string",
              "nullable": true,
              "example": "deliveries_per_day_cap"
            },
            "reasons": {
              "description": "Distinct causes across the resumed rules. Present on a bulk resume only.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "replay_window": {
              "description": "The gap as a window to re-read for yourself.",
              "type": "object",
              "properties": {
                "end": {
                  "description": "Window end.",
                  "type": "string",
                  "format": "date-time",
                  "nullable": true
                },
                "start": {
                  "description": "Window start.",
                  "type": "string",
                  "format": "date-time",
                  "nullable": true
                }
              }
            },
            "resumed_at": {
              "description": "End of the gap.",
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "suppressed_count": {
              "description": "Matches suppressed inside the window. Null when the rules were address scoped, because a paused address scoped rule is left out of the scan entirely and its occurrences were never looked at.",
              "type": "integer",
              "format": "int64",
              "nullable": true,
              "example": 0
            },
            "suppressed_first_at": {
              "description": "First suppressed match inside the window.",
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "suppressed_last_at": {
              "description": "Most recent suppressed match inside the window.",
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "uncounted_subscriptions": {
              "description": "How many of the resumed rules were address scoped, and therefore not counted. Present on a bulk resume only.",
              "type": "integer",
              "example": 0
            }
          }
        }
      ]
    },
    "note": {
      "description": "Present only when nothing changed, to say why.",
      "type": "string",
      "example": "This subscription was already active, so nothing changed."
    },
    "success": {
      "type": "boolean",
      "example": true
    }
  }
}
```

### Status 400

Invalid request

#### application/json

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "resumeWebhookSubscription response 400",
  "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": 400,
  "error": "Failed to deserialize query string: limit: invalid digit found in string",
  "error_code": "invalid_query_params",
  "request_id": "3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"
}
```

### Status 401

Authentication required

#### application/json

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "resumeWebhookSubscription 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 404

Resource not found

#### application/json

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "resumeWebhookSubscription response 404",
  "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": 404,
  "error": "Resource not found"
}
```

### Status 409

Today's delivery budget is already spent, so the rule would pause again immediately. Resume after the budget resets.

#### application/json

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "resumeWebhookSubscription response 409",
  "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": 409,
  "error": "You are still at today's delivery limit. This rule would pause again immediately. Resume after 2026-09-21 00:00 UTC.",
  "request_id": "3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05"
}
```

### Status 429

Rate limit exceeded

#### application/json

```json theme={"theme":"github-dark"}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "resumeWebhookSubscription 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"
}
```
