> **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 Klipfolio

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

**Authentication:** API Key
**Categories:** Analytics
**Tools:** 59: 29 read, 22 write, 8 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=KLIPFOLIO)

## 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 Klipfolio connection

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

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'klipfolio'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Klipfolio:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'klipfolio_clients_list',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "klipfolio"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Klipfolio:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="klipfolio_clients_list",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Klipfolio credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## 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: 'klipfolio_client_get',
  toolInput: {
    client_id: '0123456789abcdef0123456789abcdef',
  },
  connector: 'klipfolio',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="klipfolio_client_get",
    tool_input={
        "client_id": "0123456789abcdef0123456789abcdef",
    },
    connection_name="klipfolio",
    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.

### `klipfolio_client_get`

Get Client · Read-only

Get one client account by ID.
Returns its id, name, description, status, seats, billing and trial details; with full=true also its user and group IDs and share rights.
Use klipfolio_client_get when you know the client ID. Use klipfolio_clients_list to find it.

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

Inputs:

- `client_id` (`string`, required): ID of the client account. Get it from the id field of klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `full` (`boolean`, optional): Set to true to include associations in the response (users, groups, share_right). Default false.

Example input: `{"client_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_clients_list`

List Clients · Read-only

List the client accounts managed by a partner Klipfolio account, optionally by status or external ID.
Returns each client's id, name, description, status, seats and last sign-in date.
Use klipfolio_clients_list to find a client_id for the other tools. Use klipfolio_client_get for one client's users and groups.

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

Inputs:

- `external_id` (`string`, optional): Only return clients with this external ID. Example: "acct-77".
- `limit` (`integer`, optional): Maximum number of results to return. Default 25, maximum 100 (values over 100 return a 400 error). Example: 50.
- `offset` (`integer`, optional): Index of the first result to return, for paging. Default 0. Example: 25 returns the second page when limit is 25.
- `status` (`string`, optional): Only return clients with this account status: active, trial, setup or disabled. One of: `active`, `trial`, `setup`, `disabled`.

Example input: `{}`

### `klipfolio_dashboard_get`

Get Dashboard · Read-only

Get one dashboard (tab) by ID.
Returns its id, name, description, company, creator and last-updated date; with full=true also its Klip instance IDs and group and user share rights.
Use klipfolio_dashboard_get when you know the dashboard ID. Use klipfolio_dashboard_klip_instances_list for the Klips on it with their names.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `full` (`boolean`, optional): Set to true to include associations in the response (klip_instances, share_rights). Default false.

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210"}`

### `klipfolio_dashboard_klip_instances_list`

List Dashboard Klips · Read-only

List the Klip instances placed on a dashboard (tab).
Returns each instance's id, the source klip_id and the Klip name.
Use klipfolio_dashboard_klip_instances_list to see what a dashboard shows or to find an instance ID for klipfolio_dashboard_klip_instance_remove.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210"}`

### `klipfolio_dashboard_layout_get`

Get Dashboard Layout · Read-only

Get the layout of a dashboard (tab): its layout type and where each Klip sits.
Returns type and state, where state holds per-context grid settings and one entry per Klip with its column span, position and height.
Use klipfolio_dashboard_layout_get before klipfolio_dashboard_layout_update, because the update must include every Klip.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210"}`

### `klipfolio_dashboard_share_rights_get`

Get Dashboard Share Rights · Read-only

List who a dashboard (tab) is shared with.
Returns share_rights entries with group_id, group_name and can_edit.
Use klipfolio_dashboard_share_rights_get to audit access. Use klipfolio_dashboard_share_rights_update to grant or change access.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210"}`

### `klipfolio_dashboards_list`

List Dashboards · Read-only

List the dashboards (called tabs in the Klipfolio API) in the company or a client account.
Returns each dashboard's id, name and description, 25 per page by default.
Use klipfolio_dashboards_list to browse or find dashboard IDs. Use klipfolio_dashboard_get for one dashboard's Klips and share rights.

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

Inputs:

- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `limit` (`integer`, optional): Maximum number of results to return. Default 25, maximum 100 (values over 100 return a 400 error). Example: 50.
- `offset` (`integer`, optional): Index of the first result to return, for paging. Default 0. Example: 25 returns the second page when limit is 25.

Example input: `{}`

### `klipfolio_datasource_get`

Get Data Source · Read-only

Get one data source by ID.
Returns its id, name, description, connector, format, refresh interval, creator, dynamic and disabled flags, and created and last-refresh dates.
Use klipfolio_datasource_get when you know the ID. Use klipfolio_datasource_properties_get for its connection settings such as the endpoint URL.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898"}`

### `klipfolio_datasource_instance_data_get`

Get Data Source Instance Data · Read-only

Get the data currently stored in a data source instance, in the data source's own format (for example CSV, JSON or XML).
Returns the raw data as text.
Use klipfolio_datasource_instance_data_get to read what a Klip is built on. Use klipfolio_datasource_instance_refresh first if the data may be stale.

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

