# List Paired Devices

Lists the iPhones and iPads paired to the account, active devices first. Use it to check that a device is paired before you send, or to find device IDs for Channels. An empty list means no device is paired yet: install the ActivitySmith app from the App Store and sign in. Channel-scoped API keys cannot list devices.

```http
GET https://activitysmith.com/api/account/devices
```

## Authentication

Use your [API key](/docs/api-keys) in the request header.

```http
Authorization: Bearer $YOUR_API_KEY
```

## Parameters

### limit

query parameter. Optional.

Maximum devices to return, 1 to 100. Defaults to 100.

Type: integer

**Minimum**: `1`; **Maximum**: `100`; **Default**: `100`

### offset

query parameter. Optional.

Devices to skip. Use meta.next_offset from the previous page.

Type: integer

**Minimum**: `0`; **Default**: `0`

### include_inactive

query parameter. Optional.

Include devices that can no longer receive deliveries, such as unpaired phones.

Type: boolean

**Default**: `false`

## Request examples

```javascript Node
import ActivitySmith from "activitysmith";

const activitysmith = new ActivitySmith({
  apiKey: process.env.ACTIVITYSMITH_API_KEY,
});

const { devices } = await activitysmith.devices.list();

for (const device of devices) {
  console.log(device.device_name, device.system_name, device.is_active);
}
```

```python Python
import os
from activitysmith import ActivitySmith

activitysmith = ActivitySmith(api_key=os.environ["ACTIVITYSMITH_API_KEY"])

result = activitysmith.devices.list()

for device in result.devices:
    print(device.device_name, device.system_name, device.is_active)
```

```go Go
package main

import (
	"fmt"
	"log"

	activitysmithsdk "github.com/ActivitySmithHQ/activitysmith-go"
)

func main() {
	activitysmith, err := activitysmithsdk.New("YOUR-API-KEY")
	if err != nil {
		log.Fatal(err)
	}

	result, err := activitysmith.Devices.List(activitysmithsdk.DeviceListInput{})
	if err != nil {
		log.Fatal(err)
	}

	for _, device := range result.GetDevices() {
		fmt.Println(device.GetDeviceName(), device.GetSystemName(), device.GetIsActive())
	}
}
```

```php PHP
<?php

use ActivitySmith\ActivitySmith;

$activitysmith = new ActivitySmith($_ENV['ACTIVITYSMITH_API_KEY']);

$result = $activitysmith->devices->list();

foreach ($result->getDevices() as $device) {
    echo $device->getDeviceName() . ' ' . $device->getSystemName() . PHP_EOL;
}
```

```ruby Ruby
require "activitysmith"

activitysmith = ActivitySmith::Client.new(api_key: ENV.fetch("ACTIVITYSMITH_API_KEY"))

result = activitysmith.devices.list

result.devices.each do |device|
  puts [device.device_name, device.system_name, device.is_active].join(" ")
end
```

```bash CLI
activitysmith devices list
```

```bash cURL
curl "https://activitysmith.com/api/account/devices" \
  -H "Authorization: Bearer $YOUR_API_KEY"
```

## Responses

### 200

Paired devices

Content type: `application/json`

### Schema: AccountDeviceListResponse

| Field | Type | Presence | Description | Constraints |
| --- | --- | --- | --- | --- |
| `devices` | array of `AccountDevice` | Required |  |  |
| `meta` | object | Required |  |  |
| `meta.total` | integer | Required | Devices matching the filter. |  |
| `meta.limit` | integer | Required |  |  |
| `meta.offset` | integer | Required |  |  |
| `meta.has_more` | boolean | Required |  |  |
| `meta.next_offset` | integer or null | Required | Offset for the next page, or null on the last page. |  |
| `meta.include_inactive` | boolean | Required |  |  |

**default**

```json
{
  "devices": [
    {
      "user_email": "you@example.com",
      "device_id": "4F1C2A8E-7B3D-4E21-9A6C-1D2E3F4A5B6C",
      "device_type": "ios",
      "is_active": true,
      "token_status": {
        "push": true,
        "start_live_activity": true
      },
      "app_version": "1.17.0",
      "device_name": "iPhone",
      "system_name": "iOS",
      "system_version": "27.0",
      "created_at": "2026-10-01T09:00:00.000Z",
      "updated_at": "2026-10-26T12:00:00.000Z"
    }
  ],
  "meta": {
    "total": 1,
    "limit": 100,
    "offset": 0,
    "has_more": false,
    "next_offset": null,
    "include_inactive": false
  }
}
```

**no devices**

```json
{
  "devices": [],
  "meta": {
    "total": 0,
    "limit": 100,
    "offset": 0,
    "has_more": false,
    "next_offset": null,
    "include_inactive": false
  }
}
```

### 403

The API key is limited to Channels

Content type: `application/json`

### Schema: ForbiddenError

| Field | Type | Presence | Description | Constraints |
| --- | --- | --- | --- | --- |
| `error` | string | Required |  |  |
| `message` | string | Required |  |  |

**Additional Properties**: `true`

### 429

Rate limit exceeded

Content type: `application/json`

### Schema: RateLimitError

| Field | Type | Presence | Description | Constraints |
| --- | --- | --- | --- | --- |
| `code` | string | Optional |  | **Enum**: `["rate_limited"]` |
| `error` | string | Required |  |  |
| `message` | string | Required |  |  |

**Additional Properties**: `false`

[Download the OpenAPI specification](/openapi.json)
