> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Crisp

The Crisp connector lets your AI agent act in each user's Crisp account. Each user connects their own Crisp username and password once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 50 tools.

**Authentication:** Website Token (Basic Auth)
**Categories:** Customer Support, Communication
**Tools:** 50: 34 read, 14 write, 2 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=CRISP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Crisp connection

   In **AgentKit > Connections**, create a Crisp connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'crisp_count_visitors',
  toolInput: {
    website_id: '<website_id>',
  },
  connector: 'crisp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="crisp_count_visitors",
    tool_input={
        "website_id": "<website_id>",
    },
    connection_name="crisp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `crisp_count_visitors`

Count Visitors · Read-only

Count the visitors currently on the website.
Returns count, active (actively browsing) and limited (true when sockets are limited by high traffic).
Use crisp_list_visitors to see who they are.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"website_id":"<website_id>"}`

### `crisp_generate_analytics`

Generate Analytics · Read-only

Generate an analytics report for a metric and type over a date range, such as conversation totals or response time.
Returns the computed series in the data object for the requested split.
This only reads data. Requires a Crisp plan with analytics access.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `date` (`object`, required): Date range. Object with from and to as ISO 8601 date-times, split (all, hourly, daily, weekly, monthly or yearly) and timezone as an IANA name. Example: {"from": "2026-01-01T00:00:00.000Z", "to": "2026-02-01T00:00:00.000Z", "split": "daily", "timezone": "Europe/Paris"}.
- `metric` (`string`, required): Metric to analyze. Example: conversation for conversation counts, message for message volume, people_created for new contacts. One of: `conversation`, `conversation_assigned`, `conversation_shortcut`, `conversation_segment`, `conversation_state`, `helpdesk_read`, `helpdesk_search`, `visitor_visit`, `visitor_trigger`, `campaign_activity`, `campaign_sent`, `people_created`, `status_downtime`, `message`.
- `type` (`string`, required): Kind of analysis for the metric. Valid values depend on the metric; total works for most, while response_time and resolution_time fit conversation metrics. One of: `total`, `unique`, `response_time`, `resolution_time`, `handle_time`, `messages`, `visitor_messages`, `operator_messages`, `rating`, `operator`.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `aggregator` (`string`, optional): How values are aggregated over the period. One of: `average`, `moving_average`, `median`, `minimum`, `maximum`, `sum`.
- `filter` (`object`, optional): Filter options, which depend on the metric. Example: {"inbox_id": "f4e5d6c7-b8a9-4012-8345-6789abcdef01"}.
- `raw_export` (`boolean`, optional): When true, return the data in raw format.
- `split_by` (`string`, optional): Key to split results by.

Example input: `{"date":{"from":"2026-01-01T00:00:00.000Z","to":"2026-02-01T00:00:00.000Z","split":"daily","timezone":"Europe/Paris"},"metric":"conversation","type":"total","website_id":"<website_id>"}`

### `crisp_get_availability_status`

Get Website Availability Status · Read-only

Check whether the website chatbox currently shows as online, away or offline to visitors.
Returns status (online, away or offline) and since, the timestamp of the last status change.
Use crisp_list_operator_availabilities to see availability per operator instead.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"website_id":"<website_id>"}`

### `crisp_get_conversation`

Get Conversation · Read-only

Retrieve one conversation by session id.
Returns session_id, state, inbox_id, people_id, availability, last_message, unread counts, participants, mentions and created and updated timestamps.
Use crisp_list_messages to read the messages themselves. Use crisp_get_conversation_meta for visitor details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_get_conversation_meta`

Get Conversation Meta · Read-only

Retrieve the visitor details attached to a conversation.
Returns nickname, email, phone, address, subject, origin, ip, data, segments and device information.
Use crisp_get_people_profile for the saved CRM profile instead.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_get_conversation_participants`

Get Conversation Participants · Read-only

Retrieve the external participants of a conversation, such as email addresses in CC.
Returns a participants array of objects with type and target.
Use crisp_get_conversation for general conversation details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_get_conversation_routing`

Get Conversation Routing · Read-only

Retrieve the operator a conversation is currently assigned to.
Returns assigned.user_id inside the data object, or an empty assignment when unassigned.
Use crisp_assign_conversation_routing to assign or unassign.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_get_conversation_state`