Inputs:

- `instance_id` (`string`, required): ID of the data source instance. A data source that is not dynamic has one instance with the same ID as the data source; dynamic data sources have several. Get it from the id field of klipfolio_datasource_instances_list. Example: "4928fb1d95bfb4e02012de483c1234a5".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"instance_id":"4928fb1d95bfb4e02012de483c1234a5"}`

### `klipfolio_datasource_instance_get`

Get Data Source Instance · Read-only

Get one data source instance by ID.
Returns its id, datasource_id, data source name, last and next refresh dates (UTC), refresh failure count and data size.
Use klipfolio_datasource_instance_get to check refresh status. Use klipfolio_datasource_instance_data_get for the data itself.

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

Inputs:

- `instance_id` (`string`, required): ID of the data source instance. A data source that is not dynamic has one instance with the same ID as the data source; dynamic data sources have several. Get it from the id field of klipfolio_datasource_instances_list. Example: "4928fb1d95bfb4e02012de483c1234a5".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"instance_id":"4928fb1d95bfb4e02012de483c1234a5"}`

### `klipfolio_datasource_instances_list`

List Data Source Instances · Read-only

List data source instances, optionally only those of one data source.
Returns each instance's id, datasource_id, data source name, data size, refresh failure count and last refresh date.
Use klipfolio_datasource_instances_list to find instance IDs, especially for dynamic data sources that have several. Use klipfolio_datasource_instance_get for one instance.

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

Inputs:

- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `datasource_id` (`string`, optional): Only return instances of this data source. Use the data source ID (from klipfolio_datasources_list), not an instance ID. Example: "4928fb1d95bfb4e02012de483c1234a5".
- `limit` (`integer`, optional): Maximum number of results to return. Default 25, maximum 100 (values over 100 return a 400 error). Example: 50.
- `offset` (`integer`, optional): Index of the first result to return, for paging. Default 0. Example: 25 returns the second page when limit is 25.

Example input: `{}`

### `klipfolio_datasource_properties_get`

Get Data Source Properties · Read-only

Get the connection properties of a data source, such as its endpoint URL and method; the keys depend on the connector.
Returns a properties object.
Use klipfolio_datasource_properties_get to see how a data source fetches its data. Use klipfolio_datasource_get for name, connector and refresh status.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898"}`

### `klipfolio_datasource_share_rights_get`

Get Data Source Share Rights · Read-only

List who a data source is shared with.
Returns share_rights (group_id, group_name, can_edit) and user_share_rights (user_id, first and last name, can_edit).
Use klipfolio_datasource_share_rights_get to audit access. Use klipfolio_datasource_share_rights_update to grant or change it.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898"}`

### `klipfolio_datasources_list`

List Data Sources · Read-only

List the data sources the user can access.
Returns each data source's id, name, description, refresh interval, last refresh date and whether it is dynamic, 25 per page by default.
Use klipfolio_datasources_list to browse or find data source IDs. Use klipfolio_datasource_get for connector, format and status details.

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

Inputs:

- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `limit` (`integer`, optional): Maximum number of results to return. Default 25, maximum 100 (values over 100 return a 400 error). Example: 50.
- `offset` (`integer`, optional): Index of the first result to return, for paging. Default 0. Example: 25 returns the second page when limit is 25.

Example input: `{}`

### `klipfolio_group_get`

Get Group · Read-only

Get one user group by ID.
Returns its id, external_id, company, name, description and member count; with full=true also the members' IDs and names.
Use klipfolio_group_get when you know the group ID. Use klipfolio_groups_list to find it.

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

Inputs:

- `group_id` (`string`, required): ID of the group. Get it from the id field of klipfolio_groups_list. Example: "42c1accfbcfd54d44029ee5199805a9b".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `full` (`boolean`, optional): Set to true to include associations in the response (members). Default false.

Example input: `{"group_id":"42c1accfbcfd54d44029ee5199805a9b"}`

### `klipfolio_group_users_list`

List Group Users · Read-only

List the users who belong to a group.
Returns each member's id, first and last name, and email.
Use klipfolio_group_users_list to see who a group share reaches. Use klipfolio_users_list for all users.

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

Inputs:

- `group_id` (`string`, required): ID of the group. Get it from the id field of klipfolio_groups_list. Example: "42c1accfbcfd54d44029ee5199805a9b".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"group_id":"42c1accfbcfd54d44029ee5199805a9b"}`

### `klipfolio_groups_list`

List Groups · Read-only

List the user groups in the company or a client account.
Returns each group's id, name and description.
Use klipfolio_groups_list to find group IDs for sharing. Use klipfolio_group_users_list for a group's members.

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

Inputs:

- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `limit` (`integer`, optional): Maximum number of results to return. Default 25, maximum 100 (values over 100 return a 400 error). Example: 50.
- `offset` (`integer`, optional): Index of the first result to return, for paging. Default 0. Example: 25 returns the second page when limit is 25.

Example input: `{}`

### `klipfolio_klip_annotation_get`

Get Klip Annotation · Read-only

Get one annotation on a Klip.
Returns the annotation's id, body text, author id and name, and creation date.
Use klipfolio_klip_annotation_get when you know the annotation ID. Use klipfolio_klip_annotations_list to find it.

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

Inputs:

- `annotation_id` (`string`, required): ID of the annotation. Get it from the id field of klipfolio_klip_annotations_list. Example: "12345eba2f065109fb88be86b2f9279e".
- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"annotation_id":"12345eba2f065109fb88be86b2f9279e","klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_klip_annotations_list`

