# Book Appointment — Acuity Scheduling

> Book an appointment. See the documentation

- Key: `acuity_scheduling-book-appointment`
- Type: Action (Write)
- Version: 0.0.2
- App: Acuity Scheduling (`acuity_scheduling`) — https://pipedream.com/apps/acuity-scheduling.md
- This page (HTML): https://pipedream.com/apps/acuity-scheduling/actions/book-appointment
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/acuity_scheduling/actions/book-appointment/book-appointment.mjs

## Description

Book an appointment. [See the documentation](https://developers.acuityscheduling.com/reference/post-appointments)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `datetime` | `string` | Yes | Date and time of the appointment. E.g. 2016-02-03T14:00:00-0800 |
| `appointmentTypeId` | `string` | Yes | The type of appointment to book Options are loaded from the connected account. |
| `firstName` | `string` | Yes | First name of the client |
| `lastName` | `string` | Yes | Last name of the client |
| `isAdmin` | `boolean` | No | By default appointments are created as if they are being booked by a client. Booking as an admin disables availability and attribute validations, and allows setting the notes attribute. This also requires a valid calendarID to be included in the request. |
| `email` | `string` | No | Email address of the client |
| `calendarId` | `string` | No | The calendar to book the appointment on. If not provided we'll try to find an available calendar automatically. Options are loaded from the connected account. |
| `phone` | `string` | No | Phone number of the client |
| `timezone` | `string` | No | Timezone of the client. E.g. America/Los_Angeles |
| `certificate` | `string` | No | Package or coupon certificate code Options are loaded from the connected account. |
| `notes` | `string` | No | Notes to be added to the appointment. Settable when booking as an admin. |
| `labelId` | `string` | No | Label to be added to the appointment Options are loaded from the connected account. |
| `smsOptin` | `boolean` | No | Indicates whether the client has explicitly given their permission to receive SMS messages. This parameter is only applicable to Appointments with an Appointment Type that requires Opt In and can be omitted (and will be ignored) for all other Appointments. If omitted or set to false on an applicable Appointment, an SMS reminder will not be sent. For more information on SMS Opt In settings for Appointment Types, see the article in our Knowledge Base. |
| `formId` | `string` | No | Enter form fields for the appointment. See the documentation for more information on setting form fields. Options are loaded from the connected account. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "acuity_scheduling",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "acuity_scheduling-book-appointment",
  arguments: {
    datetime: "Datetime",
    appointmentTypeId: "Appointment Type ID",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "acuity_scheduling-book-appointment",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    acuity_scheduling: { authProvisionId: "apn_xxxxxxx" },
    datetime: "Datetime",
    appointmentTypeId: "Appointment Type ID",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "acuity_scheduling-book-appointment",
    "configured_props": {
      "acuity_scheduling": { "authProvisionId": "apn_xxxxxxx" },
      "datetime": "Datetime",
      "appointmentTypeId": "Appointment Type ID"
    }
  }'
```

---

- App: https://pipedream.com/apps/acuity-scheduling.md · All apps: https://pipedream.com/apps