Get Conversation State · Read-only

Retrieve the state of a conversation: pending, unresolved or resolved.
Returns state inside the data object.
Use crisp_update_conversation_state to change it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_get_helpdesk`

Get Helpdesk · Read-only

Retrieve the helpdesk (knowledge base) name and public URL for the website.
Returns name and url.
Use crisp_list_helpdesk_locales to see which languages exist.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"website_id":"<website_id>"}`

### `crisp_get_helpdesk_page_entity`

Get Helpdesk Page · Read-only

Resolve one published helpdesk page by entity id.
Returns entity_id, title, tree_path and public url.
Use crisp_list_helpdesk_pages to find entity ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): Content entity identifier from crisp_list_helpdesk_pages. Example: 9f8e7d6c-5b4a-4321-8fed-cba987654321.
- `locale` (`string`, required): Helpdesk locale code, as returned in locale by crisp_list_helpdesk_locales. Example: en.
- `type` (`string`, required): Helpdesk content type: articles, guides, references or news. One of: `articles`, `guides`, `references`, `news`.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"entity_id":"<entity_id>","locale":"<locale>","type":"articles","website_id":"<website_id>"}`

### `crisp_get_inbox`

Get Inbox · Read-only

Retrieve one inbox by id.
Returns inbox_id, name, emoji, order, member operators and teams.
Use crisp_list_inboxes to find inbox ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `inbox_id` (`string`, required): Inbox identifier from crisp_list_inboxes. Example: f4e5d6c7-b8a9-4012-8345-6789abcdef01.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"inbox_id":"<inbox_id>","website_id":"<website_id>"}`

### `crisp_get_message`

Get Conversation Message · Read-only

Retrieve a single message in a conversation by its fingerprint.
Returns the message with type, from, origin, content, fingerprint, timestamp and user.
Use crisp_list_messages to find fingerprints.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `fingerprint` (`number`, required): Unique numeric fingerprint of the message, as returned in fingerprint by crisp_list_messages. Example: 1767225600123.
- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"fingerprint":1767225600123,"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_get_operator`

Get Operator · Read-only

Retrieve one website operator by user id.
Returns user_id, email, avatar, first_name, last_name, role, title and availability.
Use crisp_list_operators to find user ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `user_id` (`string`, required): User identifier of the operator, from crisp_list_operators. Example: 7d2f1c3e-5a6b-4c8d-9e0f-1a2b3c4d5e6f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"user_id":"<user_id>","website_id":"<website_id>"}`

### `crisp_get_people_data`

Get People Data · Read-only

Retrieve the custom key-value data stored on a contact.
Returns the stored data object, which may be empty.
Use crisp_update_people_data to change it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"people_id":"<people_id>","website_id":"<website_id>"}`

### `crisp_get_people_profile`

Get People Profile · Read-only

Retrieve one contact profile by people id or email address.
Returns people_id, email, person, company, employment, segments, notepad and timestamps.
Use crisp_list_people_profiles to search when you do not have an id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"people_id":"<people_id>","website_id":"<website_id>"}`

### `crisp_get_people_stats`

Get People Statistics · Read-only

Count the contacts stored in the website CRM.
Returns total, the number of people profiles.
Use crisp_list_people_profiles to browse the profiles.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"website_id":"<website_id>"}`

### `crisp_get_people_subscription`

Get People Subscription · Read-only

Check whether a contact is subscribed to emails.
Returns email, true when subscribed.
Use crisp_update_people_subscription to change it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"people_id":"<people_id>","website_id":"<website_id>"}`

### `crisp_get_team`

Get Team · Read-only

Retrieve one operator team by id.
Returns team_id, name, emoji, the user ids of its operators and timestamps.
Use crisp_list_teams to find team ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `team_id` (`string`, required): Team identifier from crisp_list_teams. Example: a1b2c3d4-e5f6-4789-8abc-def012345678.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"team_id":"<team_id>","website_id":"<website_id>"}`

### `crisp_get_website`

Get Website · Read-only

Retrieve the name, domain, logo and verification status of a Crisp website (workspace).
Returns website_id, name, domain, logo, verified and institutional inside the data object.
Use crisp_get_website for basic identity. Use crisp_get_website_settings for the full configuration.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"website_id":"<website_id>"}`

### `crisp_get_website_settings`

Get Website Settings · Read-only

Retrieve the current configuration of a Crisp website, including chatbox, email, contact form and auditing settings.
Returns the data object with website_id, name, domain, alternate domains, logo and the nested settings groups.
Use crisp_get_website for just the name and domain. Use this tool when you need configuration details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"website_id":"<website_id>"}`