List Klip Annotations · Read-only

List the annotations (comments) on a Klip, optionally within a date range.
Returns each annotation's id, body text, author id and name, and creation date.
Use klipfolio_klip_annotations_list to read a Klip's comments. Use klipfolio_klip_annotation_get for a single annotation.

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

Inputs:

- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `end_date` (`integer`, optional): Only return annotations created at or before this time, as Unix time in seconds. Leave empty for no upper bound (up to now). Example: 1781733386.
- `start_date` (`integer`, optional): Only return annotations created at or after this time, as Unix time in seconds. Leave empty for no lower bound. Example: 1717200000.

Example input: `{"klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_klip_get`

Get Klip · Read-only

Get one Klip by ID.
Returns its id, name, description, company, creator and created/updated dates; with full=true also group and user share rights, data sources and datasets.
Use klipfolio_klip_get when you know the Klip ID. Use klipfolio_klips_list to find it, and klipfolio_klip_schema_get for the Klip's visual definition.

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

Inputs:

- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `full` (`boolean`, optional): Set to true to include associations in the response (share rights, data sources, datasets). Default false.

Example input: `{"klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_klip_schema_get`

Get Klip Schema · Read-only

Get the schema (visual definition) of a Klip.
Returns the schema object: title, components with their formulas and formatting, layout config and the data sources the Klip uses.
Use klipfolio_klip_schema_get before klipfolio_klip_schema_update, to edit the current schema rather than replace it blind.

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

Inputs:

- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_klip_share_rights_get`

Get Klip Share Rights · Read-only

List the groups a Klip is shared with.
Returns share_rights entries with group_id, group_name and can_edit.
Use klipfolio_klip_share_rights_get to audit access. Use klipfolio_klip_share_rights_update to grant or change it.

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

Inputs:

- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_klips_list`

List Klips · Read-only

List the Klips (dashboard widgets) the user can access, optionally only those using one data source.
Returns each Klip's id, name and description, 25 per page by default.
Use klipfolio_klips_list to browse or find Klip IDs. Use klipfolio_klip_get for one Klip's details and share rights.

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

Inputs:

- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `datasource_id` (`string`, optional): Only return Klips that use this data source. Get data source IDs from klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".
- `limit` (`integer`, optional): Maximum number of results to return. Default 25, maximum 100 (values over 100 return a 400 error). Example: 50.
- `offset` (`integer`, optional): Index of the first result to return, for paging. Default 0. Example: 25 returns the second page when limit is 25.

Example input: `{}`

### `klipfolio_profile_get`

Get Profile · Read-only

Get the account profile of the user who owns the API key.
Returns the user's id, name, email, company id and name, creation and last-login dates; with full=true also their dashboard instances, groups and permissions.
Use klipfolio_profile_get to check which user and company the connection acts as. Use klipfolio_user_get for any other user.

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

Inputs:

- `full` (`boolean`, optional): Set to true to include associations in the response (tab instances, dashboard properties, permissions). Default false.

Example input: `{}`

### `klipfolio_published_link_get`

Get Published Link · Read-only

Get one published link by ID.
Returns its id, name, dashboard_url, visibility, creator, created and last-accessed dates.
Use klipfolio_published_link_get when you know the link ID. Use klipfolio_published_links_list to list a dashboard's links.

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

Inputs:

- `published_link_id` (`string`, required): ID of the published link. Get it from the id field of klipfolio_published_links_list. Example: "d2e5cdcf7f1d6e6e764e3b24e9edd762".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"published_link_id":"d2e5cdcf7f1d6e6e764e3b24e9edd762"}`

### `klipfolio_published_links_list`

List Published Links · Read-only

List the published links (shareable public URLs) of one dashboard.
Returns each link's id, name, dashboard_url, visibility, creator, created and last-accessed dates.
Use klipfolio_published_links_list to find a dashboard's links. Use klipfolio_published_link_get when you know the link ID.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard whose published links to list. Get it from klipfolio_dashboards_list. Example: "a30969fdee0cad2c3ee0e3587b40df32".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"dashboard_id":"a30969fdee0cad2c3ee0e3587b40df32"}`

### `klipfolio_user_dashboards_list`

List User Dashboards · Read-only

List the dashboards (tab instances) in a user's Klipfolio view.
Returns each tab instance's id, the source tab_id, name and context.
Use klipfolio_user_dashboards_list to see which dashboards a user has open. Use klipfolio_user_dashboards_add to add more.

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

