---
title: "Register (upsert) a phone's Expo push token"
method: POST
path: "/api/v1/push/devices"
tags: ["push"]
---

# Register (upsert) a phone's Expo push token

`POST /api/v1/push/devices`

## Request body

- RegisterPushDeviceRequest
  - `deviceName` string — Human-friendly device label.
  - `installId` string — Stable per-install device id, keying the registry so a rotated push token updates the same row. Optional: older app builds omit it and the daemon synthesizes one.
  - `platform` 'ios' | 'android' — Device platform.
  - `token` string — Expo push token, e.g. ExponentPushToken[...]. Optional: omitted when the phone has no push token yet.

## Response `200`

OK

- PushDeviceEnvelope
  - `device` PushDeviceResponse, required
    - `createdAt` string, date-time, required
    - `deviceName` string
    - `lastSeenAt` string, date-time, required
    - `platform` string
    - `token` string

## Other responses

- `400` — Bad Request
- `500` — Internal Server Error
- `501` — Not Implemented

---

[API](https://skmtc.net/composiohq/apis/agent-orchestrator-http-daemon.md) · [All operations](https://skmtc.net/composiohq/apis/agent-orchestrator-http-daemon/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/composiohq/agent-orchestrator-http-daemon/revisions/cfefbf47dc04/schema)