### `crisp_list_conversation_events`

List Conversation Events · Read-only

List the stacked events recorded in a conversation, such as page visits and custom events.
Returns events with text, data, color and timestamp.
Use crisp_list_people_events for events stored on the contact profile.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `page_number` (`string`, optional): Page number of events to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_list_conversation_files`

List Conversation Files · Read-only

List the files shared in a conversation, extracted from its messages.
Returns each file's name, MIME type, url, fingerprint and timestamp.
Use crisp_list_messages when you need the surrounding messages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `page_number` (`string`, optional): Page number of files to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_list_conversations`

List Conversations · Read-only

List conversations in a Crisp website, optionally filtered by search text, inbox, state, assignment or date range.
Returns one page of conversations with session_id, state, people_id, inbox_id, last_message, unread counts and timestamps.
Use crisp_get_conversation for the full detail of a single conversation. Use crisp_list_people_conversations for one contact's conversations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `filter_assigned` (`string`, optional): Only return conversations assigned to this operator user_id (from crisp_list_operators).
- `filter_date_end` (`string`, optional): Only return conversations updated on or before this ISO 8601 date-time. Example: 2026-02-01T00:00:00.000Z.
- `filter_date_start` (`string`, optional): Only return conversations updated on or after this ISO 8601 date-time. Example: 2026-01-01T00:00:00.000Z.
- `filter_inbox_id` (`string`, optional): Only return conversations in this inbox. Use the inbox_id from crisp_list_inboxes, or the word all for every inbox.
- `filter_mention` (`string`, optional): Only return conversations where the authenticated user is mentioned. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `filter_not_resolved` (`string`, optional): Only return conversations that are not resolved. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `filter_resolved` (`string`, optional): Only return resolved conversations. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `filter_scheduled` (`string`, optional): Only return conversations that contain scheduled messages created by the authenticated user. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `filter_unassigned` (`string`, optional): Only return conversations not assigned to any operator. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `filter_unread` (`string`, optional): Only return conversations with unread messages. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `include_empty` (`string`, optional): Include conversations that contain no message. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `order_date_created` (`string`, optional): Order conversations by creation date instead of the default order. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `order_date_updated` (`string`, optional): Order conversations by last update date instead of the default order. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `order_date_waiting` (`string`, optional): Order conversations by longest waiting time; this also drops conversations that are not waiting for a reply. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `page_number` (`string`, optional): Page number of conversations to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.
- `per_page` (`string`, optional): Number of conversations per page, between 20 and 50. Crisp defaults to 20.
- `search_operator` (`string`, optional): Boolean operator combining filters when search_type is filter. Crisp defaults to and. One of: `and`, `or`.
- `search_query` (`string`, optional): Text to search for in all conversations. Used together with search_type. Example: refund request.
- `search_type` (`string`, optional): How to interpret search_query: text for a text search, segment to match a segment name, or filter for a filter expression. One of: `text`, `segment`, `filter`.

Example input: `{"website_id":"<website_id>"}`

### `crisp_list_helpdesk_locales`

List Helpdesk Locales · Read-only

List the locales (languages) configured for the website helpdesk.
Returns locales with locale_id, locale code, public url and content statistics per type.
Use the locale code with crisp_list_helpdesk_pages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `page_number` (`string`, optional): Page number of helpdesk locales to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.

Example input: `{"website_id":"<website_id>"}`

### `crisp_list_helpdesk_pages`

List Helpdesk Pages · Read-only

List published helpdesk pages for a locale and content type.
Returns pages with entity_id, title, tree_path and public url.
Use crisp_get_helpdesk_page_entity to resolve one page by entity id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `locale` (`string`, required): Helpdesk locale code, as returned in locale by crisp_list_helpdesk_locales. Example: en.
- `type` (`string`, required): Helpdesk content type: articles, guides, references or news. One of: `articles`, `guides`, `references`, `news`.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `page_number` (`string`, optional): Page number of helpdesk pages to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.