Inputs:

- `user_id` (`string`, required): ID of the user. Get it from the id field of klipfolio_users_list. Example: "ab05f4a011e6a93fb307f4e3e970c3c0".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"user_id":"ab05f4a011e6a93fb307f4e3e970c3c0"}`

### `klipfolio_user_get`

Get User · Read-only

Get one user by ID.
Returns the user's id, name, email, company, last login and creation dates and lock-out status; with full=true also their dashboard instances, groups, roles and properties.
Use klipfolio_user_get when you know the user ID. Use klipfolio_users_list to find it, or klipfolio_profile_get for the API key's own user.

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

Inputs:

- `user_id` (`string`, required): ID of the user. Get it from the id field of klipfolio_users_list. Example: "ab05f4a011e6a93fb307f4e3e970c3c0".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `full` (`boolean`, optional): Set to true to include associations in the response (tab_instances, groups, roles, properties). Default false.

Example input: `{"user_id":"ab05f4a011e6a93fb307f4e3e970c3c0"}`

### `klipfolio_users_list`

List Users · Read-only

List the users in the company or a client account, optionally finding one by email or external ID.
Returns each user's id, first and last name, email and last login date; optionally also their roles and groups.
Use klipfolio_users_list to find user IDs. Use klipfolio_user_get for one user's dashboards, groups and roles.

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

Inputs:

- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `email` (`string`, optional): Only return the user with this email address. Example: "jdoe@example.com".
- `external_id` (`string`, optional): Only return users with this external ID. Example: "emp-1042".
- `full` (`boolean`, optional): Set to true to include associations in the response (tab_instances, properties; only applies together with external_id). Default false.
- `include_groups` (`boolean`, optional): Set to true to include each user's groups. Default false.
- `include_roles` (`boolean`, optional): Set to true to include each user's roles. Default false.
- `limit` (`integer`, optional): Maximum number of results to return. Default 25, maximum 100 (values over 100 return a 400 error). Example: 50.
- `offset` (`integer`, optional): Index of the first result to return, for paging. Default 0. Example: 25 returns the second page when limit is 25.

Example input: `{}`

### `klipfolio_dashboard_create`

Create Dashboard · Write

Create an empty dashboard (tab) with a name and description.
Returns the new dashboard's location (/tabs/<id>) in meta.location.
Use klipfolio_dashboard_create to start a dashboard. Then use klipfolio_dashboard_klips_add to place Klips on it.

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

Inputs:

- `description` (`string`, required): Description of the dashboard. Example: "Weekly sales performance overview".
- `name` (`string`, required): Name of the dashboard. Example: "Sales KPIs".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"description":"Weekly sales performance overview","name":"Sales KPIs"}`

### `klipfolio_dashboard_klips_add`

Add Klips to Dashboard · Write

Place one or more library Klips on a dashboard (tab), each as a new Klip instance.
Returns the created klip_instances with their id, klip_id and name.
Use klipfolio_dashboard_klips_add with Klip IDs from klipfolio_klips_list, not instance IDs. Use klipfolio_dashboard_layout_update to fine-tune positions afterwards.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `klips` (`array`, required): Klips to add. Each entry needs the library klip_id (from klipfolio_klips_list) and can set region (column/region index, default 1) and position (order within the region, default 0). Example: [{"klip_id": "d012d123b56123d1234ef12c8f12c123", "region": 0, "position": 1}].
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210","klips":[{"klip_id":"d012d123b56123d1234ef12c8f12c123","region":0,"position":1}]}`

### `klipfolio_dashboard_layout_update`

Update Dashboard Layout · Write

Replace the layout of a dashboard (tab): the layout type and the position of every Klip.
Returns meta.success on success.
Use klipfolio_dashboard_layout_update to rearrange Klips. Klips missing from state are removed from the dashboard.
Run klipfolio_dashboard_layout_get first and edit its result.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `state` (`object`, required): Position of every Klip on the dashboard, in the same shape klipfolio_dashboard_layout_get returns for this layout type. Include every Klip instance, or the missing ones are removed. Example for a region layout: {"04462abd3a38372173645f3b50128596": {"region": "region-1", "idx": 1}}.
- `type` (`string`, required): Layout type, which sets the size and number of Klip columns. Use the type returned by klipfolio_dashboard_layout_get, for example "grid" or "100".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210","state":{},"type":"<type>"}`

### `klipfolio_dashboard_share_rights_update`

Share Dashboard · Write

Share a dashboard (tab) with groups or users, or change their edit rights; new entries are added and existing ones updated.
Returns meta.success on success.
Use klipfolio_dashboard_share_rights_update to grant access. Use klipfolio_dashboard_share_right_delete to revoke a group's access.
Provide groups, users or both.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `groups` (`array`, optional): Groups to share with. Each entry has the group's ID (from klipfolio_groups_list) and can_edit, which is true to let the group edit or false for view-only access. Groups not yet shared get a new share right; existing ones are updated. Example: [{"group_id": "a9dff9e0b37ecd0fff24cba32ab88223", "can_edit": false}].
- `users` (`array`, optional): Individual users to share with. Each entry has the user's ID (from klipfolio_users_list) and can_edit, which is true to let the user edit or false for view-only access. Example: [{"user_id": "abcdef0123456789abcdef0123456789", "can_edit": true}].

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210"}`

