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

# GET /v1/subscriptions/:id

> Retrieve a single subscription by ID. Returns the full resource with up to 200 inlined address filters. Use the addresses endpoint for larger lists.

Use this endpoint to fetch a single subscription by its ID. The response includes up to 200 address filters inlined in the `filters.addresses` array. If you have attached more than 200 addresses to the subscription, `filters.hasMore` will be `true` and you should paginate the full list using the dedicated addresses endpoint.

## Request

**`GET /v1/subscriptions/:id`**

### Headers

| Header          | Required | Description               |
| --------------- | -------- | ------------------------- |
| `Authorization` | Yes      | `Bearer oth_YOUR_API_KEY` |

### Path parameters

<ParamField path="id" type="string" required>
  The subscription ID to retrieve. Always starts with `sub_`.
</ParamField>

### Example request

```bash theme={null}
curl https://api.offthehook.dev/v1/subscriptions/sub_2QkP9aB7xN... \
  -H "Authorization: Bearer oth_YOUR_API_KEY"
```

## Response

**`200 OK`**

```json theme={null}
{
  "id": "sub_2QkP9aB7xN...",
  "destination": { "type": "https", "url": "https://your-server.example.com/webhooks" },
  "events": ["wallet.transfer.broadcasted"],
  "filters": {
    "addresses": [
      { "chainId": "tron:mainnet", "address": "TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy" }
    ],
    "hasMore": false
  },
  "status": "enabled",
  "description": "Production wallet monitor",
  "dateCreated": "2026-05-08T12:00:00Z",
  "dateUpdated": "2026-05-08T12:00:00Z"
}
```

<Info>
  When `filters.hasMore` is `true`, there are more than 200 addresses attached to this subscription. Use `GET /v1/subscriptions/:id/filters/addresses` to paginate the full list.
</Info>

### Response fields

<ResponseField name="id" type="string" required>
  Unique subscription identifier, prefixed with `sub_`.
</ResponseField>

<ResponseField name="destination" type="object" required>
  Webhook delivery target.

  <Expandable title="destination properties">
    <ResponseField name="destination.type" type="string" required>
      Destination type. Currently always `"https"`.
    </ResponseField>

    <ResponseField name="destination.url" type="string" required>
      The HTTPS URL registered for this subscription.
    </ResponseField>
  </Expandable>
</ResponseField>

<Info>
  `destination.secret` is never returned by this endpoint. To retrieve a new secret, use `POST /v1/subscriptions/:id/secrets/rotate`.
</Info>

<ResponseField name="events" type="string[]" required>
  Event kinds this subscription is subscribed to.
</ResponseField>

<ResponseField name="filters" type="object" required>
  Address filters attached to this subscription.

  <Expandable title="filters properties">
    <ResponseField name="filters.addresses" type="object[]" required>
      Up to 200 inlined address filters. Each entry contains:

      * `chainId` — CAIP-2 chain identifier (e.g. `"tron:mainnet"`, `"tron:nile"`)
      * `address` — canonical base58check TRON address (e.g. `"TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy"`)
    </ResponseField>

    <ResponseField name="filters.hasMore" type="boolean">
      `true` when the subscription has more than 200 address filters. Use `GET /v1/subscriptions/:id/filters/addresses` to page through the full list.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="status" type="string" required>
  `"enabled"` or `"disabled"`.
</ResponseField>

<ResponseField name="description" type="string" required>
  Human-readable label. Empty string if none was set.
</ResponseField>

<ResponseField name="dateCreated" type="string" required>
  ISO 8601 timestamp of when the subscription was created.
</ResponseField>

<ResponseField name="dateUpdated" type="string" required>
  ISO 8601 timestamp of the most recent update.
</ResponseField>

## Errors

| Code           | Description                                                      |
| -------------- | ---------------------------------------------------------------- |
| `not_found`    | No subscription with the given ID exists under your API key.     |
| `unauthorized` | The `Authorization` header is missing or the API key is invalid. |
