> **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 Bland AI

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

**Authentication:** Bearer Token
**Categories:** AI, Communication
**Tools:** 50: 33 read, 15 write, 2 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=BLAND)

## 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 Bland AI connection

   In **AgentKit > Connections**, create a Bland AI 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 = 'bland'
   const identifier = 'user_123'

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

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

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

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Bland AI 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: 'bland_analyze_call',
  toolInput: {
    call_id: '<call_id>',
    goal: '<goal>',
    questions: [],
  },
  connector: 'bland',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="bland_analyze_call",
    tool_input={
        "call_id": "<call_id>",
        "goal": "<goal>",
        "questions": [],
    },
    connection_name="bland",
    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.

### `bland_analyze_call`

Analyze Call · Read-only

Run AI analysis over a finished call transcript to answer questions you define.
Returns status, message, an answers array in the same order as the questions, and credits_used.
Use to extract structured answers from a call. Use get_call to read the raw transcript instead.
The call must have completed and have a transcript.

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

Inputs:

- `call_id` (`string`, required): ID of the call to analyze.
- `goal` (`string`, required): Overall purpose of the call. Gives the analysis context for interpreting the transcript.
- `questions` (`array`, required): Questions to answer about the call. Each question is a two-item array: the question text and the expected answer type, for example [["Did the customer agree to a follow-up?", "boolean"]].

Example input: `{"call_id":"<call_id>","goal":"<goal>","questions":[]}`

### `bland_find_contact`

Find Contact · Read-only

Find a contact by phone number, email or external ID without creating anything.
Returns data with the contact's id, name, metadata, identifiers and memories, or null when no contact matches.
Use to look up an existing contact. Use resolve_contact to find or create one in a single step.
Provide at least one of phone_number, email or external_id.

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

Inputs:

- `email` (`string`, optional): Email address to search for.
- `external_id` (`string`, optional): External ID to search for.
- `phone_number` (`string`, optional): Phone number to search for, in E.164 format.

Example input: `{}`

### `bland_get_account`

Get Account · Read-only

Retrieve details of your Bland account, including balance and call totals.
Returns billing with current_balance, the account status and total_calls.
Use to check credit balance before placing calls or to confirm the API key works.

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

Inputs: none.

Example input: `{}`

### `bland_get_agent`

Get Agent · Read-only

Retrieve one agent together with its dev, staging and production environments.
Returns data with the agent id, name, timestamps and an environments array showing each environment's pinned version.
Use to see which version each environment runs. Use list_agent_versions for saved versions.

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

Inputs:

- `agent_id` (`string`, required): ID of the agent.

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

### `bland_get_batch`

Get Batch · Read-only

Retrieve metadata and shared configuration for one call batch.
Returns data with id, description, base_prompt, created_at and a preview of call_objects.
Use to inspect a batch. Use get_batch_logs for its lifecycle events and list_calls with batch_id for its calls.

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

Inputs:

- `batch_id` (`string`, required): ID of the batch.

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

### `bland_get_batch_logs`

Get Batch Logs · Read-only

Retrieve lifecycle log entries for a call batch, such as when it started and completed.
Returns a data array of log entries with id, event_type, timestamp and a payload object.
Use to follow a batch's progress. Use get_batch for its configuration.

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

Inputs:

- `batch_id` (`string`, required): ID of the batch.
- `direction` (`string`, optional): Sort order of the logs: asc or desc. Defaults to desc. One of: `asc`, `desc`.
- `skip` (`integer`, optional): Number of log entries to skip, for pagination.
- `take` (`integer`, optional): Number of log entries to return.

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

### `bland_get_call`

Get Call · Read-only

Retrieve full details for one call, including status, transcript, summary, recording URL, analysis and cost.
Returns the call object with completed, status, answered_by, call_length, summary, concatenated_transcript, transcripts, variables, price and related fields.
Use after send_call to check the outcome. Use list_calls to browse many calls without transcripts.

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

Inputs:

- `call_id` (`string`, required): ID of the call. You can also pass the external_id you set when sending the call.
- `fields` (`string`, optional): Comma-separated list of response fields to return, for example status,summary,variables. Omit to return everything.

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