### `klipfolio_dashboard_update`

Update Dashboard · Write

Update a dashboard's (tab's) name or description.
Returns meta.success on success.
Use klipfolio_dashboard_update for the name and description. Use klipfolio_dashboard_layout_update to rearrange Klips.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `description` (`string`, optional): Description of the dashboard. Example: "Quarterly sales performance overview".
- `name` (`string`, optional): Name of the dashboard. Example: "Sales KPIs (Q3)".

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210"}`

### `klipfolio_datasource_create`

Create Data Source · Write

Create a data source that pulls data from a connector, such as a REST/URL endpoint, on a refresh schedule.
Returns the new data source's location (/datasources/<id>) and its instance location in meta.
Use klipfolio_datasource_create to bring new data into Klipfolio. Use klipfolio_datasource_update to rename it or change its refresh interval later.

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

Inputs:

- `connector` (`string`, required): Connector that fetches the data. Use simple_rest for any REST/URL endpoint. Example: "simple_rest". One of: `box`, `comscore`, `db`, `dropbox`, `facebook`, `ftp`, `google_adwords`, `google_analytics`, `google_drive`, `google_spreadsheets`, `hubspot`, `iformbuilder`, `marketo`, `omniture`, `radian6`, `salesforce`, `searchMetrics`, `shopify`, `simple_rest`, `survey_monkey`, `versature`, `xero`, `xmla`.
- `description` (`string`, required): Description of the data source. Example: "Daily visits pulled from the analytics API".
- `format` (`string`, required): Format of the fetched data, such as json, xml or csv. Example: "json".
- `name` (`string`, required): Name of the data source. Example: "Web Analytics".
- `refresh_interval` (`integer`, required): How often Klipfolio refreshes the data, in seconds. Example: 14400 (every 4 hours).
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `properties` (`object`, optional): Connector settings. They depend on the connector; for simple_rest they include the endpoint_url and method, and optionally parameters (a JSON string listing headers or query parameters). Example: {"endpoint_url": "https://api.example.com/v1/visits", "method": "get"}.

Example input: `{"connector":"simple_rest","description":"Daily visits pulled from the analytics API","format":"json","name":"Web Analytics","refresh_interval":14400}`

### `klipfolio_datasource_disable`

Disable Data Source · Write

Disable a data source so it stops refreshing, without deleting it.
Returns data.op_requested = "disable" and meta.success.
Use klipfolio_datasource_disable to pause refreshes. Use klipfolio_datasource_enable to resume, or klipfolio_datasource_delete to remove it.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898"}`

### `klipfolio_datasource_enable`

Enable Data Source · Write

Enable a disabled data source so it refreshes on schedule again.
Returns data.op_requested = "enable" and meta.success.
Use klipfolio_datasource_enable to resume a data source. Use klipfolio_datasource_disable to pause it.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898"}`

### `klipfolio_datasource_instance_refresh`

Refresh Data Source Instance · Write

Queue one data source instance for a refresh; the refresh runs shortly after, not instantly.
Returns data.op_requested = "refresh" and meta.success.
Use klipfolio_datasource_instance_refresh for one instance. Use klipfolio_datasources_refresh to refresh whole data sources, several at once.

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

Inputs:

- `instance_id` (`string`, required): ID of the data source instance. A data source that is not dynamic has one instance with the same ID as the data source; dynamic data sources have several. Get it from the id field of klipfolio_datasource_instances_list. Example: "4928fb1d95bfb4e02012de483c1234a5".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"instance_id":"4928fb1d95bfb4e02012de483c1234a5"}`

### `klipfolio_datasource_properties_update`

Update Data Source Properties · Write

Create or update connection properties of a data source, such as its endpoint URL; properties you name are set and others are left alone.
Returns meta.success on success.
Use klipfolio_datasource_properties_update to change where or how data is fetched. Use klipfolio_datasource_update for name, description and refresh interval.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".
- `properties` (`object`, required): Properties to create or update, as key/value pairs. The keys depend on the connector; for simple_rest they include endpoint_url and method. Example: {"endpoint_url": "https://api.example.com/v2/visits"}.
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898","properties":{"endpoint_url":"https://api.example.com/v2/visits"}}`

### `klipfolio_datasource_share_rights_update`

Share Data Source · Write

