# SideQuest Companion ## `POST /api/epgp/device-authorizations` **Start a companion sign-in** Starts a browser sign-in for SideQuest Companion and returns a code to show the member. No sign-in needed. **Request body** Model: {ref}`EpgpDeviceAuthorizationCreate ` | Field | Type | Required | Description | |---|---|---|---| | `device_name` | string | yes | | **Response `201` — The device code, the code to show, and the page to open.** Model: {ref}`EpgpDeviceAuthorizationCreated ` | Field | Type | Required | Description | |---|---|---|---| | `device_code` | string | yes | | | `user_code` | string | yes | | | `verification_uri` | string | yes | | | `verification_uri_complete` | string | yes | | | `expires_in` | integer | yes | | | `interval` | integer | yes | | ## `POST /api/epgp/device-authorizations/token` **Check a companion sign-in** Returns whether a companion sign-in is still waiting, approved (with its sync token) or denied. Always 200, so it never reveals whether a code exists. **Request body** Model: {ref}`EpgpDeviceAuthorizationPoll ` | Field | Type | Required | Description | |---|---|---|---| | `device_code` | string | yes | | **Response `200` — The sign-in's status.** Model: {ref}`EpgpDeviceAuthorizationPollResult ` | Field | Type | Required | Description | |---|---|---|---| | `status` | {ref}`DeviceAuthorizationPollStatus ` | yes | | | `token` | string \| null | no | | | `name` | string \| null | no | | ## `GET /api/epgp/device-authorizations/{user_code}` **Get a companion sign-in** Returns a waiting companion sign-in, so the member can check it before approving. **Parameters** | Name | In | Type | Required | Description | |---|---|---|---|---| | `user_code` | path | string | yes | The code the companion shows. | **Response `200` — The sign-in's status.** Model: {ref}`EpgpDeviceAuthorizationStatus ` | Field | Type | Required | Description | |---|---|---|---| | `user_code` | string | yes | | | `device_name` | string | yes | | | `created_at` | string (date-time) | yes | | | `expires_at` | string (date-time) | yes | | | `status` | {ref}`DeviceAuthorizationStatus ` | yes | | ## `POST /api/epgp/device-authorizations/{user_code}/approve` **Approve a companion sign-in** Approves a waiting companion sign-in, which gives the companion a sync token for this member. **Parameters** | Name | In | Type | Required | Description | |---|---|---|---|---| | `user_code` | path | string | yes | The code the companion shows. | **Response `204`** — The sign-in was approved. ## `POST /api/epgp/device-authorizations/{user_code}/deny` **Deny a companion sign-in** Denies a waiting companion sign-in. **Parameters** | Name | In | Type | Required | Description | |---|---|---|---|---| | `user_code` | path | string | yes | The code the companion shows. | **Response `204`** — The sign-in was denied. ## `GET /api/epgp/sync-tokens` **List my sync tokens** Returns the signed-in member's own sync tokens that are not revoked. **Response `200` — The sync tokens.** Model: {ref}`EpgpSyncTokenList ` | Field | Type | Required | Description | |---|---|---|---| | `tokens` | array of {ref}`EpgpSyncTokenSummary ` | yes | | ## `DELETE /api/epgp/sync-tokens/me` **Revoke this sync token** Revokes the Bearer sync token sent with the request, so SideQuest Companion can sign out. **Response `204`** — The sync token was revoked. ## `GET /api/epgp/sync-tokens/me` **Get the sync token owner's profile** Returns what the Bearer sync token's owner can see about themselves, for SideQuest Companion. **Response `200` — The token owner's profile.** Model: {ref}`EpgpSyncTokenMe ` | Field | Type | Required | Description | |---|---|---|---| | `display_name` | string | yes | | | `avatar_url` | string \| null | yes | | | `is_officer` | boolean | yes | | | `is_guild_member` | boolean | yes | | | `calendar_url` | string \| null | yes | | | `token_name` | string | yes | | ## `DELETE /api/epgp/sync-tokens/{token_id}` **Revoke one of my sync tokens** Revokes one of the signed-in member's own sync tokens. **Parameters** | Name | In | Type | Required | Description | |---|---|---|---|---| | `token_id` | path | string (uuid) | yes | The sync token's ID. | **Response `204`** — The sync token was revoked.