> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agentkit`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Close

**Authentication:** OAuth 2.0
**Categories:** Crm, Sales, Communication
## What you can do

Connect this agent connector to let your agent:

- **List webhooks, users, tasks** — List all webhook subscriptions in Close
- **Update webhook, task, sms** — Update a webhook subscription's URL or event subscriptions
- **Get webhook, user, task** — Retrieve a single webhook subscription by ID
- **Delete webhook, task, sms** — Delete a webhook subscription from Close
- **Create webhook, task, sms** — Create a new webhook subscription to receive Close event notifications
- **Merge lead** — Merge two leads into one

## Authentication

This connector uses **OAuth 2.0**. Scalekit acts as the OAuth client: it redirects your user to Close, obtains an access token, and automatically refreshes it before it expires. Your agent code never handles tokens directly — you only pass a `connectionName` and a user `identifier`.

You supply your Close **Connected App** credentials (Client ID + Secret) once per environment in the Scalekit dashboard.

Before calling this connector from your code, create the Close connection in **AgentKit** > **Connections** and copy the exact **Connection name** from that connection into your code. The value in code must match the dashboard exactly.

## Set up the connector

Register your Scalekit environment with the Close connector so Scalekit handles the OAuth flow and token lifecycle for you. The connection name you create will be used to identify and invoke the connection programmatically.

1. ### Create a Close OAuth app

   - Sign in to [Close](https://app.close.com) and go to **Settings** → **Developer** → **OAuth Apps**.
   - Click **Create New OAuth App**.
   - Enter an app name and description.
   - In the **Redirect URIs** field, paste the redirect URI from Scalekit (see next step — you can come back to add it).

   > Image: Screenshot

   - Copy your **Client ID** and **Client Secret** from the app detail page.

2. ### Set up the connection in Scalekit

   - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**.
   - Find **Close** and click **Create**.
   - Copy the **Redirect URI** shown — it looks like:
     `https:///sso/v1/oauth//callback`
   - Note the **Connection name** (e.g., `close`) — use this as `connection_name` in your code.

   > Image: Screenshot

   - Return to your Close OAuth app and add the redirect URI you copied.
   - Back in Scalekit, enter your **Client ID** and **Client Secret**. Scopes are granted automatically by Close — no additional scope configuration is needed.
   - Click **Save**.

3. ### Add a connected account

   **Via dashboard (for testing)**
   - In the connection page, click the **Connected Accounts** tab → **Add account**.
   - Enter a **User ID** and click **Save**. You will be redirected to Close to authorize access.

   > Image: Screenshot

   **Via API (for production)**

   
     ### Node.js

```typescript
const { link } = await scalekit.actions.getAuthorizationLink({
  connectionName: 'close',
  identifier: 'user_123',
});
// Redirect your user to `link` to authorize access
console.log('Authorize at:', link);
```

     ### Python

```python
response = scalekit_client.actions.get_authorization_link(
    connection_name="close",
    identifier="user_123"
)
# Redirect your user to response.link to authorize access
print("Authorize at:", response.link)
```

   

   > tip: Token refresh
>
> Close access tokens expire after 1 hour. Scalekit automatically refreshes them using the refresh token granted by `offline_access` — no re-authorization needed.

> note: Required scopes
>
> Close OAuth apps automatically receive `all.full_access` and `offline_access`. No additional scope configuration is needed — all 81 tools work with these two scopes.

## Code examples

Once a connected account is authorized, make Close API calls through the Scalekit proxy — no OAuth flow needed per request.

## Proxy API calls

  ### Node.js

```typescript

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

// Fetch the authenticated user's profile
const me = await actions.request({
  connectionName: 'close',
  identifier: 'user_123',
  path: '/api/v1/me/',
  method: 'GET',
});
console.log(me);
```

  ### Python

```python

from dotenv import load_dotenv
load_dotenv()

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

# Fetch the authenticated user's profile
me = actions.request(
    connection_name="close",
    identifier="user_123",
    path="/api/v1/me/",
    method="GET"
)
print(me)
```

> tip: No OAuth flow per request
>
> Close uses OAuth 2.0 — Scalekit stores and refreshes the access token automatically. Your code only needs `connection_name` and `identifier` per request.

## Scalekit tools

Use `execute_tool` to call Close tools directly without constructing raw HTTP requests.

### Basic example — get the current user

  ### Node.js

