# Get webhook subscription (`get_webhook_subscription`)

Reads one webhook subscription of the connected Store: its topic, destination URL and timestamps. The signing secret is not returned; it is shown once at creation and cannot be read back, so a lost secret is replaced by deleting the subscription and creating a new one. It requires the webhooks:read scope, has no side effects and is safe to retry.

- Source URL: https://www.signcustomiser.com/help/mcp/tools/get_webhook_subscription/
- Markdown URL: https://www.signcustomiser.com/help/mcp/tools/get_webhook_subscription.md
- MCP endpoint: https://web.signcustomiser.com/mcp
- Required scope: `webhooks:read`
- Behaviour: read

## Purpose

Confirm where one subscription delivers and which topic it carries, before changing or deleting it.

## Annotations

| Hint | Value |
| --- | --- |
| readOnlyHint | true |
| destructiveHint | false |
| idempotentHint | true |
| openWorldHint | false |

## Prerequisites

- A subscription id from list_webhook_subscriptions.
- A merchant has connected this store and approved the webhooks:read scope.

## Arguments

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `webhook_id` | integer | yes | The subscription id, from list_webhook_subscriptions. |

## Result

One subscription. Never a signing secret.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `request_id` | string | yes |  |
| `store` | object | yes |  |
| `store.id` | integer | yes |  |
| `store.name` | string | yes |  |
| `subscription` | object | yes | The subscription. Never a signing secret. |
| `subscription.id` | integer | yes |  |
| `subscription.topic` | string | yes |  |
| `subscription.url` | string | yes |  |
| `subscription.created_at` | string or null | no |  |
| `subscription.updated_at` | string or null | no |  |

## Error cases

| Code | Recovery |
| --- | --- |
| `insufficient_scope` | The connection was approved without webhooks:read. |
| `resource_not_found` | No subscription with that id belongs to this store. Call list_webhook_subscriptions to rediscover a valid id. |

## Example: Read one subscription

Request:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_webhook_subscription",
    "arguments": {
      "webhook_id": 42
    }
  }
}
```

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "structuredContent": {
      "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t",
      "store": {
        "id": 12,
        "name": "Demo Signs"
      },
      "subscription": {
        "id": 42,
        "topic": "product:created",
        "url": "https://example.com/webhooks/sign-customiser",
        "created_at": "2026-07-22T00:00:00Z",
        "updated_at": "2026-07-22T00:00:00Z"
      }
    }
  }
}
```

## Example: A subscription id from another store (error)

Request:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_webhook_subscription",
    "arguments": {
      "webhook_id": 987654
    }
  }
}
```

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "structuredContent": {
      "error": {
        "code": "resource_not_found",
        "title": "Resource not found",
        "detail": "The requested resource does not exist or does not belong to the authenticated store.",
        "recovery": "The identifier does not exist in this store. Use the matching list tool to rediscover a valid id."
      }
    }
  }
}
```
