# Occupancy Occupancy provides high level metrics about the clients attached to a channel. This includes the number of [connections](https://ably.com/docs/connect) currently attached to a channel, and the number of connections attached that are permitted to publish and subscribe to the channel. ## Occupancy metric categories The following are the metric categories that occupancy reports: | Metric | Description | |--------|-------------| | **connections** | The number of connections | | **publishers** | The number of connections that are authorized to publish | | **subscribers** | The number of connections that are authorized to subscribe to messages | | **presenceSubscribers** | The number of connections that are authorized to subscribe to presence messages | | **presenceConnections** | The number of connections that are authorized to enter members into the presence channel | | **presenceMembers** | The number of members currently entered into the presence channel | | **objectPublishers** | The number of connections that are authorized to publish updates to objects on the channel | | **objectSubscribers** | The number of connections that are authorized to subscribe to objects on the channel | ## Occupancy payload structure Details of a channel's occupancy are returned in the `metrics` property of a payload. If occupancy is returned as a `[meta]occupancy` event when subscribing to a channel using the [occupancy channel option](https://ably.com/docs/channels/options#occupancy), then `metrics` is part of the `data` property. The following is an example of a `[meta]occupancy` event: ```json { name: '[meta]occupancy', id: 'V12G5ABc_M:0:0', timestamp: 1612286351217, clientId: undefined, connectionId: undefined, connectionKey: undefined, data: { metrics: { connections: 1, publishers: 1, subscribers: 1, presenceConnections: 1, presenceMembers: 0, presenceSubscribers: 1, objectPublishers: 1, objectSubscribers: 1 } }, encoding: null, extras: undefined, size: undefined } ``` If occupancy is returned as part of a [REST request](https://ably.com/docs/metadata-stats/metadata/rest), then `metrics` are within a [`ChannelDetails`](https://ably.com/docs/api/realtime-sdk/channel-metadata#channel-details) object. The following is an example of a `ChannelDetails` object: ```json { data: { metrics: { connections: 1, } }, } ``` ## Retrieve channel occupancy Occupancy can be retrieved in the following ways: * In realtime, by subscribing to a channel with the [`occupancy` channel option](#realtime-occupancy) * For a single channel using a [REST request](#one-off-requests) * [Enumerating all active channels](#one-off-requests) in an app * Configure a [`channel.occupancy` rule source](#integrations) to send occupancy events to an external target, such as AWS Lambda or a webhook ### Realtime occupancy updates The [`occupancy` channel option](https://ably.com/docs/channels/options#occupancy) enables a client to subscribe to occupancy events related to a channel. Events are delivered to the client as messages on the channel. ### One off occupancy requests Occupancy can be queried via REST in the following ways: * Query a [single channel](https://ably.com/docs/metadata-stats/metadata/rest#single) to return its `ChannelDetails`, including its occupancy * [Enumerate](https://ably.com/docs/metadata-stats/metadata/rest#enumerate) a list of active channels in an app, including the occupancy of each ### Integrations [Integration rules](https://ably.com/docs/platform/integrations) can be configured with `channel.occupancy` set as a rule source. Occupancy events that occur on the selected channels will be pushed to external targets, such as AWS Lambda, or custom webhook endpoints.