```typescript
const me = await actions.executeTool({
  toolName: 'close_me_get',
  connectionName: 'close',
  identifier: 'user_123',
  toolInput: {},
});
console.log(me);
```

  ### Python

```python
me = actions.execute_tool(
    tool_name="close_me_get",
    connection_name="close",
    identifier="user_123",
    tool_input={}
)
print(me)
```

## Advanced enrichment workflow

This example shows a complete lead enrichment pipeline: find a lead, attach activities, enroll in a sequence, and track progress — all in one automated flow.

  ### Node.js

```typescript

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

const opts = { connectionName: 'close', identifier: 'user_123' };

async function enrichAndEnrollLead(companyName: string, contactEmail: string) {
  // 1. Find or create the lead
  const searchResult = await actions.executeTool({
    toolName: 'close_leads_list',
    ...opts,
    toolInput: { query: companyName, _limit: 1 },
  });

  let leadId: string;
  if (searchResult.data.length > 0) {
    leadId = searchResult.data[0].id;
    console.log(`Found existing lead: ${leadId}`);
  } else {
    const newLead = await actions.executeTool({
      toolName: 'close_lead_create',
      ...opts,
      toolInput: { name: companyName },
    });
    leadId = newLead.id;
    console.log(`Created lead: ${leadId}`);
  }

  // 2. Create a contact on the lead
  const contact = await actions.executeTool({
    toolName: 'close_contact_create',
    ...opts,
    toolInput: {
      lead_id: leadId,
      name: contactEmail.split('@')[0],
      emails: JSON.stringify([{ email: contactEmail, type: 'office' }]),
    },
  });
  console.log(`Created contact: ${contact.id}`);

  // 3. Create an opportunity on the lead
  const pipelines = await actions.executeTool({
    toolName: 'close_pipelines_list',
    ...opts,
    toolInput: {},
  });
  const pipeline = pipelines.data[0];
  const activeStatus = pipeline.statuses.find((s: any) => s.type === 'active');
  if (!activeStatus) throw new Error('No active status found in pipeline');

  const opportunity = await actions.executeTool({
    toolName: 'close_opportunity_create',
    ...opts,
    toolInput: {
      lead_id: leadId,
      status_id: activeStatus.id,
      value: 500000,           // $5,000.00 in cents
      value_currency: 'USD',
      value_period: 'one_time',
      confidence: 30,
    },
  });
  console.log(`Created opportunity: ${opportunity.id} — $${opportunity.value / 100}`);

  // 4. Log a note summarizing the enrichment
  await actions.executeTool({
    toolName: 'close_note_create',
    ...opts,
    toolInput: {
      lead_id: leadId,
      note: `Lead enriched automatically. Contact ${contactEmail} created. Opportunity ${opportunity.id} opened.`,
    },
  });

  // 5. Create a follow-up task
  const tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate() + 1);
  await actions.executeTool({
    toolName: 'close_task_create',
    ...opts,
    toolInput: {
      lead_id: leadId,
      text: `Follow up with ${contactEmail}`,
      date: tomorrow.toISOString().split('T')[0],
    },
  });

  // 6. Enroll the contact in a sequence (if sequences exist)
  const sequences = await actions.executeTool({
    toolName: 'close_sequences_list',
    ...opts,
    toolInput: { _limit: 1 },
  });

  if (sequences.data.length > 0) {
    const subscription = await actions.executeTool({
      toolName: 'close_sequence_subscription_create',
      ...opts,
      toolInput: {
        contact_id: contact.id,
        sequence_id: sequences.data[0].id,
      },
    });
    console.log(`Enrolled contact in sequence. Subscription: ${subscription.id}`);
  }

  return { leadId, contactId: contact.id, opportunityId: opportunity.id };
}

// Run the enrichment
enrichAndEnrollLead('Acme Corp', 'jane@acme.com').then(console.log);
```

  ### Python