### `bland_get_contact`

Get Contact · Read-only

Retrieve one contact by its ID, with identifiers and memories.
Returns data with the contact's id, org_id, name, metadata, identifiers and memories.
Use when you already have the contact ID. Use find_contact to search by phone, email or external ID.

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

Inputs:

- `contact_id` (`string`, required): ID of the contact.

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

### `bland_get_corrected_transcript`

Get Corrected Transcript · Read-only

Get a corrected transcript of a call, rebuilt from the recording with speaker labels and confidence scores.
Returns status, message and a corrected array of utterances with speaker and confidence details.
Use when the live transcript from get_call looks wrong. Use get_call for the standard transcript and summary.
The call must be finished and recorded.

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

Inputs:

- `call_id` (`string`, required): ID of the call to correct.

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

### `bland_get_inbound_number`

Get Inbound Number · Read-only

Retrieve the settings of one inbound phone number.
Returns created_at, phone_number, prompt, pathway_id, voice, background_track, webhook, max_duration and fallback_number.
Use to inspect how an inbound number answers calls. Use update_inbound_number to change it.

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

Inputs:

- `phone_number` (`string`, required): Inbound phone number with country code and no plus sign, for example 15551234567. A US country code is assumed when none is given.

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

### `bland_get_knowledge_base`

Get Knowledge Base Item · Read-only

Retrieve one knowledge base item, including its processing status.
Returns data with the item's id, name, description, type, status, source URLs, file details and error_message.
Use to check whether an item finished processing. Use list_knowledge_bases to find IDs.

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

Inputs:

- `knowledge_base_id` (`string`, required): ID of the knowledge base item.

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

### `bland_get_latest_agent_version`

Get Latest Agent Version · Read-only

Retrieve the newest saved version of an agent with its full configuration snapshot.
Returns data with the version id, agent_id, name, revision, created_at and a snapshot of behavior, settings and contact details.
Use to read an agent's current configuration. Use list_agent_versions for version history without snapshots.

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

Inputs:

- `agent_id` (`string`, required): ID of the agent.
- `branch` (`string`, optional): Branch ID. When set, returns that branch's newest save. Omit for the main dev timeline.

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

### `bland_get_pathway`

Get Pathway · Read-only

Retrieve one conversational pathway with its nodes and edges.
Returns the pathway name, description, nodes and edges.
Use before update_pathway to read the current graph. Use list_pathways to find the ID.

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

Inputs:

- `pathway_id` (`string`, required): ID of the pathway.

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

### `bland_get_persona`

Get Persona · Read-only

Retrieve one persona with its production version and pathway conditions.
Returns data with the persona's id, name, role, description, tags, inbound_numbers, current versions and pathway_conditions.
Use to inspect a persona. Use list_personas to find IDs.

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

Inputs:

- `persona_id` (`string`, required): ID of the persona.

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

### `bland_get_prompt`

Get Prompt · Read-only

Retrieve one saved prompt by ID.
Returns status and a prompt object with id, name, prompt text and last_updated.
Use to read a saved prompt found with list_prompts.

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

Inputs:

- `prompt_id` (`string`, required): ID of the prompt.

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

### `bland_get_sms_conversation`

Get SMS Conversation · Read-only

Retrieve one SMS conversation with all of its messages.
Returns data with the conversation id, numbers, is_active, summary, disposition_tag, variables and a chronological messages array.
Use to read a thread or check for replies after send_sms. Use list_sms_conversations to find IDs.

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

Inputs:

- `id` (`string`, required): ID of the SMS conversation.

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

### `bland_get_voice`

Get Voice · Read-only

Retrieve the record for one voice by its ID or curated name.
Returns a voice object with id, name, description, tags, service, public flag and ratings.
Use to check a voice you already know. Use list_voices to browse all voices.

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

Inputs:

- `id` (`string`, required): Voice UUID or curated voice name, for example Karen.

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

### `bland_list_active_calls`

List Active Calls · Read-only

List calls that are currently queued or in progress for your organization.
Returns a data array with call_id, from, to, status, start_time, pathway_id, agent_id and inbound for each active call.
Use to monitor live calls or find a call to stop. Use list_calls for finished calls.

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

