> **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 Builder.io

The Builder.io connector lets your AI agent act in each user's Builder.io account. Each user connects their own Builder.io access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 22 tools.

**Authentication:** Bearer Token
**Categories:** Developer Tools, Design
**Tools:** 22: 10 read, 8 write, 4 destructive
**Users sign in with:** Access token
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=BUILDERIO)

## 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 Builder.io connection

   In **AgentKit > Connections**, create a Builder.io 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 = 'builderio'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Builder.io:', 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: 'builderio_assets_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 = "builderio"
   identifier = "user_123"

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

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

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Builder.io 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: 'builderio_assets_list',
  toolInput: {},
  connector: 'builderio',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="builderio_assets_list",
    tool_input={},
    connection_name="builderio",
    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.

### `builderio_assets_list`

List Assets · Read-only

List media assets in the Builder space through the Admin API, with paging, sorting, and folder filtering.
Returns each asset's id, name, type, url, size, dimensions, and folders.
Use this to find uploaded images and files. Use builderio_asset_delete to remove one.

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

Inputs:

- `folder_id` (`string`, optional): ID of an asset folder to list. Assets from all folders are returned when omitted.
- `limit` (`integer`, optional): Maximum number of assets to return.
- `offset` (`integer`, optional): Number of assets to skip, for paging.
- `query` (`object`, optional): Filter as a MongoDB-style JSON object over asset fields. Example: {"type": "image/png"}.
- `sort` (`object`, optional): Sort order as a JSON object mapping a field to 1 for ascending or -1 for descending. Example: {"createdDate": -1}.

Example input: `{}`

### `builderio_content_get`

Get Content Entry · Read-only

Retrieve one published content entry from a Builder model by its entry ID through the Content API.
Returns a results array holding the matching entry (id, name, data, metadata, lastUpdated), or an empty array when no published entry has that ID.
Use this when you already have the entry ID. Use builderio_content_list to browse, or builderio_content_get_by_url to look up a page by URL path.

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

Inputs:

