> ## Documentation Index
> Fetch the complete documentation index at: https://docs.assistable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Platform Tools

> Attach the standard tool kit to an assistant inline, by name

The `platform_tools` field on the Assistants API attaches platform (prebuilt)
tools by name in the same request that creates or updates an assistant — no
per-tool assign calls, no id discovery. It is accepted on
`POST /v3/assistants` and `PATCH /v3/assistants/{id}`. Successful
`POST /v3/assistants` responses and `GET /v3/assistants/{id}` return it.

## Declarative semantics

`platform_tools` is a declarative list scoped to the platform catalog:

* **Omitted** — attachments are not touched at all.
* **Provided** — the assistant's platform-tool attachments are made to match
  the list exactly: names in the list are attached, catalog tools missing
  from the list are detached.
* **`[]`** — explicitly detaches every platform tool.

Custom tools are never touched by this field, in either direction. They keep
their own lifecycle via `POST /v3/tools/{id}/assign` and
`DELETE /v3/tools/{id}/assign`, and the full attachment view (platform and
custom) remains `GET /v3/assistants/{id}/tools`. Input order is irrelevant
and duplicates are ignored; reads return names sorted alphabetically.

Names resolve strictly inside the platform catalog — a custom tool that
happens to reuse a catalog name can never be matched by this field.

## The catalog

| Name                         | Does                                                  |
| ---------------------------- | ----------------------------------------------------- |
| `book_appointment`           | Books an appointment on the connected calendar.       |
| `create_note`                | Writes a note onto the contact record.                |
| `create_task`                | Creates a follow-up task.                             |
| `get_availability`           | Reads open slots from the connected calendar.         |
| `get_user_calendar_events`   | Lists the contact's upcoming appointments.            |
| `scrape_website`             | Fetches and reads a web page.                         |
| `search_the_web`             | Runs a web search.                                    |
| `self_schedule`              | Lets the assistant schedule its own follow-up action. |
| `send_email`                 | Sends an email to the contact.                        |
| `update_appointment_details` | Reschedules or edits an existing appointment.         |
| `update_user_details`        | Updates fields on the contact record.                 |

`call_user`, `end_call`, and `press_key` are **not** attachable through this
field. `call_user` remains visible in the tools list and attachable via
`POST /v3/tools/{id}/assign`; call-control tools are managed by the platform.

Validation reports every offending name in a single 400 response,
distinguishing unknown names from deliberately excluded ones.

## Example

```json theme={null}
PATCH /v3/assistants/{id}
{
  "platform_tools": ["book_appointment", "get_availability", "send_email"]
}
```

A subsequent `GET /v3/assistants/{id}` returns:

```json theme={null}
{
  "platform_tools": ["book_appointment", "get_availability", "send_email"]
}
```

## Notes

* Tool changes made through this field propagate to the voice runtime via the
  assistant's automatic re-publish, same as every other assistant edit.
* Custom-tool assignment via the assign endpoint reaches live voice calls on
  the assistant's next publish — a pre-existing behavior documented here for
  completeness.