Inputs: none.

Example input: `{}`

### `bland_list_agent_versions`

List Agent Versions · Read-only

List the saved versions of an agent, newest first.
Returns a data array of version metadata with id, name, created_via, created_at and semver.
Use to browse an agent's history. Use get_latest_agent_version for the newest version with its full configuration.

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

Inputs:

- `agent_id` (`string`, required): ID of the agent.
- `branch` (`string`, optional): Branch ID. When set, lists only that branch's saves. Omit to list the main dev timeline.
- `limit` (`integer`, optional): Maximum number of versions to return, from 1 to 200. Defaults to 50.

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

### `bland_list_agents`

List Agents · Read-only

List the agents in your organization, most recently updated first.
Returns a data array of agents with id, name, created_at, updated_at and color.
Use to find an agent_id for send_call. Use get_agent for one agent's environments.

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

Inputs:

- `limit` (`integer`, optional): Maximum number of agents to return, from 1 to 500. Defaults to 100.

Example input: `{}`

### `bland_list_batches`

List Batches · Read-only

List call batches created by your organization.
Returns a data array of batches with id, description, created_at, base_prompt and a preview of call_objects.
Use to find a batch ID. Use get_batch for one batch's details.

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

Inputs:

- `skip` (`integer`, optional): Number of batches to skip, for pagination.
- `take` (`integer`, optional): Number of batches to return.

Example input: `{}`

### `bland_list_block_rules`

List Block Rules · Read-only

List the rules that block specific phone numbers from reaching your inbound numbers.
Returns data with a blocks array, total_count and the filters applied.
Use to review blocked callers. Use create_block_rules to add rules and delete_block_rule to remove one.

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

Inputs:

- `active_only` (`boolean`, optional): When true, only currently active rules are returned. Set false to include deleted or inactive rules.
- `inbound_number` (`string`, optional): Only return rules for this inbound number, in E.164 format. If omitted, only global rules are returned.

Example input: `{}`

### `bland_list_calls`

List Calls · Read-only

List calls dispatched by your account, newest first, with optional filters for dates, numbers, status, batch and duration.
Returns total_count, count and a calls array of call metadata. Transcripts are not included.
Use to browse or filter call history. Use get_call for the transcript of one call.

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

Inputs:

- `answered_by` (`string`, optional): Only calls answered by this party, for example human or voicemail.
- `ascending` (`boolean`, optional): When true, sort oldest first instead of newest first.
- `batch_id` (`string`, optional): Only calls that belong to this batch.
- `campaign_id` (`string`, optional): Only calls that belong to this campaign.
- `completed` (`boolean`, optional): Filter by whether the call has completed.
- `created_at` (`string`, optional): Only calls created on this date, YYYY-MM-DD. Cannot be combined with start_date or end_date.
- `duration_gt` (`number`, optional): Only calls longer than this many minutes, for example 0.5 for thirty seconds.
- `duration_lt` (`number`, optional): Only calls shorter than this many minutes.
- `end_date` (`string`, optional): Only calls on or before this date. Accepts YYYY-MM-DD or an ISO 8601 date-time with offset.
- `external_id` (`string`, optional): Only calls with this external_id that you set when sending the call.
- `from_index` (`integer`, optional): Start index (inclusive) of the range of calls to return, for pagination. 0 starts at the first call.
- `from_number` (`string`, optional): Only return calls placed from this number, in E.164 format.
- `inbound` (`boolean`, optional): True returns only inbound calls, false only outbound calls.
- `limit` (`integer`, optional): Maximum number of calls to return.
- `sort_by` (`string`, optional): Field to sort by: created_at or updated_at. One of: `created_at`, `updated_at`.
- `start_date` (`string`, optional): Only calls on or after this date. Accepts YYYY-MM-DD or an ISO 8601 date-time with offset.
- `timezone` (`string`, optional): IANA timezone used to interpret date-only values, for example America/Toronto. Defaults to UTC.
- `to_index` (`integer`, optional): End index of the range of calls to return, for pagination. from_index 100 and to_index 150 return 50 calls.
- `to_number` (`string`, optional): Only return calls placed to this number, in E.164 format.