```python

from datetime import date, timedelta
from dotenv import load_dotenv
load_dotenv()

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

def execute(tool_name, tool_input):
    return actions.execute_tool(
        tool_name=tool_name,
        connection_name="close",
        identifier="user_123",
        tool_input=tool_input
    )

def enrich_and_enroll_lead(company_name: str, contact_email: str):
    # 1. Find or create the lead
    search = execute("close_leads_list", {"query": company_name, "_limit": 1})
    if search["data"]:
        lead_id = search["data"][0]["id"]
        print(f"Found existing lead: {lead_id}")
    else:
        lead = execute("close_lead_create", {"name": company_name})
        lead_id = lead["id"]
        print(f"Created lead: {lead_id}")

    # 2. Create a contact on the lead
    contact = execute("close_contact_create", {
        "lead_id": lead_id,
        "name": contact_email.split("@")[0],
        "emails": json.dumps([{"email": contact_email, "type": "office"}]),
    })
    print(f"Created contact: {contact['id']}")

    # 3. Create an opportunity
    pipelines = execute("close_pipelines_list", {})
    pipeline = pipelines["data"][0]
    active_status = next(s for s in pipeline["statuses"] if s["type"] == "active")

    opp = execute("close_opportunity_create", {
        "lead_id": lead_id,
        "status_id": active_status["id"],
        "value": 500000,        # $5,000.00 in cents
        "value_currency": "USD",
        "value_period": "one_time",
        "confidence": 30,
    })
    print(f"Created opportunity: {opp['id']} — ${opp['value'] / 100:.2f}")

    # 4. Log a note
    execute("close_note_create", {
        "lead_id": lead_id,
        "note": (
            f"Lead enriched automatically. "
            f"Contact {contact_email} created. "
            f"Opportunity {opp['id']} opened."
        ),
    })

    # 5. Create a follow-up task
    tomorrow = (date.today() + timedelta(days=1)).isoformat()
    execute("close_task_create", {
        "lead_id": lead_id,
        "text": f"Follow up with {contact_email}",
        "date": tomorrow,
    })

    # 6. Enroll in a sequence if one exists
    sequences = execute("close_sequences_list", {"_limit": 1})
    if sequences["data"]:
        sub = execute("close_sequence_subscription_create", {
            "contact_id": contact["id"],
            "sequence_id": sequences["data"][0]["id"],
        })
        print(f"Enrolled contact in sequence. Subscription: {sub['id']}")

    return {
        "lead_id": lead_id,
        "contact_id": contact["id"],
        "opportunity_id": opp["id"]
    }

result = enrich_and_enroll_lead("Acme Corp", "jane@acme.com")
print(result)
```

## Required scopes

Close OAuth apps automatically include both required scopes — no manual scope selection is needed.

| Scope | Required for |
|-------|-------------|
| `all.full_access` | All 81 tools (leads, contacts, opportunities, tasks, notes, calls, emails, SMS, pipelines, sequences, webhooks, users, custom fields) |
| `offline_access` | All tools — enables the refresh token so sessions persist beyond 1 hour |

## Tool list

Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first.

## Tool list

### `close_activities_list`

