# approve_booking

OWNER ONLY. Approve a booking awaiting business approval before its deadline. Requires business ownership and an idempotencyKey. Notifies the customer through the existing booking workflow.

Canonical: https://bookwise.live/docs/tools/approve_booking

Version: 1.1.0
Scope: Directory + business
Authentication: Owner session
Category: Owner operations

## Parameters

- **businessId** (string; required): Published business ID from search_businesses, or the business's booking-page slug (e.g. "studio-nine"); owner calls may also use the business ID shown in the dashboard.
- **bookingId** (string; required): Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID.
- **idempotencyKey** (string; required): Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action.

## Example MCP call

Replace placeholders with returned IDs and saved credentials. Example dates must be replaced with the customer's future dates.

```json
{
  "name": "approve_booking",
  "arguments": {
    "businessId": "<businessId>",
    "bookingId": "<bookingId>",
    "idempotencyKey": "<new-UUID-for-this-action>"
  }
}
```

## Input JSON Schema

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "businessId": {
      "type": "string",
      "minLength": 1,
      "description": "Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."
    },
    "bookingId": {
      "type": "string",
      "minLength": 1,
      "description": "Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."
    },
    "idempotencyKey": {
      "type": "string",
      "minLength": 8,
      "maxLength": 200,
      "description": "Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action."
    }
  },
  "required": [
    "businessId",
    "bookingId",
    "idempotencyKey"
  ]
}
```

## Output JSON Schema

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "held",
        "pending_verification",
        "pending_payment",
        "pending_approval",
        "confirmed",
        "cancelled",
        "expired",
        "no_show",
        "completed"
      ]
    }
  },
  "required": [
    "bookingId",
    "status"
  ],
  "additionalProperties": false
}
```

## Annotations

```json
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": true
}
```

On failure, inspect isError and content; domain errors may include structuredContent.code, retryable, details.fields or alternatives. Annotations are behavior hints, not authorization.