Share a data source with groups or users, or change their edit rights; new entries are added and existing ones updated.
Returns meta.success on success.
Use klipfolio_datasource_share_rights_update to grant access. Use klipfolio_datasource_share_right_delete to revoke it.
Provide groups, users or both.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `groups` (`array`, optional): Groups to share with. Each entry has the group's ID (from klipfolio_groups_list) and can_edit, which is true to let the group edit or false for view-only access. Groups not yet shared get a new share right; existing ones are updated. Example: [{"group_id": "a9dff9e0b37ecd0fff24cba32ab88223", "can_edit": false}].
- `users` (`array`, optional): Individual users to share with. Each entry has the user's ID (from klipfolio_users_list) and can_edit, which is true to let the user edit or false for view-only access. Example: [{"user_id": "abcdef0123456789abcdef0123456789", "can_edit": true}].

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898"}`

### `klipfolio_datasource_update`

Update Data Source · Write

Update a data source's name, description or refresh interval.
Returns an empty data object and meta.success on success.
Use klipfolio_datasource_update for these three fields. Use klipfolio_datasource_properties_update to change connection settings such as the endpoint URL.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `description` (`string`, optional): Description of the data source. Example: "Daily visits pulled from the analytics API".
- `name` (`string`, optional): Name of the data source. Example: "Web Analytics (daily)".
- `refresh_interval` (`integer`, optional): New refresh interval in seconds. Example: 3600 (hourly).

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898"}`

### `klipfolio_datasources_refresh`

Refresh Data Sources · Write

Queue one or more data sources, with all their instances, for a refresh in one call.
Returns counts of data sources and instances requested and queued, plus failed_results for IDs that could not be queued.
Use klipfolio_datasources_refresh by data source ID. Use klipfolio_datasource_instance_refresh to refresh a single instance of a dynamic data source.

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

Inputs:

- `datasources` (`array`, required): IDs of the data sources to refresh (from klipfolio_datasources_list). Example: ["1a12bc34de56abc12de3ab4c45de12a3", "2a12bc34de12abc12de3ab3c45de32a1"].
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"datasources":["1a12bc34de56abc12de3ab4c45de12a3","2a12bc34de12abc12de3ab3c45de32a1"]}`

### `klipfolio_klip_annotation_create`

Create Klip Annotation · Write

Add an annotation (comment) to a Klip, authored by the API key's user.
Returns the new annotation's location (/klips/<id>/annotations/<annotation id>) in meta.location.
Use klipfolio_klip_annotation_create to add a note. Use klipfolio_klip_annotation_update to edit an existing one.

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

Inputs:

- `body` (`string`, required): Text of the annotation. Example: "Order volume dipped because of the June outage."
- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"body":"Order volume dipped because of the June outage.","klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_klip_annotation_update`

Update Klip Annotation · Write

Replace the text of an annotation on a Klip.
Returns an empty data object and meta.success on success.
Use klipfolio_klip_annotation_update to edit an annotation. Use klipfolio_klip_annotation_create to add a new one.

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

Inputs:

- `annotation_id` (`string`, required): ID of the annotation. Get it from the id field of klipfolio_klip_annotations_list. Example: "12345eba2f065109fb88be86b2f9279e".
- `body` (`string`, required): New text of the annotation. Example: "Updated: outage resolved on June 3."
- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"annotation_id":"12345eba2f065109fb88be86b2f9279e","body":"Updated: outage resolved on June 3.","klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_klip_create`

Create Klip · Write

Create a Klip with a name and description, using Klipfolio's simple default schema.
Returns the new Klip's location (/klips/<id>) in meta.location.
Use klipfolio_klip_create to add a Klip to the library. Then use klipfolio_klip_schema_update to define its visual and klipfolio_dashboard_klips_add to place it on a dashboard.

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

Inputs:

- `description` (`string`, required): Description of the Klip. Example: "Monthly revenue split by sales region".
- `name` (`string`, required): Name of the Klip. Example: "Revenue by Region".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"description":"Monthly revenue split by sales region","name":"Revenue by Region"}`

### `klipfolio_klip_schema_update`

Update Klip Schema · Write

Replace the schema (visual definition) of a Klip with the schema object you provide.
Returns an empty data object and meta.success on success.
Use klipfolio_klip_schema_update to change what a Klip displays. Use klipfolio_klip_update for its name and description.
Run klipfolio_klip_schema_get first and send back the edited schema.

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

Inputs:

- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `schema` (`object`, required): The complete Klip schema to save, sent as the request body. Start from the schema returned by klipfolio_klip_schema_get and edit it. It has a title, an id, a workspace object listing the data source IDs the Klip uses, and a components array that describes each visual element with its formulas and formatting. Example: {"title": "Default", "id": "0123456789abcdef0123456789abcdef", "workspace": {"datasources": []}, "components": [{"type": "simple_value", "displayName": "Value", "id": "8c79ad9b-4", "components": []}]}.
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"klip_id":"0123456789abcdef0123456789abcdef","schema":{}}`

### `klipfolio_klip_share_rights_update`

Share Klip · Write

Share a Klip with groups, or change their edit rights; new groups get a share right and existing ones are updated.
Returns an empty data object and meta.success on success.
Use klipfolio_klip_share_rights_update to grant group access to a Klip. Use klipfolio_klip_share_rights_get to see current access.

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