List all activity types for a lead in Close (calls, emails, notes, SMS, etc.).

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_order_by` (`string`, optional): Sort field. Default: date_created.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `_type` (`string`, optional): Activity type: Note, Call, Email, Sms, etc.
- `contact_id` (`string`, optional): Filter by contact ID.
- `lead_id` (`string`, optional): Filter by lead ID.
- `user_id` (`string`, optional): Filter by user ID.

### `close_call_create`

Log an external call activity on a lead in Close.

Parameters:

- `lead_id` (`string`, required): ID of the lead for this call.
- `status` (`string`, required): Call outcome: completed, no_answer, wrong_number, left_voicemail, etc.
- `contact_id` (`string`, optional): ID of the contact called.
- `direction` (`string`, optional): Call direction: inbound or outbound.
- `duration` (`integer`, optional): Call duration in seconds.
- `note` (`string`, optional): Notes about the call.
- `phone` (`string`, optional): Phone number called.
- `recording_url` (`string`, optional): HTTPS URL of the call recording.

### `close_call_delete`

Delete a call activity from Close.

Parameters:

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

### `close_call_get`

Retrieve a single call activity by ID.

Parameters:

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

### `close_call_update`

Update a call activity's note, status, or duration.

Parameters:

- `call_id` (`string`, required): ID of the call to update.
- `duration` (`integer`, optional): Updated call duration in seconds.
- `note` (`string`, optional): Updated call notes.
- `status` (`string`, optional): Updated call status.

### `close_calls_list`

List call activities in Close, optionally filtered by lead, contact, or user.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `contact_id` (`string`, optional): Filter by contact ID.
- `lead_id` (`string`, optional): Filter by lead ID.
- `user_id` (`string`, optional): Filter by user ID.

### `close_comment_create`

Post a comment on a Close object (lead, opportunity, etc.).

Parameters:

- `body` (`string`, required): Comment text body.
- `object_id` (`string`, required): ID of the object to comment on.

### `close_comment_delete`

Delete a comment from Close.

Parameters:

- `comment_id` (`string`, required): ID of the comment to delete.

### `close_comment_get`

Retrieve a single comment by ID.

Parameters:

- `comment_id` (`string`, required): ID of the comment.

### `close_comment_update`

Update the text of an existing comment.

Parameters:

- `comment` (`string`, required): Updated comment text.
- `comment_id` (`string`, required): ID of the comment to update.

### `close_comments_list`

List comments on an object. Provide either object_id or thread_id to filter results.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `object_id` (`string`, optional): ID of the object to fetch comments for.
- `thread_id` (`string`, optional): ID of the comment thread.

### `close_contact_create`

Create a new contact in Close and associate it with a lead.

Parameters:

- `lead_id` (`string`, required): ID of the lead to associate this contact with.
- `emails` (`string`, optional): JSON array of email objects, e.g. [{"email": "jane@acme.com", "type": "office"}].
- `name` (`string`, optional): Full name of the contact.
- `phones` (`string`, optional): JSON array of phone objects, e.g. [{"phone": "+1234567890", "type": "office"}].
- `title` (`string`, optional): Job title of the contact.

### `close_contact_delete`

Delete a contact from Close.

Parameters:

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

### `close_contact_get`

Retrieve a single contact by ID from Close.

Parameters:

- `contact_id` (`string`, required): ID of the contact.
- `_fields` (`string`, optional): Comma-separated list of fields to return.

### `close_contact_update`

Update a contact's name, title, phone numbers, or email addresses.

Parameters:

- `contact_id` (`string`, required): ID of the contact to update.
- `emails` (`string`, optional): JSON array of email objects.
- `name` (`string`, optional): New full name.
- `phones` (`string`, optional): JSON array of phone objects.
- `title` (`string`, optional): New job title.

### `close_contacts_list`

List contacts in Close, optionally filtered by lead.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `lead_id` (`string`, optional): Filter contacts by lead ID.

### `close_custom_field_contact_create`

Create a new custom field for contacts in Close.

Parameters:

- `name` (`string`, required): Name of the custom field.
- `type` (`string`, required): Field type: text, number, date, url, choices, etc.

### `close_custom_field_contact_delete`

Delete a contact custom field from Close.

Parameters:

- `custom_field_id` (`string`, required): ID of the custom field to delete.

### `close_custom_field_contact_get`

Retrieve a single contact custom field by ID.

Parameters:

- `custom_field_id` (`string`, required): ID of the custom field.

### `close_custom_field_contact_update`

Update a contact custom field's name or choices.

Parameters:

- `custom_field_id` (`string`, required): ID of the custom field to update.
- `name` (`string`, optional): New name for the custom field.

### `close_custom_field_lead_create`

Create a new custom field for leads in Close.

Parameters:

- `name` (`string`, required): Name of the custom field.
- `type` (`string`, required): Field type: text, number, date, url, choices, etc.

### `close_custom_field_lead_delete`

Delete a lead custom field from Close.

Parameters:

- `custom_field_id` (`string`, required): ID of the custom field to delete.

### `close_custom_field_lead_get`

Retrieve a single lead custom field by ID.

Parameters:

- `custom_field_id` (`string`, required): ID of the custom field.

### `close_custom_field_lead_update`

Update a lead custom field's name or choices.

Parameters:

- `custom_field_id` (`string`, required): ID of the custom field to update.
- `name` (`string`, optional): New name for the custom field.

### `close_custom_field_opportunity_create`

Create a new custom field for opportunitys in Close.

Parameters:

- `name` (`string`, required): Name of the custom field.
- `type` (`string`, required): Field type: text, number, date, url, choices, etc.

### `close_custom_field_opportunity_delete`

Delete a opportunity custom field from Close.

Parameters:

- `custom_field_id` (`string`, required): ID of the custom field to delete.

### `close_custom_field_opportunity_get`

Retrieve a single opportunity custom field by ID.

Parameters:

- `custom_field_id` (`string`, required): ID of the custom field.

### `close_custom_field_opportunity_update`

Update a opportunity custom field's name or choices.

Parameters:

- `custom_field_id` (`string`, required): ID of the custom field to update.
- `name` (`string`, optional): New name for the custom field.

### `close_custom_fields_contact_list`

List all custom fields defined for contacts in Close.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).

### `close_custom_fields_lead_list`

List all custom fields defined for leads in Close.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).

### `close_custom_fields_opportunity_list`

List all custom fields defined for opportunitys in Close.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).

### `close_email_create`

Log or send an email activity on a lead in Close.

Parameters:

- `lead_id` (`string`, required): ID of the lead for this email.
- `status` (`string`, required): Email status: inbox, draft, scheduled, outbox, sent.
- `body_html` (`string`, optional): HTML email body.
- `body_text` (`string`, optional): Plain text email body.
- `contact_id` (`string`, optional): ID of the contact this email is for.
- `sender` (`string`, optional): Sender email address.
- `subject` (`string`, optional): Email subject line.
- `to` (`string`, optional): JSON array of recipient emails, e.g. [{"email": "jane@acme.com"}].

### `close_email_delete`

Delete an email activity from Close.

Parameters:

- `email_id` (`string`, required): ID of the email to delete.

### `close_email_get`

Retrieve a single email activity by ID.

Parameters:

- `email_id` (`string`, required): ID of the email activity.

### `close_email_update`

Update an email activity's status, subject, or body.

Parameters:

- `email_id` (`string`, required): ID of the email to update.
- `body_html` (`string`, optional): New HTML body.
- `body_text` (`string`, optional): New plain text body.
- `status` (`string`, optional): New email status: draft, scheduled, outbox, sent.
- `subject` (`string`, optional): New subject line.

### `close_emails_list`

List email activities in Close, optionally filtered by lead or user.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `contact_id` (`string`, optional): Filter by contact ID.
- `lead_id` (`string`, optional): Filter by lead ID.
- `user_id` (`string`, optional): Filter by user ID.

### `close_lead_create`

Create a new lead in Close with name, contacts, addresses, and custom fields.

Parameters:

- `name` (`string`, required): Name of the lead / company.
- `description` (`string`, optional): Description or notes about the lead.
- `status_id` (`string`, optional): Lead status ID.
- `url` (`string`, optional): Website URL of the lead.

### `close_lead_delete`

Permanently delete a lead and all its associated data from Close.

Parameters:

- `lead_id` (`string`, required): ID of the lead to delete.

### `close_lead_get`

Retrieve a single lead by ID from Close.

Parameters:

- `lead_id` (`string`, required): ID of the lead to retrieve.
- `_fields` (`string`, optional): Comma-separated list of fields to return.

### `close_lead_merge`

Merge two leads into one. The source lead is merged into the destination lead.

Parameters:

- `destination` (`string`, required): ID of the lead to merge into (will be kept).
- `source` (`string`, required): ID of the lead to merge from (will be deleted).

### `close_lead_update`

Update an existing lead's name, status, description, or custom fields.

Parameters:

- `lead_id` (`string`, required): ID of the lead to update.
- `description` (`string`, optional): Updated description.
- `name` (`string`, optional): New name for the lead.
- `status_id` (`string`, optional): New lead status ID.
- `url` (`string`, optional): New website URL.

### `close_leads_list`

List and search leads in Close. Supports full-text search and sorting.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_order_by` (`string`, optional): Field to sort by. Prefix with - for descending.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `query` (`string`, optional): Full-text search query to filter leads.

