---
title: "POST /v1/push/ticket"
method: POST
path: "/v1/push/ticket"
---

# POST /v1/push/ticket

`POST /v1/push/ticket`

## Request

- The document declares no server URL.
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `/authorize`, token URL `/oauth/token`, scopes: `email.read`)
  - HTTP bearer

Mint a ticket to open the push socket.

## Response `201`

The request has succeeded and a new resource has been created as a result.

- PushTicket: A ticket to open the push socket (docs/design/PUSH.md). A browser cannot set `Authorization` on a WebSocket, so the socket URL carries this instead: thirty seconds, one use, naming the hub that will redeem it. ⚠️ **The socket itself, `GET /v1/push?ticket=…` answering `101 Switching Protocols`, is not in this document** — neither TypeSpec nor OpenAPI has a construct for a WebSocket, so it is mounted by hand beside `/mcp` (UPSTREAM row 45). What it sends is a hint and never mail: `{"type":"changed","mailboxId":"…"}`, telling the tab to refetch what it shows.
  - `ticket` string, required: Pass as `?ticket=` on the socket URL, within `expiresAt`.
  - `expiresAt` string, date-time, required

## Other responses

- `401`: Access is unauthorized.
- `403`: Access is forbidden.
- `404`: The server cannot find the requested resource.
- `default`: An unexpected error response.

---

[API](https://skmtc.dev/foundermail/apis/mailbox.md) - [All operations](https://skmtc.dev/foundermail/apis/mailbox/llms.txt) - [OpenAPI document](https://skmtc.dev/foundermail/apis/mailbox/revisions/6a50628a86ed?raw)
