---
source_url: https://www.pubnub.com/docs/sdks/angular/api-reference/presence
title: Presence API for AngularJS SDK
updated_at: 2026-09-30T07:20:08.000Z
---

# Presence API for AngularJS SDK

> For AI agents: documentation index at https://www.pubnub.com/llms-full.txt

Presence enables you to track the online and offline status of users and devices in real time, as well as store custom state information. Presence provides authoritative information on:

Presence lets you track who is online or offline and store custom state information. Presence shows:

* When a user has joined or left a channel
* Who, and how many, users are subscribed to a particular channel
* Which channel(s) an individual user is subscribed to
* Associated state information for these users

Learn more about our Presence feature in the [Presence overview](https://www.pubnub.com/docs/presence/overview.md).

## Here now

:::warning Requires Presence
This method requires that the Presence add-on is [enabled](https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-) for your key in the [Admin Portal](https://admin.pubnub.com/).
:::

This method returns information about the current state of a channel, including a list of unique user IDs (universally unique identifiers, UUIDs) currently subscribed to the channel and the total occupancy count of the channel.

:::note Cache
This method has a 3-second response cache time.
:::

### Method(s)

Use the following method in the AngularJS SDK:

```javascript
hereNow( {Array channels, Array channelGroups, Boolean includeUUIDs, Boolean includeState}, Function callback )
```

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| channels | Array | Optional |  | Specifies the `channel` name to return occupancy results. If `channel` is not provided, `hereNow()` will return data for all `channels`. |
| channelGroups | Array | Optional |  | The `channel group` for which here now information should be received. |
| includeUUIDs | Boolean | Optional | `true` | Setting `uuid` to `false` disables the return of uuids. |
| includeState | Boolean | Optional | `false` | Setting state to `true` enables the return of subscriber state information. |
| callback | Function | Optional |  | Executes on a successful/unsuccessful `hereNow`. |

### Sample code

```javascript
Pubnub.hereNow(
    {
        channels: ["ch1"],
        channelGroups : ["cg1"],
        includeUUIDs: true,
        includeState: true
    },
    function (status, response) {
        // handle status, response
    }
);
```

### Response

```javascript
type HereNowResponse = {
    channels: Array<string>,
}
```

### Other examples

#### Returning state

:::warning Requires Presence
This method requires that the Presence add-on is [enabled](https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-) for your key in the [Admin Portal](https://admin.pubnub.com/).
:::

```javascript
pubnub.hereNow(
    {
        channels: ["my_channel"],
        includeState: true
    },
    function (status, response) {
        // handle status, response
    }
);
```

**Example Response:**

```javascript
// Example of Status
{
    "error": false,
    "operation": "PNHereNowOperation",
    "statusCode": 200
}

// Example of Response
{
    "totalChannels": 1,
    "totalOccupancy": 3,
    "channels": {
        "my_channel": {
            "occupants": [
                {
                    "uuid": "User 1"
                },
                {
                    "state": {
                        "age": 18
                    },
                    "uuid": "User 2"
                },
                {
                    "state": {
                        "age": 24
                    },
                    "uuid": "User 3"
                }
            ],
            "name": "my_channel",
            "occupancy": 3
        }
    }
}
```

#### Return occupancy only

:::warning Requires Presence
This method requires that the Presence add-on is [enabled](https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-) for your key in the [Admin Portal](https://admin.pubnub.com/).
:::

To return only `occupancy` for a channel, set `includeUUIDs` to `false`:

```javascript
pubnub.hereNow(
    {
        channels: ["my_channel"],
        includeUUIDs: false
    },
    function (status, response) {
        // handle status, response
    }
);
```

**Example Response:** [](#here_now_example_3_exp_response)

```javascript
// Example of Status
{
    "error": false,
    "operation": "PNHereNowOperation",
    "statusCode": 200
}

// Example of Response
{
    "totalChannels": 1,
    "totalOccupancy": 3,
    "channels": {
        "my_channel": {
            "occupants": [],
            "name": "my_channel",
            "occupancy": 3
        }
    }
}
```

#### Channel group usage

:::warning Requires Presence
This method requires that the Presence add-on is [enabled](https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-) for your key in the [Admin Portal](https://admin.pubnub.com/).
:::

```javascript
Pubnub.hereNow(
    {
        channelGroups : ["my_channel_group"]
    },
    function (status, response) {
        // handle status, response
    }
);
```

**Example Response:**

```javascript
// Example of Status
{
    "error": false,
    "operation": "PNHereNowOperation",
    "statusCode": 200
}

// Example of Response
{
    "totalChannels": 2,
    "totalOccupancy": 3,
    "channels": {
        "my_channel_1": {
            "occupants": [
                {
                    "state": null,
                    "uuid": "User1"
                },
                {
                    "state": null,
                    "uuid": "User3"
                }
            ],
            "name": "my_channel_1",
            "occupancy": 2
        },
        "my_channel_2": {
            "occupants": [
                {
                    "state": null,
                    "uuid": "User2"
                }
            ],
            "name": "my_channel_2",
            "occupancy": 1
        }
    }
}
```

## Where now

:::warning Requires Presence
This method requires that the Presence add-on is [enabled](https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-) for your key in the [Admin Portal](https://admin.pubnub.com/).
:::

This method returns the list of channels a UUID is subscribed to.

:::note
If the app restarts (or the page refreshes) within the heartbeat window, no timeout event is generated.
:::

### Method(s)

Use the following method in the AngularJS SDK:

```javascript
whereNow ({String uuid},Function callback)
```

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| uuid | String | Optional | `current uuid` | Specifies the `uuid` to return channel list for. |
| callback | Function | Optional |  | Executes on a successful/unsuccessful `whereNow`. |

### Sample code

You simply need to define the `uuid` and the `callback` function to be used to send the data to as in the example below.

```javascript
// Get List of channels for uuid.

Pubnub.whereNow(
    {
        uuid: 'my_uuid'
    },
    function (status, response) {
        // handle status, response
    }
);
```

### Response

```javascript
// Example of Status
{
    error: false,
    operation: "PNWhereNowOperation",
    statusCode: 200
}

// Example of Response
{
    "channels": ["ch1", "ch2"]
}
```

## User state

:::warning Requires Presence
This method requires that the Presence add-on is [enabled](https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-) for your key in the [Admin Portal](https://admin.pubnub.com/).
:::

### Description

The state API is used to set/get key/value pairs specific to a subscriber `uuid`.

State information is supplied as a JSON object of key/value pairs.

### Method(s)

#### Set state

```javascript
setState({Array channels, Array channelGroups, Object state},Function callback)
```

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| channels | Array | Optional |  | Either `channels` or `channelGroups` should be provided, Specifies the `channels` to set the state. |
| channelGroups | Array | Optional |  | Either `channels` or `channelGroups` should be provided, Specifies the Channel Group to set the state |
| state | Object | Optional |  | JSON object of key/value pairs with supported data-types of int, float and string. Nesting of key/values is not permitted and key names beginning with prefix `pn` are reserved. If the state parameter is undefined, the current state for the specified `uuid` will be returned. If a specified key already exists for the `uuid` it will be over-written with the new value. Key values can be deleted by setting the particular value to `null`. |
| callback | Function | Optional |  | Executes on a successful/unsuccessful `setState`. |

#### Get state

```javascript
getState({String uuid, Arraychannels, ArraychannelGroups},Function callback)
```

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| uuid | String | Optional | `current uuid` | The subscriber `uuid` to get the current state. |
| channels | Array | Optional |  | Either `channels` or `channelGroups` should be provided, Specifies the `channels` to get the state. |
| channelGroups | Array | Optional |  | Either `channels` or `channelGroups` should be provided, Specifies the Channel Group to get the state. |
| callback | Function | Optional |  | Executes on a successful/unsuccessful `getState`. |

### Sample code

#### Set state

```javascript
Pubnub.setState(
    {
        state: {
            "Key": "Value"
        },
        channels: ["my_channel"]
    },
    function (status, response) {
        // handle status, response
    }
);
```

#### Get state

```javascript
Pubnub.getState(
    {
        uuid : "my_uuid",
        channels : ["my_channel"]
    },
    function (status, response) {
        // handle status, response
    }
);
```

### Response

#### Set state

```javascript
// Example of Status
{
    error: false,
    operation: "PNSetStateOperation",
    statusCode: 200
}

// Example of Response
{
    state: {
        me: 'typing'
    }
}
```

#### Get state

```javascript
// Example of Status
{
    error: false,
    operation: "PNGetStateOperation",
    statusCode: 200
}

// Example of Response
{
    channels: {
        ch1: {
            me: 'typing'
        }
    }
}
```

Last updated at: 2026-09-30T07:20:08.000Z