### `close_me_get`

Retrieve information about the authenticated Close user.

### `close_note_create`

Create a note activity on a lead in Close.

Parameters:

- `lead_id` (`string`, required): ID of the lead to attach this note to.
- `note` (`string`, required): Note body text (plain text).
- `contact_id` (`string`, optional): ID of the contact this note relates to.

### `close_note_delete`

Delete a note activity from Close.

Parameters:

- `note_id` (`string`, required): ID of the note to delete.

### `close_note_get`

Retrieve a single note activity by ID.

Parameters:

- `note_id` (`string`, required): ID of the note activity.

### `close_note_update`

Update the body text of a note activity.

Parameters:

- `note` (`string`, required): Updated note body text.
- `note_id` (`string`, required): ID of the note to update.

### `close_notes_list`

List note activities in Close, optionally filtered by lead or user.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `contact_id` (`string`, optional): Filter by contact ID.
- `lead_id` (`string`, optional): Filter by lead ID.
- `user_id` (`string`, optional): Filter by user ID.

### `close_opportunities_list`

List opportunities in Close, with optional filters by lead, user, or status.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_order_by` (`string`, optional): Field to sort by. Prefix with - for descending.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `lead_id` (`string`, optional): Filter by lead ID.
- `status_id` (`string`, optional): Filter by opportunity status ID.
- `status_type` (`string`, optional): Filter by status type: active, won, or lost.
- `user_id` (`string`, optional): Filter by assigned user ID.

### `close_opportunity_create`

Create a new opportunity (deal) in Close and associate it with a lead.

Parameters:

- `lead_id` (`string`, required): ID of the lead for this opportunity.
- `status_id` (`string`, required): ID of the opportunity status.
- `confidence` (`integer`, optional): Win probability percentage (0-100).
- `date_won` (`string`, optional): Date won (YYYY-MM-DD), set when status is won.
- `expected_date` (`string`, optional): Expected close date (YYYY-MM-DD).
- `note` (`string`, optional): Note about this opportunity.
- `value` (`integer`, optional): Monetary value of the opportunity in cents.
- `value_currency` (`string`, optional): Currency code, e.g. USD.
- `value_period` (`string`, optional): Billing period: one_time, monthly, or annual.

### `close_opportunity_delete`

Delete an opportunity from Close.

Parameters:

- `opportunity_id` (`string`, required): ID of the opportunity to delete.

### `close_opportunity_get`

Retrieve a single opportunity by ID from Close.

Parameters:

- `opportunity_id` (`string`, required): ID of the opportunity.
- `_fields` (`string`, optional): Comma-separated list of fields to return.

### `close_opportunity_update`

Update an opportunity's status, value, note, or confidence.

Parameters:

- `opportunity_id` (`string`, required): ID of the opportunity to update.
- `confidence` (`integer`, optional): Win probability (0-100).
- `date_won` (`string`, optional): Date won (YYYY-MM-DD).
- `expected_date` (`string`, optional): Expected close date (YYYY-MM-DD).
- `note` (`string`, optional): Updated note.
- `status_id` (`string`, optional): New status ID.
- `value` (`integer`, optional): Updated monetary value in cents.
- `value_currency` (`string`, optional): Currency code, e.g. USD.
- `value_period` (`string`, optional): Billing period: one_time, monthly, or annual.

### `close_pipeline_create`

Create a new opportunity pipeline in Close.

Parameters:

- `name` (`string`, required): Name of the pipeline.

### `close_pipeline_delete`

Delete a pipeline from Close.

Parameters:

- `pipeline_id` (`string`, required): ID of the pipeline to delete.

### `close_pipeline_get`

Retrieve a single pipeline by ID.

Parameters:

- `pipeline_id` (`string`, required): ID of the pipeline.

### `close_pipeline_update`

Update an existing pipeline's name or statuses.

Parameters:

- `pipeline_id` (`string`, required): ID of the pipeline to update.
- `name` (`string`, optional): New pipeline name.

### `close_pipelines_list`

List all opportunity pipelines in the Close organization.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).

### `close_sequence_get`

Retrieve a single sequence by ID.

Parameters:

- `sequence_id` (`string`, required): ID of the sequence.

### `close_sequence_subscription_create`

Enroll a contact in a Close sequence.

Parameters:

- `contact_id` (`string`, required): ID of the contact to enroll.
- `sequence_id` (`string`, required): ID of the sequence to enroll in.
- `sender_account_id` (`string`, optional): ID of the sender email account.

### `close_sequence_subscription_get`

Retrieve a single sequence subscription by ID.

Parameters:

- `subscription_id` (`string`, required): ID of the subscription.

### `close_sequence_subscription_update`

Pause or resume a contact's sequence subscription.

Parameters:

- `subscription_id` (`string`, required): ID of the subscription to update.
- `pause` (`boolean`, optional): Set to true to pause the subscription, false to resume.

### `close_sequence_subscriptions_list`

List sequence subscriptions. Provide one of lead_id, contact_id, or sequence_id to filter results.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `contact_id` (`string`, optional): Filter by contact ID.
- `lead_id` (`string`, optional): Filter by lead ID.
- `sequence_id` (`string`, optional): Filter by sequence ID.

### `close_sequences_list`

List email/activity sequences in Close.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).

### `close_sms_create`

Log or send an SMS activity on a lead in Close.

Parameters:

- `lead_id` (`string`, required): ID of the lead for this SMS.
- `status` (`string`, required): SMS status: inbox, draft, scheduled, outbox, sent.
- `contact_id` (`string`, optional): ID of the contact for this SMS.
- `local_phone` (`string`, optional): Your local phone number to send from.
- `remote_phone` (`string`, optional): Recipient phone number.
- `text` (`string`, optional): Body text of the SMS message.

### `close_sms_delete`

Delete an SMS activity from Close.

Parameters:

- `sms_id` (`string`, required): ID of the SMS to delete.

### `close_sms_get`

Retrieve a single SMS activity by ID.

Parameters:

- `sms_id` (`string`, required): ID of the SMS activity.

### `close_sms_list`

List SMS activities in Close, optionally filtered by lead or user.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `contact_id` (`string`, optional): Filter by contact ID.
- `lead_id` (`string`, optional): Filter by lead ID.
- `user_id` (`string`, optional): Filter by user ID.

### `close_sms_update`

Update an SMS activity's text or status.

Parameters:

- `sms_id` (`string`, required): ID of the SMS to update.
- `status` (`string`, optional): New SMS status.
- `text` (`string`, optional): Updated message text.

### `close_task_create`

Create a new task in Close and assign it to a lead and user.

Parameters:

- `lead_id` (`string`, required): ID of the lead to associate this task with.
- `_type` (`string`, optional): Task type, default is lead.
- `assigned_to` (`string`, optional): User ID to assign the task to.
- `date` (`string`, optional): Task due date (YYYY-MM-DD or ISO 8601).
- `is_complete` (`boolean`, optional): Whether the task is already complete.
- `text` (`string`, optional): Task description / title.

### `close_task_delete`

Delete a task from Close.

Parameters:

- `task_id` (`string`, required): ID of the task to delete.

### `close_task_get`

Retrieve a single task by ID from Close.

Parameters:

- `task_id` (`string`, required): ID of the task.
- `_fields` (`string`, optional): Comma-separated list of fields to return.

### `close_task_update`

Update a task's text, assigned user, due date, or completion status.

Parameters:

- `task_id` (`string`, required): ID of the task to update.
- `assigned_to` (`string`, optional): New assigned user ID.
- `date` (`string`, optional): New due date (YYYY-MM-DD).
- `is_complete` (`boolean`, optional): Mark task as complete or incomplete.
- `text` (`string`, optional): New task description.

### `close_tasks_list`

List tasks in Close. Filter by lead, assigned user, type, or completion status.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_order_by` (`string`, optional): Sort field. Prefix with - for descending.
- `_skip` (`integer`, optional): Number of results to skip (offset).
- `_type` (`string`, optional): Task type: lead, incoming_email, email, automated_email, outgoing_call.
- `assigned_to` (`string`, optional): Filter by assigned user ID.
- `is_complete` (`boolean`, optional): Filter by completion: true or false.
- `lead_id` (`string`, optional): Filter by lead ID.
- `view` (`string`, optional): Predefined view: inbox, future, or archive.

