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

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

**Authentication:** API Key
**Categories:** Developer Tools
**Tools:** 20: 9 read, 7 write, 4 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=BASIN)

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

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

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

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

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

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Basin 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: 'basin_get_form',
  toolInput: {
    form_id: '<form_id>',
  },
  connector: 'basin',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="basin_get_form",
    tool_input={
        "form_id": "<form_id>",
    },
    connection_name="basin",
    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.

### `basin_get_form`

Get Form · Read-only

Get one form's settings by its ID.
Returns the form record: id, uuid, name, project_id and project_name, timezone, redirect_url, notification and autoreply settings, spam protection flags, retention_days, form_webhooks, and inbox, spam and trash counts.
Use basin_list_forms to find the ID. Use basin_list_submissions for the form's submissions.

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

Inputs:

- `form_id` (`string`, required): ID of the form to retrieve. Use the numeric id field returned by basin_list_forms. Example: 73320.

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

### `basin_get_mail_template`

Get Mail Template · Read-only

Get one email template by its ID.
Returns the mail template's id, name, project_id, body (the latest submitted HTML, or the approved HTML when nothing is pending), created_at, and updated_at.
Use basin_list_mail_templates to find the ID.

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

Inputs:

- `mail_template_id` (`integer`, required): ID of the mail template to retrieve. Use the id field returned by basin_list_mail_templates. Example: 512.

Example input: `{"mail_template_id":512}`

### `basin_get_project`

Get Project · Read-only

Get one project by its ID.
Returns the project's id, name, created_at, and updated_at.
Use basin_list_projects to find the ID.

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

Inputs:

- `project_id` (`string`, required): ID of the project to retrieve. Use the id field returned by basin_list_projects. Example: 1024.

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

### `basin_get_submission`

Get Submission · Read-only

Get one form submission by its ID.
Returns the submission: id, email, payload_params (the submitted field values), form_id, form name and uuid, spam, read and trash flags, spam_reason, ip, referrer, user_agent, attachments, webhook_sent_at, and timestamps.
Use basin_list_submissions to find the ID or to search across submissions.

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

Inputs:

- `submission_id` (`integer`, required): ID of the submission to retrieve. Use the id field returned by basin_list_submissions. Example: 61109858.

Example input: `{"submission_id":61109858}`

### `basin_list_domains`

List Domains · Read-only

List the custom email sending domains available to the account, one page at a time, optionally filtered by a search term.
Returns a page of domain records with pagination metadata.
Use this to find a domain_id for a form's custom sending domain (set through basin_update_form's additional_settings).

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

Inputs:

- `page` (`integer`, optional): Page number of domains to return, starting at 1. Omit for the first page. Check the response's pagination metadata to see whether more pages exist. Example: 2.
- `query` (`string`, optional): Search term that filters domains by id or name. Example: example.com.

Example input: `{}`

### `basin_list_forms`

List Forms · Read-only

List the forms the API key can access, one page at a time, optionally filtered by a search term.
Returns a page of form records with pagination metadata.
Use this to find a form's id. Use basin_get_form for one form's full settings.

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

Inputs:

- `page` (`integer`, optional): Page number of forms to return, starting at 1. Omit for the first page. Check the response's pagination metadata to see whether more pages exist. Example: 2.
- `query` (`string`, optional): Search term that filters forms by id, name, uuid, or project_id. Example: Contact.

Example input: `{}`

### `basin_list_mail_templates`

List Mail Templates · Read-only

List the email templates in a project, one page at a time.
Returns mail_templates (id, name, project_id, body, created_at, updated_at) and meta with count, page, and per_page.
Use this to find a template id for a form's notification or autoreply email. Use basin_get_mail_template for one template.

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

Inputs:

- `project_id` (`integer`, required): ID of the project the mail templates belong to. Use the id field returned by basin_list_projects. Example: 1024.
- `page` (`integer`, optional): Page number of mail templates to return, starting at 1. Omit for the first page. Check the response's pagination metadata to see whether more pages exist. Example: 2.
- `page_size` (`integer`, optional): Number of templates per page, up to 20. Example: 20.