Inputs:

- `groups` (`array`, required): Groups to share with. Each entry has the group's ID (from klipfolio_groups_list) and can_edit, which is true to let the group edit or false for view-only access. Groups not yet shared get a new share right; existing ones are updated. Example: [{"group_id": "a9dff9e0b37ecd0fff24cba32ab88223", "can_edit": false}].
- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"groups":[{"group_id":"a9dff9e0b37ecd0fff24cba32ab88223","can_edit":false}],"klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_klip_update`

Update Klip · Write

Update a Klip's name or description.
Returns an empty data object and meta.success on success.
Use klipfolio_klip_update for the Klip's name and description only. Use klipfolio_klip_schema_update to change what the Klip shows.

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

Inputs:

- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `description` (`string`, optional): Description of the Klip. Example: "Monthly revenue split by sales region".
- `name` (`string`, optional): Name of the Klip. Example: "Revenue by Region".

Example input: `{"klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_published_link_create`

Create Published Link · Write

Publish a dashboard as a shareable link, optionally password protected.
Returns the new link's id, name, dashboard_url, visibility and creator.
Use klipfolio_published_link_create to share a dashboard outside Klipfolio. Use klipfolio_published_link_update to change an existing link.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard to publish. Get it from klipfolio_dashboards_list. Example: "a30969fdee0cad2c3ee0e3587b40df32".
- `name` (`string`, required): Name of the published link. Example: "Board Review Q3".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `is_public` (`boolean`, optional): Set to true to make the published link publicly searchable. Default false.
- `logo` (`string`, optional): URL of a logo image to show on the published dashboard. Example: "https://example.com/logo.png".
- `password` (`string`, optional): Password viewers must enter to open the published link. Leave empty for no password. Example: "Q3-review-2024".
- `social` (`boolean`, optional): Set to true to show social sharing icons. Default false.
- `theme` (`string`, optional): Color theme of the published dashboard: light or dark. Default light. One of: `light`, `dark`.
- `use_ip_ranges` (`boolean`, optional): Set to true to restrict viewing to the account's allowed IP ranges. Default false.
- `wants_advertising` (`boolean`, optional): Klipfolio's wantsAdvertising flag for the published link. Default false.

Example input: `{"dashboard_id":"a30969fdee0cad2c3ee0e3587b40df32","name":"Board Review Q3"}`

### `klipfolio_published_link_update`

Update Published Link · Write

Update a published link's name, password, visibility, theme, logo or other display options.
Returns the updated link's id, name, dashboard_url and visibility.
Use klipfolio_published_link_update to change a link. Use klipfolio_published_link_delete to revoke it.

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

Inputs:

- `published_link_id` (`string`, required): ID of the published link. Get it from the id field of klipfolio_published_links_list. Example: "d2e5cdcf7f1d6e6e764e3b24e9edd762".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `is_public` (`boolean`, optional): Set to true to make the published link publicly searchable. Default false.
- `logo` (`string`, optional): URL of a logo image to show on the published dashboard. Example: "https://example.com/logo.png".
- `name` (`string`, optional): Name of the published link. Example: "Board Review Q3 (final)".
- `password` (`string`, optional): Password viewers must enter to open the published link. Leave empty for no password. Example: "Q3-review-2024".
- `social` (`boolean`, optional): Set to true to show social sharing icons. Default false.
- `theme` (`string`, optional): Color theme of the published dashboard: light or dark. Default light. One of: `light`, `dark`.
- `use_ip_ranges` (`boolean`, optional): Set to true to restrict viewing to the account's allowed IP ranges. Default false.
- `wants_advertising` (`boolean`, optional): Klipfolio's wantsAdvertising flag for the published link. Default false.

Example input: `{"published_link_id":"d2e5cdcf7f1d6e6e764e3b24e9edd762"}`

### `klipfolio_user_dashboards_add`

Add Dashboards to User · Write

Add one or more dashboards to a user's Klipfolio view.
Returns the created tab_instances with their id, tab_id and name.
Use klipfolio_user_dashboards_add with dashboard IDs from klipfolio_dashboards_list, not tab instance IDs.

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

Inputs:

- `tab_ids` (`array`, required): IDs of the dashboards (tabs) to add, from klipfolio_dashboards_list. Example: ["ab12a34580678e912d9c365e12b1bc00"].
- `user_id` (`string`, required): ID of the user. Get it from the id field of klipfolio_users_list. Example: "ab05f4a011e6a93fb307f4e3e970c3c0".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"tab_ids":["ab12a34580678e912d9c365e12b1bc00"],"user_id":"ab05f4a011e6a93fb307f4e3e970c3c0"}`

### `klipfolio_dashboard_delete`

Delete Dashboard · Destructive

Permanently delete a dashboard (tab).
Returns meta.success on success.
Use klipfolio_dashboard_delete to remove the whole dashboard. Use klipfolio_dashboard_klip_instance_remove to remove a single Klip from it.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210"}`