### `close_user_get`

Retrieve a single user by ID from Close.

Parameters:

- `user_id` (`string`, required): ID of the user.
- `_fields` (`string`, optional): Comma-separated list of fields to return.

### `close_users_list`

List all users in the Close organization.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).

### `close_webhook_create`

Create a new webhook subscription to receive Close event notifications.

Parameters:

- `events` (`string`, required): JSON array of event objects to subscribe to, e.g. [{"object_type":"lead","action":"created"}].
- `url` (`string`, required): HTTPS endpoint URL to receive webhook events.
- `verify_ssl` (`boolean`, optional): Whether to verify SSL certificates.

### `close_webhook_delete`

Delete a webhook subscription from Close.

Parameters:

- `webhook_id` (`string`, required): ID of the webhook to delete.

### `close_webhook_get`

Retrieve a single webhook subscription by ID.

Parameters:

- `webhook_id` (`string`, required): ID of the webhook.

### `close_webhook_update`

Update a webhook subscription's URL or event subscriptions.

Parameters:

- `webhook_id` (`string`, required): ID of the webhook to update.
- `events` (`string`, optional): New JSON array of event objects.
- `url` (`string`, optional): New HTTPS endpoint URL.
- `verify_ssl` (`boolean`, optional): Whether to verify SSL certificates.

### `close_webhooks_list`

List all webhook subscriptions in Close.

Parameters:

- `_fields` (`string`, optional): Comma-separated list of fields to return.
- `_limit` (`integer`, optional): Maximum number of results to return.
- `_skip` (`integer`, optional): Number of results to skip (offset).


---

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