Example input: `{}`

### `bland_list_contacts`

List Contacts · Read-only

List the contacts in your organization with their identifiers and memories.
Returns a data array of contacts and a pagination object with total, limit, offset and has_more.
Use to browse contacts. Use find_contact to look one up by phone, email or external ID.

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

Inputs:

- `limit` (`integer`, optional): Maximum number of contacts to return, up to 200. Defaults to 50.
- `offset` (`integer`, optional): Number of contacts to skip, for pagination.

Example input: `{}`

### `bland_list_inbound_numbers`

List Inbound Numbers · Read-only

List all inbound phone numbers configured on your Bland account.
Returns an inbound_numbers array with each number's phone_number, prompt, pathway_id, voice and webhook settings.
Use to find a number to inspect or update. Use get_inbound_number for one number's full settings.

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

Inputs: none.

Example input: `{}`

### `bland_list_knowledge_bases`

List Knowledge Base Items · Read-only

List the knowledge base items in your organization.
Returns data.kbs with each item's id, name, type, status and timestamps, and data.total.
Use to find an item to attach to an agent or call. Use get_knowledge_base for one item.

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

Inputs:

- `limit` (`integer`, optional): Number of items per page, up to 100.
- `page` (`integer`, optional): Page number, starting at 1.

Example input: `{}`

### `bland_list_pathways`

List Pathways · Read-only

List all conversational pathways in your account, including their nodes and edges.
Returns each pathway's id, name, description, nodes and edges.
Use to find a pathway_id for send_call. Use get_pathway for one pathway you already know.

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

Inputs: none.

Example input: `{}`

### `bland_list_personas`

List Personas · Read-only

List the personas in your organization with their production and draft versions.
Returns a data array of personas with id, name, role, description, tags, inbound_numbers and version details.
Use to find a persona_id for send_call or send_sms. Use get_persona for one persona.

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

Inputs:

- `limit` (`integer`, optional): Number of personas per page, up to 100.
- `page` (`integer`, optional): Page number, starting at 1.

Example input: `{}`

### `bland_list_prompts`

List Prompts · Read-only

List the prompts you have saved in Bland.
Returns status and a prompts array.
Use to find a saved prompt. Use get_prompt for one prompt's text.

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

Inputs: none.

Example input: `{}`

### `bland_list_sms_conversations`

List SMS Conversations · Read-only

List SMS conversations with paging, sorting and optional filters.
Returns a data array of conversations with id, user_number, agent_number, is_active, message_count, last_message and summary, plus paging info.
Use to find conversations. Use get_sms_conversation to read all messages in one conversation.

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

Inputs:

- `filters` (`string`, optional): JSON-encoded array of filter objects, each with a field, an operator (eq, contains, startsWith, endsWith, gt, gte, lt, lte) and a value. Example: [{"field":"user_number","operator":"eq","value":"+15551234567"}].
- `page` (`integer`, optional): Page number to return, starting at 1.
- `page_size` (`integer`, optional): Number of conversations per page. Defaults to 25.
- `sort_by` (`string`, optional): Field to sort by: created_at, updated_at, user_number, agent_number, is_active or message_count. One of: `created_at`, `updated_at`, `user_number`, `agent_number`, `is_active`, `message_count`.
- `sort_dir` (`string`, optional): Sort direction: asc or desc. Defaults to desc. One of: `asc`, `desc`.

Example input: `{}`

### `bland_list_sms_numbers`

List SMS Numbers · Read-only

List the phone numbers configured for SMS along with their SMS settings.
Returns a data array with each phone_number and its sms_config such as webhook, objective, pathway_id and timeout settings.
Use to find a valid agent_number for send_sms. Use list_inbound_numbers for voice settings.

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

Inputs: none.

Example input: `{}`

### `bland_list_tools`

List Tools · Read-only

List the v2 tools in your Bland organization that agents can call during calls and SMS conversations.
Returns data.tools with each tool's id, name, description, integration, action, input_schema and active flag.
Use to see which tools your agents can use. This lists Bland's own tools, not Scalekit tools.

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

Inputs:

- `limit` (`integer`, optional): Number of tools per page, up to 1000. Defaults to 50.
- `order_by` (`string`, optional): Field to sort by. Only created_at is supported. One of: `created_at`.
- `order_direction` (`string`, optional): Sort direction: asc or desc. Defaults to desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number, starting at 1.
- `search` (`string`, optional): Filter tools by searching their name and description.

Example input: `{}`

### `bland_list_voices`

List Voices · Read-only

List every voice your account can use, including curated Bland voices, cloned voices and library voices.
Returns a voices array with id, name, description, tags, service, public flag and rating fields.
Use to pick a voice for send_call. Use get_voice for one voice's record.

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

Inputs: none.

Example input: `{}`

### `bland_create_agent`

Create Agent · Write

Create a new agent with empty dev, staging and production environments.
Returns data.agent with the new id and name, and data.environments listing three unpinned environments.
Use to start a new voice agent. Use update_agent to rename it later.
Requires an admin, owner, operator or prompter role. The agent has no behavior until a version is saved and promoted in Bland.

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

Inputs:

- `name` (`string`, required): Display name for the agent. Must not be empty.

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

### `bland_create_batch`

Create Batch · Write

Create a batch of outbound AI calls that share one set of call settings.
Returns data.batch_id for the new batch and errors set to null on success.
Use to dial many numbers with the same prompt. Use send_call for a single call. Track progress with get_batch and get_batch_logs.
The global object must include task or pathway_id and must not include phone_number. Batch calls cost credits and reach real phones.

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

Inputs:

- `global` (`object`, required): Call settings applied to every call in the batch. Must include task or pathway_id, and must not include phone_number. Accepts the same options as send_call, such as voice, record or webhook.
- `call_objects` (`array`, optional): The calls to place. Each item needs a phone_number and may override any global setting, for example task or request_data.
- `description` (`string`, optional): Short label for the batch shown in the dashboard, up to 60 characters.
- `status_webhook` (`string`, optional): HTTPS URL that receives batch status updates as the batch progresses and completes.

Example input: `{"global":{}}`

### `bland_create_block_rules`

Create Block Rules · Write

Block up to 10 phone numbers from reaching your inbound numbers, globally or for one number.
Returns data with created_count and the list of created block rules.
Use to stop unwanted callers. Use list_block_rules to review existing rules.
inbound_number is required when is_global is false.

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

Inputs:

- `is_global` (`boolean`, required): True blocks the numbers on all inbound numbers. False scopes the block to inbound_number.
- `numbers` (`array`, required): Phone numbers to block, in E.164 format. Maximum 10 per request.
- `inbound_number` (`string`, optional): Inbound number the block applies to, in E.164 format. Required when is_global is false.
- `reason` (`string`, optional): Note describing why the numbers are blocked.

Example input: `{"is_global":true,"numbers":[]}`

### `bland_create_knowledge_base_from_text`

Create Knowledge Base From Text · Write

Create a knowledge base item from text you provide.
Returns data with the new item's id, name, type TEXT and status, usually PROCESSING at first.
Use to add reference text for agents. Use create_knowledge_base_from_web to scrape web pages instead.

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

Inputs:

- `name` (`string`, required): Name for the knowledge base item.
- `text` (`string`, required): Text content to store, up to 1 MB.
- `description` (`string`, optional): Short description of what the item contains.

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

### `bland_create_knowledge_base_from_web`

Create Knowledge Base From Web · Write

Create a knowledge base item by scraping the content of web page URLs.
Returns data with the new item's id, name, type WEB_SCRAPE, source_urls and status, usually PROCESSING at first.
Use to import public documentation or help pages. Use create_knowledge_base_from_text for text you already have.

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

Inputs:

- `name` (`string`, required): Name for the knowledge base item.
- `urls` (`array`, required): Web page URLs to scrape, up to 100.
- `description` (`string`, optional): Short description of what the item contains.

Example input: `{"name":"<name>","urls":[]}`

### `bland_create_pathway`

Create Pathway · Write

Create a new, empty conversational pathway.
Returns status and the new pathway_id.
Use to start a new call flow, then fill it in with update_pathway.

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