Example input: `{"locale":"<locale>","type":"articles","website_id":"<website_id>"}`

### `crisp_list_inboxes`

List Inboxes · Read-only

List the inboxes of the website.
Returns inboxes with inbox_id, name, emoji, order, member operators and teams.
Use crisp_get_inbox for one inbox. Inboxes may require a paid Crisp plan.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `page_number` (`string`, optional): Page number of inboxes to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.

Example input: `{"website_id":"<website_id>"}`

### `crisp_list_messages`

List Conversation Messages · Read-only

List the messages of a conversation, newest batch first.
Returns an array of messages with type, from, origin, content, fingerprint, timestamp and user.
Page backward with timestamp_before, forward with timestamp_after, or jump with timestamp_around. Use crisp_get_message for a single message by fingerprint.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `timestamp_after` (`string`, optional): Return the batch of messages that starts after this timestamp in milliseconds, to page toward newer messages.
- `timestamp_around` (`string`, optional): Return a batch of messages centered on this timestamp in milliseconds, to jump to a specific message.
- `timestamp_before` (`string`, optional): Return the batch of messages that ends before this timestamp in milliseconds. Use the oldest timestamp you already have to page toward older messages.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_list_operator_availabilities`

List Operator Availabilities · Read-only

List the current availability of every operator on the website.
Returns one entry per operator with user_id, type (online, away or offline) and since timestamp.
Use crisp_get_availability_status for the website-wide status. Use crisp_list_operators for operator profiles.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"website_id":"<website_id>"}`

### `crisp_list_operators`

List Operators · Read-only