Example input: `{"project_id":1024}`

### `basin_list_projects`

List Projects · Read-only

List the projects (groups of forms) the API key can access, one page at a time, optionally filtered by a search term.
Returns a page of project records with pagination metadata.
Use this to find a project's id for basin_create_form or basin_list_mail_templates. Use basin_get_project for one project.

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

Inputs:

- `page` (`integer`, optional): Page number of projects to return, starting at 1. Omit for the first page. Check the response's pagination metadata to see whether more pages exist. Example: 2.
- `query` (`string`, optional): Search term that filters projects by id or name. Example: Marketing site.

Example input: `{}`

### `basin_list_submissions`

List Submissions · Read-only

List form submissions, optionally for one form, filtered by status, search text, or date range, and sorted.
Returns a page of submissions, each with its id, submitted field values, spam, read and trash flags, and timestamps, with pagination metadata and inbox, spam and trash counts.
Use this to browse or search submissions. Use basin_get_submission for one submission's full detail.

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

Inputs:

- `date_range` (`string`, optional): Only return submissions in this date range, written as 'YYYY-MM-DD to YYYY-MM-DD' with spaces around 'to' (it is sent as YYYY-MM-DD+to+YYYY-MM-DD, the format Basin documents). Dates use the form's time zone, or the account's time zone when no form_id is given. Example: 2026-01-01 to 2026-01-31.
- `filter_by` (`string`, optional): Which submissions to return: new (the inbox), spam, trash, or all. Example: new. One of: `new`, `spam`, `trash`, `all`.
- `form_id` (`string`, optional): ID of the form whose submissions to list. Use the id from basin_list_forms; Basin's docs also describe it as the ID in the form's endpoint URL (https://usebasin.com/f/FORM_ID). Leave out with an Account API Key to list across all forms; a Form API Key always returns its own form's submissions and ignores this. Example: 73320.
- `order_by` (`string`, optional): Sort order: date_asc, date_desc, email_asc, or email_desc. Example: date_desc. One of: `date_asc`, `date_desc`, `email_asc`, `email_desc`.
- `page` (`integer`, optional): Page number of submissions to return, starting at 1. Omit for the first page. Check the response's pagination metadata to see whether more pages exist. Example: 2.
- `query` (`string`, optional): Text to search for in submissions, such as a name or email address. Example: jane@example.com.

Example input: `{}`

### `basin_create_form`

Create Form · Write

Create a new form in a Basin project, with optional notification, autoreply, and spam protection settings.
Returns the form record: id, uuid, name, project_id and project_name, timezone, redirect_url, notification and autoreply settings, spam protection flags, retention_days, form_webhooks, and inbox, spam and trash counts. The uuid is the form's endpoint ID (https://usebasin.com/f/<uuid>).
Use basin_update_form to change an existing form. Form Studio fields cannot be added through the API; build them in the Basin dashboard.

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

Inputs:

- `name` (`string`, required): Name of the form as shown in the Basin dashboard. Example: Contact form.
- `additional_settings` (`object`, optional): Any other form attribute from Basin's API reference, as a JSON object merged into the form. Use it for settings that have no input above, such as redirect page text and colors (redirect_heading, redirect_message, button_background_color), mail templates (notification_mail_template_id, auto_response_mail_template_id), a custom sending domain (domain_id, domain_email), or use_ajax. Inputs above win over the same key here. Example: {"redirect_heading": "Thanks!", "button_background_color": "#24292E"}.
- `allowed_domains` (`array`, optional): List of website domains allowed to submit to this form. Sending a list replaces the current one. Example: ["example.com", "www.example.com"].
- `autoreply` (`boolean`, optional): Set true to send an automatic reply email to the person who submitted the form, false to turn it off. Example: true.
- `autoreply_body` (`string`, optional): Body text of the automatic reply sent to the submitter. Example: We received your message and will reply within one business day.
- `autoreply_from_name` (`string`, optional): Sender name shown on the automatic reply. Example: Acme Support.
- `autoreply_subject` (`string`, optional): Subject line of the automatic reply sent to the submitter. Example: Thanks for contacting us.
- `blocked_domains` (`array`, optional): List of domains whose submissions are blocked. Sending a list replaces the current one. Example: ["spam-domain.test"].
- `content_blacklist` (`array`, optional): List of words or phrases that mark a submission as spam when they appear in it. Sending a list replaces the current one. Example: ["casino", "crypto giveaway"].
- `duplicate_filter` (`boolean`, optional): Set true to filter out duplicate submissions, false to accept them. Example: true.
- `force_hcaptcha` (`boolean`, optional): Set true to require hCaptcha on submissions to this form. Example: false.
- `force_recaptcha` (`boolean`, optional): Set true to require Google reCAPTCHA on submissions to this form. Example: false.
- `honeypot_field` (`string`, optional): Name of a hidden honeypot input in your HTML form. Submissions that fill it in are treated as spam. Example: _gotcha.
- `notification_bcc_emails` (`string`, optional): Comma-separated list of 'bcc' recipients for notification emails. Sending a list replaces the current bcc recipients; leave out to keep them. New addresses must be verified. Example: archive@example.com.
- `notification_cc_emails` (`string`, optional): Comma-separated list of 'cc' recipients for notification emails. Sending a list replaces the current cc recipients; leave out to keep them. New addresses must be verified. Example: manager@example.com.
- `notification_emails` (`string`, optional): Comma-separated list of 'to' recipients for new-submission notification emails. Sending a list replaces the current recipients; leave out to keep them. Newly added addresses must be verified before they receive notifications. To remove all recipients, send {"notification_emails": ""} in additional_settings. Example: sales@example.com,ops@example.com.
- `notification_from_name` (`string`, optional): Sender name shown on notification emails. Example: Website Forms.
- `notification_subject` (`string`, optional): Subject line of the notification email sent for each new submission. Example: New website lead.
- `project_id` (`integer`, optional): ID of the project the form belongs to. Use the id field returned by basin_list_projects. Example: 1024.
- `redirect_url` (`string`, optional): URL Basin redirects the visitor to after a successful submission. Example: https://example.com/thanks.
- `retention_days` (`integer`, optional): Number of days Basin keeps submissions for this form before deleting them. Example: 90.
- `smtp_email_validation` (`boolean`, optional): Set true to check submitted email addresses against their mail server before accepting the submission. Example: true.
- `timezone` (`string`, optional): Time zone used for the form's dates and date-range filters, as Basin stores it (for example the zone name shown in the form settings). Example: Eastern Time (US & Canada).

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

### `basin_create_mail_template`

Create Mail Template · Write

Create an HTML email template in a project, for use as a form's notification or autoreply email.
Returns the mail template's id, name, project_id, body (the latest submitted HTML, or the approved HTML when nothing is pending), created_at, and updated_at.
Use basin_update_mail_template to change an existing template.

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

Inputs:

- `name` (`string`, required): Name of the mail template, up to 100 characters. Example: Lead notification.
- `project_id` (`integer`, required): ID of the project the mail templates belong to. Use the id field returned by basin_list_projects. Example: 1024.
- `body` (`string`, optional): Raw HTML of the email, up to 262144 bytes. A blank body is accepted. Basin sanitizes the HTML when the email is sent. Example: New submission received
.

Example input: `{"name":"<name>","project_id":1024}`

### `basin_create_project`

Create Project · Write

Create a new project to group forms.
Returns the project's id, name, created_at, and updated_at.
Use basin_create_form with the returned id to add forms to it.

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

Inputs:

- `name` (`string`, required): Name of the new project. Example: Marketing site.

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

### `basin_update_form`

Update Form · Write

Change settings on an existing form; only the fields you provide are changed.
Returns the form record: id, uuid, name, project_id and project_name, timezone, redirect_url, notification and autoreply settings, spam protection flags, retention_days, form_webhooks, and inbox, spam and trash counts.
Use basin_get_form first to read the current settings. Use basin_create_form for a new form.

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

Inputs:

- `form_id` (`string`, required): ID of the form to update. Use the numeric id field returned by basin_list_forms. Example: 73320.
- `additional_settings` (`object`, optional): Any other form attribute from Basin's API reference, as a JSON object merged into the form. Use it for settings that have no input above, such as redirect page text and colors (redirect_heading, redirect_message, button_background_color), mail templates (notification_mail_template_id, auto_response_mail_template_id), a custom sending domain (domain_id, domain_email), or use_ajax. Inputs above win over the same key here. Example: {"redirect_heading": "Thanks!", "button_background_color": "#24292E"}.
- `allowed_domains` (`array`, optional): List of website domains allowed to submit to this form. Sending a list replaces the current one. Example: ["example.com", "www.example.com"].
- `autoreply` (`boolean`, optional): Set true to send an automatic reply email to the person who submitted the form, false to turn it off. Example: true.
- `autoreply_body` (`string`, optional): Body text of the automatic reply sent to the submitter. Example: We received your message and will reply within one business day.
- `autoreply_from_name` (`string`, optional): Sender name shown on the automatic reply. Example: Acme Support.
- `autoreply_subject` (`string`, optional): Subject line of the automatic reply sent to the submitter. Example: Thanks for contacting us.
- `blocked_domains` (`array`, optional): List of domains whose submissions are blocked. Sending a list replaces the current one. Example: ["spam-domain.test"].
- `content_blacklist` (`array`, optional): List of words or phrases that mark a submission as spam when they appear in it. Sending a list replaces the current one. Example: ["casino", "crypto giveaway"].
- `duplicate_filter` (`boolean`, optional): Set true to filter out duplicate submissions, false to accept them. Example: true.
- `force_hcaptcha` (`boolean`, optional): Set true to require hCaptcha on submissions to this form. Example: false.
- `force_recaptcha` (`boolean`, optional): Set true to require Google reCAPTCHA on submissions to this form. Example: false.
- `honeypot_field` (`string`, optional): Name of a hidden honeypot input in your HTML form. Submissions that fill it in are treated as spam. Example: _gotcha.
- `name` (`string`, optional): Name of the form as shown in the Basin dashboard. Example: Contact form. Leave out to keep the current name.
- `notification_bcc_emails` (`string`, optional): Comma-separated list of 'bcc' recipients for notification emails. Sending a list replaces the current bcc recipients; leave out to keep them. New addresses must be verified. Example: archive@example.com.
- `notification_cc_emails` (`string`, optional): Comma-separated list of 'cc' recipients for notification emails. Sending a list replaces the current cc recipients; leave out to keep them. New addresses must be verified. Example: manager@example.com.
- `notification_emails` (`string`, optional): Comma-separated list of 'to' recipients for new-submission notification emails. Sending a list replaces the current recipients; leave out to keep them. Newly added addresses must be verified before they receive notifications. To remove all recipients, send {"notification_emails": ""} in additional_settings. Example: sales@example.com,ops@example.com.
- `notification_from_name` (`string`, optional): Sender name shown on notification emails. Example: Website Forms.
- `notification_subject` (`string`, optional): Subject line of the notification email sent for each new submission. Example: New website lead.
- `project_id` (`integer`, optional): ID of the project the form belongs to. Use the id field returned by basin_list_projects. Example: 1024. Leave out to keep the current project.
- `redirect_url` (`string`, optional): URL Basin redirects the visitor to after a successful submission. Example: https://example.com/thanks.
- `retention_days` (`integer`, optional): Number of days Basin keeps submissions for this form before deleting them. Example: 90.
- `smtp_email_validation` (`boolean`, optional): Set true to check submitted email addresses against their mail server before accepting the submission. Example: true.
- `timezone` (`string`, optional): Time zone used for the form's dates and date-range filters, as Basin stores it (for example the zone name shown in the form settings). Example: Eastern Time (US & Canada).

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

### `basin_update_mail_template`

Update Mail Template · Write

Change the name or HTML of an existing email template; only the fields you provide are changed.
Returns the mail template's id, name, project_id, body (the latest submitted HTML, or the approved HTML when nothing is pending), created_at, and updated_at.
Use basin_get_mail_template to read the current HTML first.

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

Inputs:

- `mail_template_id` (`integer`, required): ID of the mail template to update. Use the id field returned by basin_list_mail_templates. Example: 512.
- `body` (`string`, optional): Raw HTML of the email, up to 262144 bytes. A blank body is accepted. Basin sanitizes the HTML when the email is sent. Example: New submission received
.
- `name` (`string`, optional): Name of the mail template, up to 100 characters. Example: Lead notification. Leave out to keep the current name.

Example input: `{"mail_template_id":512}`

### `basin_update_project`

Update Project · Write

Rename an existing project.
Returns the project's id, name, created_at, and updated_at.
Use basin_list_projects to find the ID.

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

Inputs:

- `name` (`string`, required): New name for the project. Example: Marketing site (2026).
- `project_id` (`string`, required): ID of the project to rename. Use the id field returned by basin_list_projects. Example: 1024.

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

### `basin_update_submission`

Update Submission · Write

Mark a submission as read or unread, spam or not spam, or move it into or out of the trash.
Returns the submission: id, email, payload_params (the submitted field values), form_id, form name and uuid, spam, read and trash flags, spam_reason, ip, referrer, user_agent, attachments, webhook_sent_at, and timestamps.
Use this to triage submissions. Use basin_delete_submission to remove one permanently. Provide at least one of read, spam, or trash.

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

Inputs:

- `submission_id` (`integer`, required): ID of the submission to update. Use the id field returned by basin_list_submissions. Example: 61109858.
- `read` (`boolean`, optional): Set true to mark the submission as read, false for unread. Example: true.
- `spam` (`boolean`, optional): Set true to mark the submission as spam, false to mark it as not spam. Example: false.
- `trash` (`boolean`, optional): Set true to move the submission to the trash, false to restore it. Example: false.

Example input: `{"submission_id":61109858}`

### `basin_delete_form`

Delete Form · Destructive

Permanently delete a form by its ID.
Returns the deleted form record.
Use basin_update_form to change a form instead of removing it.

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

Inputs:

- `form_id` (`string`, required): ID of the form to delete. Use the numeric id field returned by basin_list_forms. Example: 73320.

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

### `basin_delete_mail_template`

Delete Mail Template · Destructive

Permanently delete an email template by its ID.
Returns an empty response (HTTP 204) on success.
Use basin_list_mail_templates to find the ID.

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

Inputs:

- `mail_template_id` (`integer`, required): ID of the mail template to delete. Use the id field returned by basin_list_mail_templates. Example: 512.

Example input: `{"mail_template_id":512}`

### `basin_delete_project`

Delete Project · Destructive

Permanently delete a project by its ID.
Returns the deleted project's id, name, created_at, and updated_at.
Use basin_update_project to rename a project instead.

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

Inputs:

- `project_id` (`string`, required): ID of the project to delete. Use the id field returned by basin_list_projects. Example: 1024.

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

### `basin_delete_submission`

Delete Submission · Destructive

Permanently delete a form submission by its ID.
Returns Basin's confirmation of the deletion.
Use basin_update_submission with trash set to true to move it to the trash instead.

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

Inputs:

- `submission_id` (`integer`, required): ID of the submission to delete. Use the id field returned by basin_list_submissions. Example: 61109858.

Example input: `{"submission_id":61109858}`

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