Inputs:

- `name` (`string`, required): Name of the pathway.
- `description` (`string`, optional): Description of what the pathway does.

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

### `bland_resolve_contact`

Resolve Contact · Write

Find an existing contact by identifier or create a new one if none exists.
Returns data.contact with the contact record and data.created, which is true when a new contact was made.
Use to make sure a contact exists before a call. Use find_contact to look up without creating.
Provide at least one of phone_number, email or external_id.

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

Inputs:

- `agent_number` (`string`, optional): Agent phone number used to scope the contact's memory. Provide this or persona_id to create memory.
- `email` (`string`, optional): Email address for the contact.
- `external_id` (`string`, optional): External ID for the contact.
- `metadata` (`object`, optional): Custom metadata to store on the contact.
- `name` (`string`, optional): Name of the contact.
- `persona_id` (`string`, optional): Persona ID used to scope the contact's memory. Provide this or agent_number to create memory.
- `phone_number` (`string`, optional): Phone number for the contact, in E.164 format.

Example input: `{}`

### `bland_send_call`

Send Call · Write

Place an outbound AI phone call from Bland to one phone number, driven by a task prompt, a dashboard agent, a persona or a conversational pathway.
Returns status, the new call_id and, when the call is part of a batch, the batch_id. The call runs asynchronously, so the result does not include a transcript.
Use get_call with the returned call_id to read the outcome and transcript. Use create_batch to dial many numbers at once.
Provide exactly one way to drive the call: task, agent_id, persona_id or pathway_id. Voice calls cost credits and reach a real phone.

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

Inputs:

- `phone_number` (`string`, required): Phone number to call in E.164 format, with the plus sign and country code, for example +15551234567.
- `agent_id` (`string`, optional): UUID of a Bland agent in your organization to run the call. Use list_agents to find it. Requires an organization-level API key.
- `agent_version` (`string`, optional): Which saved version or environment of agent_id to use, for example production. Only valid together with agent_id.
- `dispositions` (`array`, optional): Outcome labels you define. After the call, the AI picks the best match from this list.
- `external_id` (`string`, optional): Your own identifier for the call, such as a CRM interaction ID. get_call accepts it in place of call_id.
- `first_sentence` (`string`, optional): Exact phrase the agent says first when the call connects.
- `from_number` (`string`, optional): Caller ID number to dial from, in E.164 format. Must be a number you own or imported from your own Twilio account. Omit to let Bland choose.
- `interruptibility` (`integer`, optional): How readily the agent stops talking when the caller speaks over it. Higher values yield more easily.
- `keywords` (`array`, optional): Words boosted in transcription, useful for names and jargon that are often misheard.
- `language` (`string`, optional): Language code that tunes transcription and speech for the call, for example babel-en or es.
- `max_duration` (`integer`, optional): Maximum call length in minutes. The call is ended automatically when this timer expires.
- `metadata` (`object`, optional): Custom metadata stored with the call and returned on call details and webhooks.
- `pathway_id` (`string`, optional): ID of a conversational pathway that scripts the call. Use list_pathways to find it. Replaces task.
- `pathway_version` (`integer`, optional): Pathway version to run: a version number, production or staging. Omit to use the production version.
- `persona_id` (`string`, optional): ID of a persona whose saved settings apply to the call. Use list_personas to find it.
- `persona_version` (`string`, optional): Persona version to use: production or draft. Only valid together with persona_id. One of: `production`, `draft`.
- `record` (`boolean`, optional): When true, the call audio is recorded and a recording_url appears on the call details.
- `request_data` (`object`, optional): Key-value data made available to the agent as variables in the prompt or pathway.
- `start_time` (`string`, optional): When to start the call, as an ISO 8601 date-time. If omitted or in the past, the call starts immediately.
- `summary_prompt` (`string`, optional): Custom instructions for how the post-call summary is written.
- `task` (`string`, optional): Instructions the AI agent follows during the call. Required when you do not pass agent_id, persona_id or pathway_id. Do not combine with pathway_id.
- `temperature` (`number`, optional): Randomness of the language model, from 0 for deterministic to 1 for creative.
- `timezone` (`string`, optional): IANA timezone for the call, for example America/New_York. Helps with scheduling and time-based answers.
- `transfer_phone_number` (`string`, optional): Phone number the agent can transfer the call to, for example when asked for a human, in E.164 format.
- `voice` (`string`, optional): Voice for the AI agent: a curated voice name such as Karen, or a voice ID from list_voices.
- `voicemail` (`object`, optional): Settings for how the agent behaves when it reaches voicemail, for example the message to leave or whether to hang up. Pass the object described in the Bland send call reference.
- `wait_for_greeting` (`boolean`, optional): When true, the agent waits for the other party to speak first instead of talking as soon as the call connects.
- `webhook` (`string`, optional): HTTPS URL that receives the full call details with transcript when the call ends.
- `webhook_events` (`array`, optional): Events to stream to the webhook while the call is in progress, for example call.

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