List all operators who are members of the website.
Returns members with type (operator, invite or sandbox) and details such as user_id, email, first_name, last_name, role and title.
Use crisp_get_operator for one operator by user id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"website_id":"<website_id>"}`

### `crisp_list_people_conversations`

List People Conversations · Read-only

List the conversations linked to one contact.
Returns an array of conversation session ids.
Use crisp_get_conversation on each id for details, or crisp_list_conversations to search all conversations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `filter_not_resolved` (`string`, optional): Only return conversations that are not resolved. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `filter_resolved` (`string`, optional): Only return resolved conversations. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `filter_unread` (`string`, optional): Only return conversations with unread messages. Use 1 to enable or 0 to disable. One of: `0`, `1`.
- `page_number` (`string`, optional): Page number of the contact's conversations to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.

Example input: `{"people_id":"<people_id>","website_id":"<website_id>"}`

### `crisp_list_people_events`

List People Events · Read-only

List the events recorded on a contact's timeline.
Returns events with text, data, color and timestamp.
Use crisp_add_people_event to record a new one.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `page_number` (`string`, optional): Page number of events to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.

Example input: `{"people_id":"<people_id>","website_id":"<website_id>"}`

### `crisp_list_people_profiles`

List People Profiles · Read-only

List contact profiles in the website CRM, optionally searched, sorted or limited by creation date.
Returns one page of profiles with people_id, email, person, company, segments and timestamps.
Use crisp_get_people_profile for a single contact by id or email.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `filter_date_end` (`string`, optional): Only return profiles created on or before this ISO 8601 date-time.
- `filter_date_start` (`string`, optional): Only return profiles created on or after this ISO 8601 date-time.
- `page_number` (`string`, optional): Page number of people profiles to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.
- `per_page` (`string`, optional): Number of profiles per page, between 20 and 50. Crisp defaults to 20.
- `search_filter` (`string`, optional): Structured filter, passed as a JSON-encoded string, in the format of Crisp's people search filters.
- `search_operator` (`string`, optional): Boolean operator combining search_filter conditions: and or or. Crisp defaults to and. One of: `and`, `or`.
- `search_text` (`string`, optional): Free text for a quick search over profiles. Example: jane@example.com.
- `sort_field` (`string`, optional): Profile field to sort on, such as nickname or email.
- `sort_order` (`string`, optional): Sort direction: ascending or descending. One of: `ascending`, `descending`.

Example input: `{"website_id":"<website_id>"}`

### `crisp_list_teams`

List Teams · Read-only

List the operator teams of the website.
Returns teams with team_id, name, emoji, operators and timestamps.
Use crisp_get_team for a single team.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `page_number` (`string`, optional): Page number of teams to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.

Example input: `{"website_id":"<website_id>"}`

### `crisp_list_visitors`

List Visitors · Read-only

List the visitors currently on the website.
Returns visitors with session_id, nickname, email, avatar, useragent and location.
Use crisp_count_visitors for a total only.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `page_number` (`string`, optional): Page number of visitors to return, starting at 1. Defaults to 1. Increase it to read further pages until a page comes back empty. Default: `1`.

Example input: `{"website_id":"<website_id>"}`

### `crisp_add_people_event`

Add People Event · Write

Record an event on a contact's timeline, for example a purchase or signup.
Returns an empty data object on success.
Use crisp_list_people_events to read the timeline back.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `text` (`string`, required): Short description of the event. Example: Upgraded to Pro plan.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `color` (`string`, optional): Color label for the event in the Crisp UI. One of: `red`, `orange`, `yellow`, `green`, `blue`, `purple`, `pink`, `brown`, `grey`, `black`.
- `data` (`object`, optional): Extra key-value data for the event. Example: {"plan": "pro"}.

Example input: `{"people_id":"<people_id>","text":"<text>","website_id":"<website_id>"}`

### `crisp_assign_conversation_routing`

Assign Conversation Routing · Write

Assign a conversation to an operator, or unassign it.
Returns an empty data object on success.
Get operator ids from crisp_list_operators. Pass an empty assigned object to unassign.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `assigned` (`object`, required): Operator to assign, as an object with user_id. Example: {"user_id": "7d2f1c3e-5a6b-4c8d-9e0f-1a2b3c4d5e6f"}. Pass an empty object {} to remove the assignment.
- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `silent` (`boolean`, optional): When true, the assigned operator is not notified.

Example input: `{"assigned":{"user_id":"7d2f1c3e-5a6b-4c8d-9e0f-1a2b3c4d5e6f"},"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_create_conversation`

Create Conversation · Write

Create a new empty conversation in a Crisp website.
Returns the new session_id inside the data object.
The conversation stays hidden from the Crisp inbox until a message with from set to user is sent, so follow with crisp_send_message.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"website_id":"<website_id>"}`

### `crisp_create_people_profile`

Create People Profile · Write

Create a new contact profile in the website CRM.
Returns the new people_id inside the data object.
Fails with a conflict when the email already exists; use crisp_update_people_profile to change an existing contact.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `email` (`string`, required): Email address of the contact. Must be unique in the website. Example: jane@example.com.
- `person` (`object`, required): Personal details of the contact. It must include nickname, the full name, and may also include avatar, gender (male or female), phone, address, description, website, timezone as a UTC offset number, employment details such as title and role, and a locales list. Example: {"nickname": "Jane Doe", "phone": "+14155550123"}.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `active` (`number`, optional): Timestamp in milliseconds at which the contact was last active.
- `company` (`object`, optional): Company details for the contact, which must include name when set and may include domain, url, description, phones, emails and employee metrics. Example: {"name": "Acme Inc", "domain": "acme.com"}.
- `notepad` (`string`, optional): Private operator notes stored on the profile.
- `segments` (`array`, optional): Segment names to attach to the profile. Example: ["customer", "vip"].

Example input: `{"email":"<email>","person":{"nickname":"Jane Doe","phone":"+14155550123"},"website_id":"<website_id>"}`

### `crisp_mark_conversation_unread`

Mark Conversation Unread · Write

Mark a whole conversation as unread.
Returns the accepted status.
Use crisp_mark_messages_read to mark messages read again.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `from` (`string`, required): Sender direction to mark unread. Crisp only accepts user, meaning the visitor's messages become unread for operators. One of: `user`.
- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"from":"user","session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_mark_messages_read`

Mark Messages Read · Write

Mark messages in a conversation as read, either specific messages or all of them.
Returns the accepted status.
Set from to user to mark the visitor's messages read by operators. Use crisp_mark_conversation_unread to reverse it.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `from` (`string`, required): Direction of the messages being marked: user marks the visitor's messages as read by the team, operator marks the team's messages as read by the visitor. One of: `user`, `operator`.
- `origin` (`string`, required): Channel of the read receipt: chat, email or a urn: value. Match the conversation's origin.
- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `fingerprints` (`array`, optional): Message fingerprints to mark as read. When omitted, every message in the conversation is marked read. Example: [1767225600123].

Example input: `{"from":"user","origin":"<origin>","session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_send_message`

