# POST /v2/devices/register

**Register a device**

Registers a device for the `mobile_push` webhook delivery channel. The Tickerbot mobile app calls this automatically on sign-in/foreground — you only call it directly if you are wiring push delivery yourself. Idempotent on the Expo push token: re-registering the same token returns the existing `device_id` rather than minting a new one, so OS-side token refresh never breaks webhooks pointed at the device. App reinstall mints a new token → new device_id (re-pick the device on your webhooks).

## Plan access

- **Plan access.** Included on every plan — but a device only receives anything once a `mobile_push` webhook targets it, and webhooks are paid (Hobby and above).
- **Rate limit.** Hobby 600/min · Pro 6,000/min · Scale 60,000/min.

## Body parameters

| Name | In | Type | Required | Description |
|------|----|----|----------|-------------|
| `expoPushToken` | body | string | yes | Expo push token in `ExponentPushToken[...]` form. Example: `ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]`. |
| `platform` | body | string | yes | Device platform. Enum: `ios`, `android`. |
| `deviceName` | body | string | no | Display name for the device picker. Max 60 characters. Example: `David's iPhone`. |

## Status codes

- **201** — The device record: `device_id`, `deviceName`, `platform`, `createdAt`, `lastSeen`. Same shape (200) when the token was already registered.
- **400** — Missing/malformed `expoPushToken`, invalid `platform`, or `deviceName` too long.

## Sample response

```json
{
  "as_of": "2026-07-27T14:25:40.000Z",
  "device_id": "dev_aB3xY9kQpLmZ",
  "deviceName": "iPhone 17",
  "platform": "ios",
  "createdAt": 1785161140,
  "lastSeen": 1785161140
}
```

## Examples

### Register

Request:

```shell
curl -X POST "https://api.tickerbot.io/v2/devices/register" \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"expoPushToken":"ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]","platform":"ios","deviceName":"iPhone 17"}'
```

Response (`200`):

```json
{
  "as_of": "2026-07-27T14:25:40.000Z",
  "device_id": "dev_aB3xY9kQpLmZ",
  "deviceName": "iPhone 17",
  "platform": "ios",
  "createdAt": 1785161140,
  "lastSeen": 1785161140
}
```

---

Interactive sandbox + parameter editor: https://tickerbot.io/docs/endpoints/devices/register