### `bland_send_sms`

Send SMS · Write

Send an SMS from one of your agent numbers to a user, starting or resuming a conversation.
Returns the conversation details for the message that was sent, including the conversation id.
Use to text a user. Use get_sms_conversation to read replies and list_sms_numbers to find a valid agent_number.
agent_number must be an SMS-enabled number on your account. Provide agent_message, objective, pathway_id or persona_id so Bland knows what to send.

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

Inputs:

- `agent_number` (`string`, required): Your SMS-enabled number that sends the message, in E.164 format.
- `user_number` (`string`, required): Phone number of the recipient in E.164 format.
- `agent_message` (`string`, optional): Exact text to send. If omitted, the message is generated from the pathway, persona or objective.
- `metadata` (`object`, optional): Custom metadata attached to the conversation and returned in webhooks.
- `new_conversation` (`boolean`, optional): When true, archives the existing conversation with this user and starts a new one.
- `objective` (`string`, optional): Goal of the conversation. Replies are generated to pursue this goal.
- `pathway_id` (`string`, optional): ID of a pathway used to generate responses in this conversation.
- `persona_id` (`string`, optional): ID of a persona whose configuration applies to this conversation.
- `request_data` (`object`, optional): Key-value data made available to the agent as variables.
- `webhook` (`string`, optional): HTTPS URL that overrides the number's webhook for this conversation.

Example input: `{"agent_number":"<agent_number>","user_number":"<user_number>"}`

### `bland_stop_batch`

Stop Batch · Write

Stop a call batch that is running or scheduled.
Returns data and errors set to null when the batch was stopped.
Use to halt remaining calls in a batch found with list_batches. Calls already in progress are not covered by this tool; use stop_call for those.

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

Inputs:

- `batch_id` (`string`, required): ID of the batch to stop.

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

### `bland_stop_call`

Stop Call · Write

End an in-progress phone call immediately.
Returns status and a message confirming the call was ended, or an error message if the call could not be found.
Use to hang up a live call found with list_active_calls. Finished calls cannot be stopped.

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

Inputs:

- `call_id` (`string`, required): ID of the call to end.

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

### `bland_update_agent`

Update Agent · Write

Rename an existing agent.
Returns data with the updated agent id, name and timestamps. Environments are not included.
Use to change an agent's display name. Use get_agent to see its environments.

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

Inputs:

- `agent_id` (`string`, required): ID of the agent.
- `name` (`string`, required): New display name for the agent. Must not be empty.

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

### `bland_update_contact`

Update Contact · Write

Update a contact's name, email, external ID or metadata.
Returns data with the updated contact's id, name, metadata and timestamps.
Use to correct or enrich a contact found with find_contact. Metadata keys are merged with existing metadata.

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

Inputs:

- `contact_id` (`string`, required): ID of the contact to update.
- `email` (`string`, optional): Email address to add or update.
- `external_id` (`string`, optional): External ID to add or update.
- `metadata` (`object`, optional): Metadata merged into the existing metadata: new keys are added and existing keys are updated.
- `name` (`string`, optional): Updated name for the contact.

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

### `bland_update_inbound_number`

Update Inbound Number · Write