Send Conversation Message · Write

Send a message into an existing conversation as the operator or on behalf of the visitor.
Returns the message fingerprint inside the data object once the message is accepted.
Use type note with from operator for a private internal note. Use crisp_create_conversation first when no conversation exists.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `content` (`string`, required): Message body. For type text or note this is a plain string, for example Thanks for reaching out. For file, animation or audio it is an object with url, type and name (plus duration for audio). For picker, field, carousel and event it is an object as described in the Crisp REST API reference.
- `from` (`string`, required): Who the message comes from: operator for a reply from the team, or user for the visitor. One of: `user`, `operator`.
- `origin` (`string`, required): Channel the message belongs to: chat for the Crisp chatbox, email for email, or a urn: value for a custom integration. Match the conversation's origin.
- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `type` (`string`, required): Kind of message. Use text for a normal message, note for a private operator note, or file, animation, audio, picker, field, carousel or event for rich content. One of: `text`, `note`, `file`, `animation`, `audio`, `picker`, `field`, `carousel`, `event`.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `automated` (`boolean`, optional): Mark the message as automated, meaning it comes from a bot.
- `fingerprint` (`number`, optional): Client-chosen unique numeric fingerprint, useful to deduplicate messages. Crisp generates one when omitted.
- `mentions` (`array`, optional): User or team identifiers to mention in the message. Mainly used with notes.
- `original` (`object`, optional): Original message data to keep, with type (text/plain or text/html) and content. Example: {"type": "text/plain", "content": "Hello"}.
- `properties` (`object`, optional): Arbitrary key-value properties stored on the message.
- `references` (`array`, optional): Extra context for the message. Each item has type (link), name and target URL. Example: [{"type": "link", "name": "Docs", "target": "https://example.com/docs"}].
- `stealth` (`boolean`, optional): When true the message is stored but not propagated to the other party.
- `timestamp` (`number`, optional): Send time in milliseconds when it should differ from now, for example to import older messages.
- `translated` (`boolean`, optional): Mark the message as auto-translated.
- `user` (`object`, optional): Display identity for the sender, with optional keys type (website or participant), nickname and avatar. Example: {"nickname": "Support Bot"}.

Example input: `{"content":"<content>","from":"user","origin":"<origin>","session_id":"<session_id>","type":"text","website_id":"<website_id>"}`

### `crisp_update_conversation_inbox`

Update Conversation Inbox · Write

Move a conversation to a different inbox, or remove it from its inbox.
Returns an empty data object on success.
Get inbox ids from crisp_list_inboxes. Inboxes may require a paid Crisp plan.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `inbox_id` (`string`, optional): Inbox identifier to move the conversation into, from crisp_list_inboxes. Leave empty to remove the conversation from its inbox.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_update_conversation_meta`

Update Conversation Meta · Write

Update the visitor details attached to a conversation, such as nickname, email, phone, subject, custom data and segments.
Returns an empty data object on success.
Only the fields you pass are changed. Use crisp_update_people_profile to change the CRM profile.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `address` (`string`, optional): Visitor postal address.
- `avatar` (`string`, optional): URL of the visitor avatar image.
- `data` (`object`, optional): Custom key-value data attached to the visitor. Example: {"plan": "pro"}.
- `email` (`string`, optional): Visitor email address. Example: jane@example.com.
- `ip` (`string`, optional): Visitor IP address.
- `nickname` (`string`, optional): Visitor nickname. Example: Jane Doe.
- `origin` (`string`, optional): Conversation origin: chat, email or a urn: value.
- `phone` (`string`, optional): Visitor phone number. Example: +14155550123.
- `segments` (`array`, optional): Segment names to assign to the conversation. Example: ["vip", "billing"].
- `subject` (`string`, optional): Subject line for the conversation. Example: Billing question.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_update_conversation_state`

Update Conversation State · Write

