# Account and discovery — tool reference

Generated from the OpenAPI document (`https://maison-labs.com/api/v1/openapi.json`). Field types are JSON Schema types; GET/DELETE inputs travel as path or query, other methods as a JSON body.

## `disable_my_api_key` — Disable my API key

Disable one of your own API keys (an id from `list_my_api_keys`); calls with it are refused at once — including this call's key if you name it. Needs no grant. 404 when you have no active key with that id. Use `disable_user_api_key` for someone else's key.

- REST: `DELETE https://maison-labs.com/api/v1/me/apikey/{keyId}`
- MCP tool / A2A skill: `disable_my_api_key`
- Needs: a valid API key
- Destructive — confirm with the user first.

Inputs:

| Field | Where | Type | Required | Notes |
| --- | --- | --- | --- | --- |
| `keyId` | path | string | yes | API key id (from list_my_api_keys); format uuid |

## `get_notice_summary` — Count my unread notices

Your unread operator notices by category, across every hotel you can read conversations of: agent replies (your Maison agent sessions), guest messages (conversations you are handling, with message and conversation counts), conversations needing attention, and agent notices (notify_operator actions), each with per-hotel counts, plus `total`. Use list_notices for the items.

- REST: `GET https://maison-labs.com/api/v1/notices/summary`
- MCP tool / A2A skill: `get_notice_summary`
- Needs: chat-logs READ (any)
- Read-only.

Inputs:

_No inputs._

## `list_my_api_keys` — List my API keys

Your own API keys, masked (prefix and last 4 characters — never the key itself), each with its description, creation, last use and whether it is disabled. Needs no grant. Use `disable_my_api_key` to stop one; keys are created from your profile in the console.

- REST: `GET https://maison-labs.com/api/v1/me/apikeys`
- MCP tool / A2A skill: `list_my_api_keys`
- Needs: a valid API key
- Read-only.

Inputs:

_No inputs._

## `list_my_connected_apps` — List my connected apps

The apps you have connected to your Maison account with OAuth (your active consents): each with the app, the scopes you granted (grouped by area), the hotels it may act on (`all` or a list), when you granted it and when it was last used. Needs no grant. Use `revoke_my_connected_app` to disconnect one.

- REST: `GET https://maison-labs.com/api/v1/me/connectedapps`
- MCP tool / A2A skill: `list_my_connected_apps`
- Needs: a valid API key
- Read-only.

Inputs:

_No inputs._

## `list_notices` — List my unread notices

Your unread operator notices, newest first: id, category, tone, summary, subject (an agent session, a conversation or an agent execution), hotel, count and times, plus `subjectTitle` (an agent session's title, null otherwise) and `clientName` (the hotel's name, null without one). Guest-message items are one per conversation (id `conversation:<clientId>:<sessionId>`). Filter by category or hotel; page with `cursor` (the previous page's `nextCursor`). Mark them read with mark_notices_read.

- REST: `GET https://maison-labs.com/api/v1/notices`
- MCP tool / A2A skill: `list_notices`
- Needs: chat-logs READ (any)
- Read-only.

Inputs:

| Field | Where | Type | Required | Notes |
| --- | --- | --- | --- | --- |
| `category` | query | enum: agent_reply \| guest_message \| attention \| agent_notice | no | Only this category |
| `clientId` | query | string | no | Only notices for this hotel; format uuid |
| `cursor` | query | string | no | nextCursor from the previous page |
| `limit` | query | integer | no | Page size (1–100); default 50 |

## `mark_notices_read` — Mark my notices read

Mark your unread operator notices read. Give exactly one of: `ids` (notice ids from list_notices), `subjectKind` + `subjectId` (everything about one agent session, conversation or agent execution), or `category` (every unread item of that category). A shared notice (attention) is resolved for every other operator by the first read. Returns `read` (items read) and the summary after the read, as get_notice_summary.

- REST: `POST https://maison-labs.com/api/v1/notices/read`
- MCP tool / A2A skill: `mark_notices_read`
- Needs: chat-logs READ (any)

Inputs:

| Field | Where | Type | Required | Notes |
| --- | --- | --- | --- | --- |
| `ids` | body | array of string | no | Notice ids to mark read |
| `subjectKind` | body | enum: agent_session \| conversation \| agent_execution | no | With subjectId: what the notices are about |
| `subjectId` | body | string | no | With subjectKind: its id |
| `category` | body | enum: agent_reply \| guest_message \| attention \| agent_notice | no | Every unread item of this category |

## `revoke_my_connected_app` — Disconnect one of my apps

Revoke one of your own OAuth consents (a grant id from `list_my_connected_apps`): the app's access tokens are refused within 30 seconds and it cannot refresh; connecting again asks for consent again. Idempotent. Needs no grant. 404 when the grant is unknown; 403 when it is someone else's.

- REST: `POST https://maison-labs.com/api/v1/me/connectedapp/{grantId}/revoke`
- MCP tool / A2A skill: `revoke_my_connected_app`
- Needs: a valid API key
- Destructive — confirm with the user first.

Inputs:

| Field | Where | Type | Required | Notes |
| --- | --- | --- | --- | --- |
| `grantId` | path | string | yes | Grant id |

## `whoami` — Who am I

The user behind the API key, whether they are Maison staff, every feature grant they hold (global or per client) and the client ids they can act on. Call this first to discover what the key may do; `GET /api/v1/tools` lists the callable tools.

- REST: `GET https://maison-labs.com/api/v1/me`
- MCP tool / A2A skill: `whoami`
- Needs: a valid API key
- Read-only.

Inputs:

_No inputs._