Update how an inbound phone number answers calls: its prompt or pathway, voice, webhook, transfer and call limits.
Returns a status and message confirming the inbound number was updated.
Use to reconfigure an inbound line. Use get_inbound_number to read its current settings first.
The number must already be configured on your account; see list_inbound_numbers.

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

Inputs:

- `phone_number` (`string`, required): Inbound phone number with country code and no plus sign, for example 15551234567. A US country code is assumed when none is given.
- `background_track` (`string`, optional): Background audio played during the call, for example office, cafe, restaurant or none.
- `block_interruptions` (`boolean`, optional): When true, the agent does not respond to interruptions from the caller.
- `fallback_number` (`string`, optional): Number that calls are forwarded to during Bland maintenance windows, in E.164 format.
- `first_sentence` (`string`, optional): Exact phrase the agent says first.
- `keywords` (`array`, optional): Words boosted in transcription, for names and jargon that are often misheard.
- `language` (`string`, optional): Language code for transcription and speech, for example en-US.
- `max_duration` (`integer`, optional): Maximum call length in minutes.
- `noise_cancellation` (`boolean`, optional): When true, background noise is filtered from the call audio.
- `pathway_id` (`string`, optional): ID of a conversational pathway for the number to follow. Overrides prompt.
- `pathway_version` (`integer`, optional): Pathway version number to use. Defaults to the production version.
- `prompt` (`string`, optional): Instructions for the inbound agent, with background information and the ideal conversation flow. Not needed when pathway_id is set.
- `request_data` (`object`, optional): Key-value data made available to the agent as variables during calls.
- `summary_prompt` (`string`, optional): Custom instructions for how the post-call summary is written.
- `timezone` (`string`, optional): IANA timezone for the number, for example America/New_York.
- `transfer_phone_number` (`string`, optional): Phone number the agent can transfer callers to, in E.164 format.
- `voice` (`string`, optional): Voice for the agent. Use a curated voice name or an ID from list_voices.
- `webhook` (`string`, optional): HTTPS URL that receives call details after each call to this number ends.

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

### `bland_update_pathway`

Update Pathway · Write

Update a pathway's name, description, nodes and edges.
Returns status, the pathway_id and the saved nodes and edges.
Use to edit a call flow. Use get_pathway first and send back the full nodes and edges, because they replace the existing graph.
The pathway must exist; create it with create_pathway.

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

Inputs:

- `pathway_id` (`string`, required): ID of the pathway to update.
- `description` (`string`, optional): New description of the pathway.
- `edges` (`array`, optional): Complete list of edges that connect nodes. Each edge has an id, a source node id, a target node id and a data object with a label describing when to take it. Example: [{"id": "e1", "source": "1", "target": "2", "data": {"label": "User wants to book"}}].
- `name` (`string`, optional): New name of the pathway.
- `nodes` (`array`, optional): Complete list of nodes in the conversation flow. Each node has an id, a type such as Default or End Call, and a data object with a name and a prompt or text. Example: [{"id": "1", "type": "Default", "data": {"name": "Greeting", "isStart": true, "text": "Hello, how can I help?"}}].

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

### `bland_delete_block_rule`

Delete Block Rule · Destructive

Permanently delete one block rule so the number can reach your inbound numbers again.
Returns data with a confirmation message and the deleted_block_id.
Use to unblock a caller after finding the rule ID with list_block_rules.

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

Inputs:

- `block_id` (`integer`, required): Numeric ID of the block rule to delete.

Example input: `{"block_id":1}`

### `bland_delete_knowledge_base`

Delete Knowledge Base Item · Destructive

Permanently delete a knowledge base item.
Returns data with a confirmation message and the deleted knowledge_base_id.
Use to remove an item found with list_knowledge_bases. The deletion cannot be undone.

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

Inputs:

- `knowledge_base_id` (`string`, required): ID of the knowledge base item to delete.

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

## Related

Other AI connectors ([all 134](/agentkit/connectors/?category=ai)):

- [Chorus](/agentkit/connectors/chorus/): Scalekit connector, Username and password, 9 tools
- [Gong](/agentkit/connectors/gong/): Scalekit connector, OAuth, 69 tools
- [Jiminny](/agentkit/connectors/jiminny/): Scalekit connector, Access token, 27 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 |