Change a conversation's state to pending, unresolved or resolved.
Returns an empty data object on success.
Use resolved to close a conversation and unresolved to reopen it. Use crisp_get_conversation_state to read the current value.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `state` (`string`, required): New conversation state: pending (new, not yet handled), unresolved (open) or resolved (closed). One of: `pending`, `unresolved`, `resolved`.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"session_id":"<session_id>","state":"pending","website_id":"<website_id>"}`

### `crisp_update_message`

Update Conversation Message · Write

Edit the content of an existing message in a conversation.
Returns the accepted status; the updated message is delivered asynchronously over Crisp's real-time channel.
Only works for conversations started from the Crisp chatbox, not email or other channels. Find the fingerprint with crisp_list_messages.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `content` (`string`, required): New message content. A plain string for text and note messages, or an object for file, animation, audio, picker, field and carousel messages. Example: Updated reply text.
- `fingerprint` (`number`, required): Fingerprint of the message to edit, from crisp_list_messages. Example: 1767225600123.
- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"content":"<content>","fingerprint":1767225600123,"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_update_people_data`

Update People Data · Write

Merge new keys into the custom data stored on a contact, keeping existing keys.
Returns an empty data object on success.
Use crisp_get_people_data to read the current values.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `data` (`object`, required): Key-value pairs to merge into the contact's data. Keys you omit are kept. Example: {"plan": "pro", "seats": "5"}.
- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"data":{"plan":"pro","seats":"5"},"people_id":"<people_id>","website_id":"<website_id>"}`

### `crisp_update_people_profile`

Update People Profile · Write

Update fields on an existing contact profile; only the fields you pass change.
Returns an empty data object on success.
Use crisp_create_people_profile for a new contact. Use crisp_update_people_data for custom key-value data.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.
- `active` (`number`, optional): Timestamp in milliseconds at which the contact was last active.
- `company` (`object`, optional): Company details to change, any of name, legal_name, domain, url, description, phones, emails and metrics. Example: {"name": "Acme Inc"}.
- `email` (`string`, optional): New email address for the contact. Example: jane@example.com.
- `notepad` (`string`, optional): Private operator notes stored on the profile.
- `person` (`object`, optional): Personal details to change, any of nickname, avatar, gender (male or female), phone, address, description, website, timezone, employment details and locales. Example: {"nickname": "Jane Doe"}.
- `segments` (`array`, optional): Segment names for the profile. This sets the list, so include every segment to keep. Example: ["customer"].

Example input: `{"people_id":"<people_id>","website_id":"<website_id>"}`

### `crisp_update_people_subscription`

Update People Subscription · Write

Subscribe or unsubscribe a contact from emails.
Returns an empty data object on success.
Use crisp_get_people_subscription to read the current status.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `email` (`boolean`, required): True to subscribe the contact to emails, false to unsubscribe them.
- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"email":true,"people_id":"<people_id>","website_id":"<website_id>"}`

### `crisp_delete_conversation`

Delete Conversation · Destructive

Permanently remove a conversation and its messages from a Crisp website.
Returns an empty data object on success.
This cannot be undone. To close a conversation without deleting it, use crisp_update_conversation_state with resolved.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session identifier of the conversation, as returned in session_id by crisp_list_conversations or crisp_create_conversation. Example: session_6c1d8b2a-3f4e-4a5b-9c7d-1e2f3a4b5c6d.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"session_id":"<session_id>","website_id":"<website_id>"}`

### `crisp_delete_people_profile`

Delete People Profile · Destructive

Permanently remove a contact profile from the website CRM.
Returns an empty data object on success.
This cannot be undone. Use crisp_update_people_profile to edit a contact instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `people_id` (`string`, required): People profile identifier from crisp_list_people_profiles or crisp_get_conversation (people_id). Crisp also accepts the contact's email address in place of the identifier. Example: 3b6f2a10-7c9d-4e1a-8f55-0a1b2c3d4e5f.
- `website_id` (`string`, required): Identifier of the Crisp website (workspace) to act on. Find it in the Crisp app under Settings > Workspace Settings > Setup Instructions, or call crisp_get_website on a known id. Example: 8c042840-1ecb-4cd5-a6a1-b3ac4a3ad8d6.

Example input: `{"people_id":"<people_id>","website_id":"<website_id>"}`

## Related

Other Customer Support connectors ([all 21](/agentkit/connectors/?category=customer-support)):

- [Intercom](/agentkit/connectors/intercom/): Scalekit connector, OAuth, 113 tools
- [Freshdesk](/agentkit/connectors/freshdesk/): Scalekit connector, Username and password, 34 tools
- [ServiceNow](/agentkit/connectors/servicenow/): Scalekit connector, OAuth, 112 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