- `api_key` (`string`, required): Public API Key of the Builder space to read from. The Content API requires it as the apiKey query parameter.
- `entry_id` (`string`, required): ID of the content entry to retrieve.
- `model` (`string`, required): Model name (the model's API name, not its display name), for example page, section, or a custom data model such as blog-post.
- `enrich` (`boolean`, optional): When true, resolves references and symbols inside the entry so linked content is included.
- `fields` (`string`, optional): Comma-separated list of fields to return, for example id,name,data. All fields are returned when omitted.

Example input: `{"api_key":"<api_key>","entry_id":"<entry_id>","model":"<model>"}`

### `builderio_content_get_by_url`

Get Content Entry by URL · Read-only

Retrieve the published content entry that Builder serves for a URL path, using the Content API targeting rules.
Returns a results array holding the best matching entry (id, name, data, metadata, lastUpdated), or an empty array when nothing targets that path.
Use this to resolve a page by its URL path. Use builderio_content_get when you have the entry ID.

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

Inputs:

- `api_key` (`string`, required): Public API Key of the Builder space to read from. The Content API requires it as the apiKey query parameter.
- `model` (`string`, required): Model name (the model's API name, not its display name), for example page, section, or a custom data model such as blog-post.
- `url_path` (`string`, required): URL path to match against the targeting rules of published entries, starting with a slash, for example /pricing.
- `enrich` (`boolean`, optional): When true, resolves references and symbols inside the entry so linked content is included.
- `fields` (`string`, optional): Comma-separated list of fields to return, for example id,name,data. All fields are returned when omitted.

Example input: `{"api_key":"<api_key>","model":"<model>","url_path":"<url_path>"}`

### `builderio_content_list`

List Content Entries · Read-only

List published content entries of a Builder model through the Content API, with paging and field selection.
Returns a results array of entries (id, name, data, metadata, lastUpdated), plus totalCount when requested. Only published entries are returned, and Builder targeting rules can narrow the results.
Use this to browse a model. Use builderio_content_get for one entry by ID, or builderio_content_get_by_url for a page by URL path.

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

Inputs:

- `api_key` (`string`, required): Public API Key of the Builder space to read from. The Content API requires it as the apiKey query parameter.
- `model` (`string`, required): Model name (the model's API name, not its display name), for example page, section, or a custom data model such as blog-post.
- `enrich` (`boolean`, optional): When true, resolves references and symbols inside each entry so linked content is included in the response.
- `exclude_expired` (`boolean`, optional): When true, entries whose scheduled end date has passed are left out.
- `fetch_total_count` (`boolean`, optional): When true, the response includes a totalCount key with the number of matching entries.
- `fields` (`string`, optional): Comma-separated list of fields to return, for example id,name,data.title. All fields are returned when omitted.
- `limit` (`integer`, optional): Maximum number of entries to return per request. The server default is 30 and the maximum is 100. Default: `30`.
- `offset` (`integer`, optional): Number of entries to skip, for paging through a large model. Default: `0`.
- `omit` (`string`, optional): Comma-separated list of fields to leave out of each entry, for example data.blocks. Applied after fields when both are given.

Example input: `{"api_key":"<api_key>","model":"<model>"}`

### `builderio_folder_get`

Get Folder · Read-only

Retrieve one content folder of the Builder space by ID through the Admin API.
Returns the folder's id, name, description, archived flag, entry IDs, and parent folder.
Use this when you have the folder ID. Use builderio_folders_list to browse.

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

Inputs:

- `folder_id` (`string`, required): ID of the content folder.

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

### `builderio_folders_list`

List Folders · Read-only

List all content folders in the Builder space through the Admin API.
Returns each folder's id, name, description, archived flag, entry IDs, and parent folder.
Use this to find folder IDs. Use builderio_folder_get for one folder.

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

Inputs: none.

Example input: `{}`

### `builderio_model_get`

Get Model · Read-only

Retrieve one model of the Builder space by ID through the Admin API.
Returns the model's id, name, kind, path prefix, visibility flags, and field definitions.
Use this to inspect a model's schema. Use builderio_models_list when you do not know the ID.

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

Inputs:

- `model_id` (`string`, required): ID of the model to retrieve.

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

### `builderio_models_list`

List Models · Read-only

List every model in the Builder space through the Admin API.
Returns each model's id, name, kind, path prefix, visibility flags, and field definitions.
Use this to find model names for content tools. Use builderio_model_get for one model.

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

Inputs: none.

Example input: `{}`

### `builderio_settings_get`

Get Space Settings · Read-only

Retrieve the settings of the Builder space through the Admin API.
Returns the space settings as a JSON object, including its name and configuration.
Use this to read space-level configuration. Use builderio_models_list to see its content types.

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

Inputs: none.

Example input: `{}`

### `builderio_users_list`

List Space Users · Read-only

List the users who have access to the Builder space through the Admin API.
Returns each user's id, name, email, role, and last active time.
Use this to look up teammates, for example before assigning work. It does not change membership.

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

Inputs: none.

Example input: `{}`

### `builderio_asset_folder_create`

Create Asset Folder · Write

Create a folder for media assets in the Builder space through the Admin API.
Returns the created asset folder's id, name, and parent folder.
Use this to organize uploaded files. Use builderio_folder_create instead for content entry folders.

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

Inputs:

- `name` (`string`, required): Name of the asset folder.
- `parent_folder` (`string`, optional): ID of the parent asset folder, to nest the new folder.

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

### `builderio_entry_create`

Create Content Entry · Write

Create a new content entry in a Builder model through the Write API.
Returns the created entry with its id, name, and data.
Use this to add a new entry. Use builderio_entry_update to change an existing one. Every call creates a new entry.

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

Inputs:

- `data` (`object`, required): Entry data as a JSON object of field names to values. Include a blocks array only for Page or Section models, and omit it for Data models.
- `model` (`string`, required): Model name (the model's API name, not its display name), for example page, section, or a custom data model such as blog-post.
- `name` (`string`, optional): Display name of the entry as shown in the Builder content list.
- `published` (`string`, optional): Publish status of the new entry: draft, published, or archived. One of: `draft`, `published`, `archived`.
- `query` (`array`, optional): Targeting rules for the entry as a list of objects, each with property, operator, and value. Example: [{"property": "urlPath", "operator": "is", "value": "/pricing"}].
- `trigger_webhooks` (`boolean`, optional): Set to false to stop Builder from firing webhooks for this write. When omitted, webhooks fire as usual.

Example input: `{"data":{},"model":"<model>"}`

### `builderio_entry_replace`

Replace Content Entry · Write

Create or fully replace a content entry at a given ID in a Builder model through the Write API.
Returns the stored entry id and data.
Use this only with the complete entry data, because fields you leave out are deleted. Use builderio_entry_update for partial changes.

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

Inputs:

- `data` (`object`, required): Entry data as a JSON object of field names to values. Send the complete entry, since any field you omit is removed.
- `entry_id` (`string`, required): ID of the content entry to replace.
- `model` (`string`, required): Model name (the model's API name, not its display name), for example page, section, or a custom data model such as blog-post.
- `trigger_webhooks` (`boolean`, optional): Set to false to stop Builder from firing webhooks for this write. When omitted, webhooks fire as usual.

Example input: `{"data":{},"entry_id":"<entry_id>","model":"<model>"}`

### `builderio_entry_update`

Update Content Entry · Write

Partially update a content entry in a Builder model through the Write API, changing only the data fields you send.
Returns the updated entry with its name, id, and data.
Use this to change some fields. Use builderio_entry_replace to overwrite the whole entry, where omitted fields are deleted.

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

Inputs:

- `data` (`object`, required): Entry data as a JSON object of field names to values. Only the fields you include are changed.
- `entry_id` (`string`, required): ID of the content entry to update.
- `model` (`string`, required): Model name (the model's API name, not its display name), for example page, section, or a custom data model such as blog-post.
- `trigger_webhooks` (`boolean`, optional): Set to false to stop Builder from firing webhooks for this write. When omitted, webhooks fire as usual.

Example input: `{"data":{},"entry_id":"<entry_id>","model":"<model>"}`

### `builderio_folder_create`

Create Folder · Write

Create a content folder in the Builder space through the Admin API.
Returns the created folder with its id, name, description, entry IDs, and parent folder.
Use this to organize entries. Use builderio_folder_update to change an existing folder.

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

Inputs:

- `name` (`string`, required): Name of the folder.
- `description` (`string`, optional): Free-text description of the folder.
- `entries` (`array`, optional): IDs of the content entries that belong to the folder.
- `parent_folder` (`string`, optional): ID of the parent folder, to nest this folder inside another one.

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

### `builderio_folder_update`

Update Folder · Write

Update a content folder in the Builder space through the Admin API, changing only the fields you send.
Returns the updated folder with its id, name, description, archived flag, entry IDs, and parent folder.
Use this to rename, move, archive, or change the entries of a folder. Use builderio_folder_create to add a new folder.

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

Inputs:

- `folder_id` (`string`, required): ID of the content folder.
- `archived` (`boolean`, optional): Set to true to archive the folder, or false to restore it.
- `description` (`string`, optional): Free-text description of the folder.
- `entries` (`array`, optional): IDs of the content entries that belong to the folder.
- `name` (`string`, optional): Name of the folder.
- `parent_folder` (`string`, optional): ID of the parent folder, to nest this folder inside another one.

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

### `builderio_model_create`

Create Model · Write

Create a new model in the Builder space through the Admin API.
Returns the created model with its id, name, kind, and field definitions.
Use this to define a new content type. Use builderio_model_update to change an existing model.

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

Inputs:

- `model_definition` (`object`, required): Model definition as a JSON object. It needs a name and a kind (data, page, component, or section) and usually a fields array describing each field's name and type. Example: {"name": "blog-post", "kind": "data", "fields": [{"name": "title", "type": "text", "required": true}]}.

Example input: `{"model_definition":{}}`

### `builderio_model_update`

Update Model · Write

Update an existing model in the Builder space through the Admin API.
Returns the updated model with its id, name, kind, and field definitions.
Use this to change a model's settings or fields. Use builderio_model_create to add a new model.

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

Inputs:

- `model_changes` (`object`, required): Model properties to change, as a JSON object. Example: {"helperText": "Blog posts for the marketing site", "fields": [{"name": "title", "type": "text"}]}.
- `model_id` (`string`, required): ID of the model to update.

Example input: `{"model_changes":{},"model_id":"<model_id>"}`

### `builderio_asset_delete`

Delete Asset · Destructive

Delete a media asset from the Builder space through the Admin API.
Returns true when the asset is removed.
Use this only when the file is no longer referenced by any content. Use builderio_assets_list to find the asset ID.

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

Inputs:

- `asset_id` (`string`, required): ID of the asset to delete.

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

### `builderio_entry_delete`

Delete Content Entry · Destructive

Permanently delete a content entry from a Builder model through the Write API.
Returns a message of Success when the entry is removed.
Use this only when the entry should be gone for good. Set the publish status to archived with update or create tools to retire an entry without deleting it.

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

Inputs:

- `entry_id` (`string`, required): ID of the content entry to delete.
- `model` (`string`, required): Model name (the model's API name, not its display name), for example page, section, or a custom data model such as blog-post.
- `trigger_webhooks` (`boolean`, optional): Set to false to stop Builder from firing webhooks for this write. When omitted, webhooks fire as usual.

Example input: `{"entry_id":"<entry_id>","model":"<model>"}`

### `builderio_folder_delete`

Delete Folder · Destructive

Delete a content folder from the Builder space through the Admin API.
Returns true when the folder is removed.
Use this only when the folder is no longer needed. Use builderio_folder_update with archived set to true to retire it instead.

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

Inputs:

- `folder_id` (`string`, required): ID of the content folder.

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

### `builderio_model_delete`

Delete Model · Destructive

Delete a model from the Builder space through the Admin API.
Returns the deleted model's id, name, and kind.
Use this only when the whole content type should be removed, because its entries are affected too.

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

Inputs:

- `model_id` (`string`, required): ID of the model to delete.

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

## Related

Other Developer Tools connectors ([all 117](/agentkit/connectors/?category=developer-tools)):

- [GitHub](/agentkit/connectors/github/): Scalekit connector, OAuth, 217 tools
- [Microsoft Entra ID](/agentkit/connectors/microsoftentraid/): Scalekit connector, OAuth, 82 tools
- [Datadog](/agentkit/connectors/datadog/): Scalekit connector, API key, 105 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 |