### `klipfolio_dashboard_klip_instance_remove`

Remove Klip from Dashboard · Destructive

Remove one Klip instance from a dashboard (tab); the Klip stays in the library.
Returns an empty data object and meta.success on success.
Use klipfolio_dashboard_klip_instance_remove with an instance ID from klipfolio_dashboard_klip_instances_list. Use klipfolio_klip_delete to delete the Klip itself.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `klip_instance_id` (`string`, required): ID of the Klip instance on this dashboard (not the library Klip ID). Get it from the id field of klipfolio_dashboard_klip_instances_list. Example: "04462abd3a38372173645f3b50128596".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210","klip_instance_id":"04462abd3a38372173645f3b50128596"}`

### `klipfolio_dashboard_share_right_delete`

Unshare Dashboard from Group · Destructive

Revoke a group's access to a dashboard (tab).
Returns meta.success on success.
Use klipfolio_dashboard_share_right_delete to remove a group's share right. Use klipfolio_dashboard_share_rights_update to change it to view-only instead.

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

Inputs:

- `dashboard_id` (`string`, required): ID of the dashboard (called a tab in the Klipfolio API). Get it from the id field of klipfolio_dashboards_list. Example: "fedcba9876543210fedcba9876543210".
- `group_id` (`string`, required): ID of the group. Get it from the id field of klipfolio_groups_list. Example: "42c1accfbcfd54d44029ee5199805a9b".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"dashboard_id":"fedcba9876543210fedcba9876543210","group_id":"42c1accfbcfd54d44029ee5199805a9b"}`

### `klipfolio_datasource_delete`

Delete Data Source · Destructive

Permanently delete a data source.
Returns an empty data object and meta.success on success.
Use klipfolio_datasource_delete to remove the data source; Klips that use it lose their data. Use klipfolio_datasource_disable to stop refreshes without deleting.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898"}`

### `klipfolio_datasource_share_right_delete`

Unshare Data Source · Destructive

Revoke a group's or a user's access to a data source.
Returns an empty data object and meta.success on success.
Use klipfolio_datasource_share_right_delete with a group ID, or a user ID plus type=user. Use klipfolio_datasource_share_rights_update to change access instead.

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

Inputs:

- `datasource_id` (`string`, required): ID of the data source. Get it from the id field of klipfolio_datasources_list. Example: "c98bad42a8c8a63e0b5e6c0f7aca9898".
- `principal_id` (`string`, required): ID of the group (from klipfolio_groups_list) or user (from klipfolio_users_list) whose access to revoke. When it is a user ID, also set type to "user". Example: "fedcba9876543210fedcba9876543210".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".
- `type` (`string`, optional): Set to "user" when principal_id is a user ID. Leave empty when it is a group ID. One of: `user`.

Example input: `{"datasource_id":"c98bad42a8c8a63e0b5e6c0f7aca9898","principal_id":"fedcba9876543210fedcba9876543210"}`

### `klipfolio_klip_annotation_delete`

Delete Klip Annotation · Destructive

Delete an annotation from a Klip.
Returns an empty data object and meta.success on success.
Use klipfolio_klip_annotation_delete to remove one annotation; the Klip itself is unchanged.

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

Inputs:

- `annotation_id` (`string`, required): ID of the annotation. Get it from the id field of klipfolio_klip_annotations_list. Example: "12345eba2f065109fb88be86b2f9279e".
- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"annotation_id":"12345eba2f065109fb88be86b2f9279e","klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_klip_delete`

Delete Klip · Destructive

Permanently delete a Klip from the library.
Returns an empty data object and meta.success on success.
Use klipfolio_klip_delete to remove the Klip everywhere. Use klipfolio_dashboard_klip_instance_remove to take it off one dashboard only.

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

Inputs:

- `klip_id` (`string`, required): ID of the Klip. Get it from the id field of klipfolio_klips_list. Example: "0123456789abcdef0123456789abcdef".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"klip_id":"0123456789abcdef0123456789abcdef"}`

### `klipfolio_published_link_delete`

Delete Published Link · Destructive

Permanently delete a published link; its URL stops working.
Returns an empty data object and meta.success on success.
Use klipfolio_published_link_delete to revoke public access. The dashboard itself is unchanged.

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

Inputs:

- `published_link_id` (`string`, required): ID of the published link. Get it from the id field of klipfolio_published_links_list. Example: "d2e5cdcf7f1d6e6e764e3b24e9edd762".
- `client_id` (`string`, optional): ID of a client account to act in instead of your own company account (partner accounts that manage clients only). Leave empty to work in your own account. Get client IDs from klipfolio_clients_list. Example: "0123456789abcdef0123456789abcdef".

Example input: `{"published_link_id":"d2e5cdcf7f1d6e6e764e3b24e9edd762"}`

## Related

Other Analytics connectors ([all 109](/agentkit/connectors/?category=analytics)):

- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools
- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Snowflake](/agentkit/connectors/snowflake/): Scalekit connector, OAuth, 42 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 |
