Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,577 changes: 2,576 additions & 1 deletion public/data/agent-tools-index.json

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components'

Register your Amplitude API Key and Secret Key with Scalekit so it can authenticate and proxy requests on behalf of your users. Amplitude uses HTTP Basic Auth — the API Key is the username and the Secret Key is the password. There is no redirect URI or OAuth flow.

<Steps>
1. ### Find your Amplitude data residency region

Amplitude runs two separate data residency regions with different credentials and API hosts. Before generating keys, confirm which region your project (or organization) lives in:

| Region | API host |
|--------|----------|
| US (default) | `amplitude.com` |
| EU | `analytics.eu.amplitude.com` |

<Aside type="caution" title="Region must match your keys">
An API Key and Secret Key generated in one region will not authenticate against the other. Using the wrong region in Scalekit causes every request to fail.
</Aside>

2. ### Get your API Key

- Sign in to Amplitude and go to **Settings** → **Agent Connectors** (or **API and Secret Keys**) → **API Keys**.
- Click **Generate API Key**, or copy an existing key's value.

![Amplitude API and Secret Keys page showing the API Keys tab with a generated key](@/assets/docs/agent-connectors/amplitudeanalytics/api-keys.png)

3. ### Get your Secret Key

- Click the **Secret Keys** tab.
- Click **Show** next to the secret key that matches the API key you copied in step 2, and copy it.

![Amplitude API and Secret Keys page showing the Secret Keys tab with a hidden secret key](@/assets/docs/agent-connectors/amplitudeanalytics/secret-keys.png)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

file='src/components/templates/agent-connectors/_setup-amplitudeanalytics.mdx'
wc -l "$file"
sed -n '1,120p' "$file" | cat -n

Repository: scalekit-inc/developer-docs

Length of output: 5998


🌐 Web query:

Amplitude Secret Keys cannot be revealed again API keys docs

💡 Result:

Yes, that is correct. According to Amplitude documentation, when you generate a secret key, Amplitude displays it only once [1]. Once you navigate away or close the dialog, it cannot be revealed again [1]. If you lose or forget a secret key, you cannot retrieve the original value [1]. Because secret keys are sensitive credentials used for server-side API authentication, Amplitude recommends that you delete the compromised or forgotten key and generate a new one [2]. For project management: - You can manage keys via the project settings (Settings > Projects) [1][3]. - Managers and Admins have the authority to generate and revoke these keys [4][1]. - While API keys are generally used for event ingestion and may be visible to authorized users, secret keys must be kept private and handled securely in server-side environments [2][5]. If a key is lost, the standard procedure is to generate a replacement and update your server-side configurations [2].

Citations:


Fix the Amplitude secret-key step

Amplitude only shows a Secret Key when it’s generated; it can’t be revealed later. Replace the Show instruction with “generate a new Secret Key and copy it immediately,” and update the settings path to match Amplitude’s key-management UI.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/templates/agent-connectors/_setup-amplitudeanalytics.mdx`
around lines 21 - 31, Update the “Get your Secret Key” step to instruct users to
generate a new Secret Key and copy it immediately, rather than clicking “Show”
for an existing key. Also revise the Amplitude settings navigation in the
API-key step to match the current key-management UI, while keeping the
surrounding screenshots and sequence intact.


<Aside type="note" title="Project vs. organization credentials">
Most tools need **project-level** API Key and Secret Key. DSAR (data subject access request) tools need a separate connected account using **organization-level** credentials in the same fields. Use two different connected accounts if you need both.
</Aside>

4. ### Create a connection in Scalekit

- In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** → **Connections** → **Create Connection**.
- Search for **Amplitude Analytics** and click **Create**.
- Note the **Connection name** — use this as `connection_name` in your code (e.g., `amplitudeanalytics`).

5. ### Add a connected account

Connected accounts link a specific user identifier in your system to an Amplitude API Key, Secret Key, and region. Add them via the dashboard for testing, or via the Scalekit API in production.

**Via dashboard (for testing)**

- Open the connection and click the **Connected Accounts** tab → **Add account**.
- Fill in **Your User's ID**, **API Key**, **Secret Key**, and select the **Data Residency Region** that matches your keys.
- Click **Save**.

**Via API (for production)**

<Tabs syncKey="tech-stack">
<TabItem label="Node.js">
```ts
// US region (default) — omit `domain` or set it to 'amplitude.com'
await scalekit.connect.upsertConnectedAccount({
connectionName: 'amplitudeanalytics',
identifier: 'user@example.com',
credentials: {
username: 'your-amplitude-api-key',
password: 'your-amplitude-secret-key',
domain: 'amplitude.com',
},
})

// EU region
await scalekit.connect.upsertConnectedAccount({
connectionName: 'amplitudeanalytics',
identifier: 'eu-user@example.com',
credentials: {
username: 'your-eu-amplitude-api-key',
password: 'your-eu-amplitude-secret-key',
domain: 'analytics.eu.amplitude.com',
},
})
```
</TabItem>
<TabItem label="Python">
```python
# US region (default) — omit domain or set it to "amplitude.com"
scalekit_client.connect.upsert_connected_account(
connection_name="amplitudeanalytics",
identifier="user@example.com",
credentials={
"username": "your-amplitude-api-key",
"password": "your-amplitude-secret-key",
"domain": "amplitude.com",
},
)

# EU region
scalekit_client.connect.upsert_connected_account(
connection_name="amplitudeanalytics",
identifier="eu-user@example.com",
credentials={
"username": "your-eu-amplitude-api-key",
"password": "your-eu-amplitude-secret-key",
"domain": "analytics.eu.amplitude.com",
},
)
```
</TabItem>
</Tabs>

<Aside type="tip" title="Running both regions side by side">
If your organization has projects in both the US and EU, create a separate connected account per user (or per project) with the matching `domain` value. Scalekit routes each account's requests to the correct regional host automatically — you don't need separate connections.
</Aside>

</Steps>
16 changes: 16 additions & 0 deletions src/components/templates/agent-connectors/_setup-discord.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,20 @@ Register your Scalekit environment with the Discord connector so Scalekit handle
<Aside type="tip" title="Request only the scopes you need">
Discord displays a consent screen listing every requested scope. Requesting unnecessary scopes reduces user trust and may cause authorization to be denied.
</Aside>

5. ### Configure the bot scope (optional)

If your agent needs to act as a bot in a server — sending messages, managing channels, or reacting to events — include the `bot` scope when you request authorization. Discord then asks the installing user to also grant a set of **bot permissions**.

- In the Scalekit connection settings, set:
- **Bot Permissions** — a bitfield describing what your bot can do in the server. Use the [permissions calculator](https://discord.com/developers/applications) on your application's **Bot** page to generate this value, or use the recommended default `2260657982483703` for common read/write access.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

sed -n '1,140p' src/components/templates/agent-connectors/_setup-discord.mdx

Repository: scalekit-inc/developer-docs

Length of output: 4732


🌐 Web query:

Discord bot permissions bitfield 2260657982483703 invite kick ban permissions recommended default

💡 Result:

The Discord permission bitfield 2260657982483703 is an integer that encodes a specific set of permissions for a bot or user [1][2][3]. Discord permissions are stored as a 64-bit integer where each bit represents a unique privilege [4][3][5]. To determine exactly which permissions are enabled for this specific bitfield, you can use a Discord permission calculator or a programming environment (such as JavaScript or Python) to perform a bitwise AND operation against the defined permission flags [6][7][5][8]. To check if a specific permission is included in 2260657982483703, you can use the following logic in many programming languages [6]: const bitfield = 2260657982483703n; const KICK_MEMBERS = 1n << 1n; // 2 const BAN_MEMBERS = 1n << 2n; // 4 const CREATE_INVITE = 1n << 0n; // 1 // Check for a permission const hasKick = (bitfield & KICK_MEMBERS) === KICK_MEMBERS; For practical purposes, you can copy the number 2260657982483703 and paste it into various community-provided Discord permission calculators (such as those found at discordapi.com, gatecord.com, or xgamingserver.com) to see a human-readable list of all checked permissions [7][3][5]. These tools automatically decode the bitfield by identifying which bits are set to 1 [5][9][8]. Regarding recommended default permissions: Discord does not have a single fixed set of recommended default permissions; you should only request the permissions your bot specifically requires to function [5][8]. For example, if your bot only needs to respond to slash commands, it may only need the Use Application Commands permission [4][5]. Requesting unnecessary permissions, especially sensitive ones like Administrator, Kick Members, or Ban Members, is generally discouraged for bot security and user trust [5][10]. Always review the official Discord API documentation for the specific requirements of your bot's features [6][1].

Citations:


🏁 Script executed:

python3 - <<'PY'
value = 2260657982483703
for bit, name in [(0,'CREATE_INSTANT_INVITE'), (1,'KICK_MEMBERS'), (2,'BAN_MEMBERS')]:
    print(name, bool(value & (1 << bit)))
print("low bits", bin(value & 0b111))
PY

Repository: scalekit-inc/developer-docs

Length of output: 242


🌐 Web query:

site:docs.discord.com developers topics permissions Discord bot permissions calculator bot page permissions

💡 Result:

Discord bot permissions determine what actions an application can perform within a server or channel [1][2]. These permissions are managed via a bitfield system and are essential for controlling bot functionality and security [1][3]. Core Concepts: Permissions Bitfield: Discord stores permissions as a variable-length integer [3]. Each permission corresponds to a specific bit in this integer [3]. To determine the total permissions value, you use bitwise OR (|) operations on the individual flag values [3]. To check if a bot has a specific permission, you use a bitwise AND (&) operation [3]. Guild-level vs. Channel-level: Permissions can be configured at the guild (server) level, which applies generally, or overridden at the channel level for specific roles or members [3][2]. OAuth2 and Authorization: When adding a bot to a server, you use an OAuth2 URL that includes the bot scope and a permissions integer [1][4]. This integer dictates the permissions the bot requests from the server administrator [1][5]. Managing Permissions: Developer Portal: When configuring your application in the Discord Developer Portal, you can select the required permissions under the Bot tab [6][5]. This ensures the correct permissions bitfield is included when users invite your bot [4]. Permission Overwrites: These allow you to adjust access on a per-channel basis [3][2]. For example, you might grant a bot the ability to send messages server-wide, but deny it that permission in a specific private channel [2]. Application Command Permissions: Distinct from standard bot permissions, these allow you to enable or disable specific slash commands for particular roles, users, or channels [3][7]. Best Practices: Request Minimal Permissions: Always follow the principle of least privilege [1]. Only request the permissions your bot absolutely needs to function [1]. Requesting excessive permissions can reduce user trust and may violate developer policies [1]. Use Big Integer Libraries: Because permissions are stored as large, variable-length integers, it is recommended to use your programming language's built-in Big Integer libraries for handling these values to ensure stability [3]. You can find the complete, up-to-date reference table of all permission flags, their hexadecimal integer values, and usage requirements in the official Discord documentation [3].

Citations:


Remove the default bot-permissions bitfield

2260657982483703 includes invite, kick, and ban permissions, so it is not a safe generic read/write preset. Use the minimum bitfield the bot needs, and link to the Discord permissions UI instead of the generic applications page.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/templates/agent-connectors/_setup-discord.mdx` at line 68,
Update the Bot Permissions guidance in the Discord setup template to remove the
unsafe default bitfield 2260657982483703. Instruct users to select only the
minimum permissions required by the bot, and replace the generic applications
link with the Discord permissions UI link.

Source: MCP tools

- **Pre-selected Guild ID** — optional. Pre-fills Discord's server picker with a specific server ID during authorization.
- **Disable Guild Select** — optional. When enabled with a **Pre-selected Guild ID**, the user cannot pick a different server.
- **Installation Context** — optional. Controls whether `applications.commands` installs to a server or to the authorizing user's account.

![Discord Bot Permissions page showing General, Text, and Voice permission checkboxes](@/assets/docs/agent-connectors/discord/bot-permissions.png)

<Aside type="note" title="Leave Bot Permissions blank carefully">
An empty **Bot Permissions** value grants the bot zero permissions in Scalekit's authorization request — it does not fall back to whatever defaults you configured in the Discord Developer Portal. Set an explicit value if your bot needs any permissions at all.
</Aside>
</Steps>
70 changes: 70 additions & 0 deletions src/components/templates/agent-connectors/_setup-discordbot.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components'

Register your Discord bot token with Scalekit so it can authenticate and proxy requests on behalf of your users. Discord Bot uses Bearer Token authentication — there is no redirect URI or OAuth flow.

<Steps>
1. ### Create a Discord application and bot user

- Go to the [Discord Developer Portal](https://discord.com/developers/applications) and sign in with your Discord account.
- Click **New Application**, enter a name (for example, `Agent Auth`), accept the terms, and click **Create**.
- Open your application and go to **Bot** in the left sidebar.

2. ### Get your bot token

- On the **Bot** page, under **Token**, click **Reset Token** to generate a new bot token and copy it immediately — Discord shows the full token only once.

![Discord application Bot page showing the Username, Token, and Authorization Flow settings](@/assets/docs/agent-connectors/discordbot/bot-tab.png)

<Aside type="caution" title="Keep your bot token secret">
Anyone with your bot token can control your bot completely. If you suspect it has leaked, click **Reset Token** immediately to invalidate the old one.
</Aside>

3. ### Invite the bot to a server

- Go to **OAuth2** > **URL Generator** in the left sidebar.
- Under **Scopes**, select **bot**.
- Under **Bot Permissions**, select the permissions your agent needs.

![Discord Bot Permissions page showing General, Text, and Voice permission checkboxes](@/assets/docs/agent-connectors/discord/bot-permissions.png)

- Copy the generated URL at the bottom of the page, open it in a browser, and select a server to add the bot to.

4. ### Create a connection in Scalekit

- In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** → **Connections** → **Create Connection**.
- Search for **Discord Bot** and click **Create**.
- Note the **Connection name** — use this as `connection_name` in your code (e.g., `discordbot`).

5. ### Add a connected account

Connected accounts link a specific user identifier in your system to a Discord bot token. Add them via the dashboard for testing, or via the Scalekit API in production.

**Via dashboard (for testing)**

- Open the connection and click the **Connected Accounts** tab → **Add account**.
- Fill in **Your User's ID** and **Bot Token**, then click **Save**.

**Via API (for production)**

<Tabs syncKey="tech-stack">
<TabItem label="Node.js">
```ts
await scalekit.connect.upsertConnectedAccount({
connectionName: 'discordbot',
identifier: 'user@example.com',
credentials: { apiKey: 'your-discord-bot-token' },
})
```
</TabItem>
<TabItem label="Python">
```python
scalekit_client.connect.upsert_connected_account(
connection_name="discordbot",
identifier="user@example.com",
credentials={"api_key": "your-discord-bot-token"},
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Add inline secret-handling guidance.

These examples pass a bot token without an inline warning to keep it out of source control and logs. Add language-appropriate security comments and show the value coming from secure storage.

As per path instructions, security-sensitive code examples must include inline comments explaining the mitigated threat.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/templates/agent-connectors/_setup-discordbot.mdx` around lines
51 - 65, Add inline security guidance to both TypeScript and Python
upsert_connected_account examples: read the Discord bot token from secure
storage or an environment variable instead of hardcoding it, and include
language-appropriate comments warning against committing the secret to source
control or exposing it in logs.

Source: Path instructions


🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

sed -n '1,140p' src/components/templates/agent-connectors/_setup-discordbot.mdx | cat -n

Repository: scalekit-inc/developer-docs

Length of output: 3715


🏁 Script executed:

python3 - <<'PY'
from pathlib import Path
p = Path('src/components/templates/agent-connectors/_setup-discordbot.mdx')
for i, line in enumerate(p.read_text().splitlines(), 1):
    if 1 <= i <= 140:
        print(f"{i:4}: {line}")
PY

Repository: scalekit-inc/developer-docs

Length of output: 3645


🏁 Script executed:

ls -la src/components/templates/agent-connectors && echo '---' && sed -n '1,120p' src/components/templates/agent-connectors/_setup-discordbot.mdx | nl -ba | sed -n '1,120p'

Repository: scalekit-inc/developer-docs

Length of output: 21302


🏁 Script executed:

python3 - <<'PY'
from pathlib import Path
import re

root = Path('src/components/templates/agent-connectors')
patterns = [
    ('upsertConnectedAccount', re.compile(r'upsertConnectedAccount|upsert_connected_account')),
    ('import', re.compile(r'^\s*import\s+', re.M)),
    ('constructor', re.compile(r'new\s+Scalekit|Scalekit\(')),
]

for path in sorted(root.glob('_setup-*.mdx')):
    text = path.read_text()
    if patterns[0][1].search(text):
        print(f'FILE: {path}')
        for name, pat in patterns:
            print(f'  {name}:', bool(pat.search(text)))
        print('  --- snippets ---')
        for m in re.finditer(r'```(?:ts|js|python|go|java)\n(.*?)```', text, re.S):
            snippet = m.group(1).strip().splitlines()[:8]
            print('   ', ' / '.join(snippet))
        print()
PY

Repository: scalekit-inc/developer-docs

Length of output: 13611


🏁 Script executed:

python3 - <<'PY'
from pathlib import Path
import re

root = Path('src/components/templates/agent-connectors')
for path in sorted(root.glob('_setup-*.mdx')):
    text = path.read_text()
    if 'upsertConnectedAccount' in text or 'upsert_connected_account' in text:
        print(f'FILE: {path}')
        for label, needle in [
            ('has import', 'import '),
            ('has scalekit client init', 'new Scalekit'),
            ('has scalekit_client init', 'scalekit_client ='),
            ('has upsertConnectedAccount', 'upsertConnectedAccount'),
            ('has upsert_connected_account', 'upsert_connected_account'),
        ]:
            print(f'  {label}: {needle in text}')
        print()
PY

Repository: scalekit-inc/developer-docs

Length of output: 6788


Make these SDK snippets runnable. scalekit and scalekit_client appear without the import and client setup needed to call upsertConnectedAccount, so copying either block fails before the connected account is created. Add the initialization or mark them as excerpts.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/templates/agent-connectors/_setup-discordbot.mdx` around lines
51 - 65, Add the required SDK imports and client initialization to the
TypeScript and Python snippets before their upsertConnectedAccount calls, using
the existing Scalekit setup conventions. Ensure both complete examples are
directly runnable, or explicitly label them as excerpts if setup cannot be
included.

Source: Path instructions

```
</TabItem>
</Tabs>

</Steps>
2 changes: 2 additions & 0 deletions src/components/templates/agent-connectors/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ export { default as SetupAdobemarketingagentmcpSection } from './_setup-adobemar
export { default as SetupAdvancedmdSection } from './_setup-advancedmd.mdx'
export { default as SetupAdzvisermcpSection } from './_setup-adzvisermcp.mdx'
export { default as SetupAiropsmcpSection } from './_setup-airopsmcp.mdx'
export { default as SetupAmplitudeanalyticsSection } from './_setup-amplitudeanalytics.mdx'
export { default as SetupAirtableSection } from './_setup-airtable.mdx'
export { default as SetupApifymcpSection } from './_setup-apifymcp.mdx'
export { default as SetupApolloSection } from './_setup-apollo.mdx'
Expand Down Expand Up @@ -35,6 +36,7 @@ export { default as SetupDevinmcpSection } from './_setup-devinmcp.mdx'
export { default as SetupDevrevmcpSection } from './_setup-devrevmcp.mdx'
export { default as SetupDiarizeSection } from './_setup-diarize.mdx'
export { default as SetupDiscordSection } from './_setup-discord.mdx'
export { default as SetupDiscordbotSection } from './_setup-discordbot.mdx'
export { default as SetupDropboxSection } from './_setup-dropbox.mdx'
export { default as SetupDropboxmcpSection } from './_setup-dropboxmcp.mdx'
export { default as SetupExaSection } from './_setup-exa.mdx'
Expand Down
72 changes: 72 additions & 0 deletions src/content/docs/agentkit/connectors/amplitudeanalytics.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
title: 'Amplitude Analytics connector'
tableOfContents: true
description: 'Connect to Amplitude''s analytics REST APIs: event segmentation, funnels, cohorts, taxonomy, chart annotations, session replay, export, releases, streaming...'
sidebar:
label: 'Amplitude Analytics'
overviewTitle: 'Quickstart'
connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/amplitude.svg
connectorAuthType: API Key + Secret Key
connectorCategories: [Analytics]
head:
- tag: style
content: |
.sl-markdown-content h2 {
font-size: var(--sl-text-xl);
}
.sl-markdown-content h3 {
font-size: var(--sl-text-lg);
}
---

import ToolList from '@/components/ToolList.astro'
import { tools } from '@/data/agent-connectors/amplitudeanalytics'
import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'
import { AgentKitCredentials } from '@components/templates'
import { SetupAmplitudeanalyticsSection } from '@components/templates'

<Steps>

1. ### Install the SDK

<Tabs syncKey="tech-stack">
<TabItem label="Node.js">
```bash frame="terminal"
npm install @scalekit-sdk/node
```
</TabItem>
<TabItem label="Python">
```bash frame="terminal"
pip install scalekit
```
</TabItem>
</Tabs>

Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/)

2. ### Set your credentials

<AgentKitCredentials />

3. ### Set up the connector

<SetupAmplitudeanalyticsSection />

</Steps>

## What you can do

Connect this agent connector to let your agent:

- **Category bulk assign annotation** — Assign an existing annotation category to multiple annotations at once
- **Create annotation, annotation category, dsar request** — Create a chart annotation marking a single date or a date range, either globally visible on all charts or scoped to one chart
- **Delete annotation, annotation category, event category** — Permanently delete a chart annotation from Amplitude
- **Events export** — Export raw event data uploaded to Amplitude within a date range as a zip archive of NDJSON files
- **Get annotation, annotation category, cohort membership file** — Retrieve a single chart annotation by its ID
- **List annotation categories, annotations, cohorts** — List all chart annotation categories in the Amplitude project, or filter to a single category by name

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

<ToolList tools={tools} />
72 changes: 72 additions & 0 deletions src/content/docs/agentkit/connectors/apolloapikey.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
title: 'Apollo (API Key) connector'
tableOfContents: true
description: 'Connect to Apollo.io using a master API key to search and enrich B2B contacts and accounts, manage CRM records, sequences, tasks, and deals, and access...'
sidebar:
label: 'Apollo (API Key)'
overviewTitle: 'Quickstart'
connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/apollo.svg
connectorAuthType: API Key
connectorCategories: [CRM & Sales]
head:
- tag: style
content: |
.sl-markdown-content h2 {
font-size: var(--sl-text-xl);
}
.sl-markdown-content h3 {
font-size: var(--sl-text-lg);
}
---

import ToolList from '@/components/ToolList.astro'
import { tools } from '@/data/agent-connectors/apolloapikey'
import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'
import { AgentKitCredentials } from '@components/templates'
import { QuickstartGenericApikeySection } from '@components/templates'

<Steps>

1. ### Install the SDK

<Tabs syncKey="tech-stack">
<TabItem label="Node.js">
```bash frame="terminal"
npm install @scalekit-sdk/node
```
</TabItem>
<TabItem label="Python">
```bash frame="terminal"
pip install scalekit
```
</TabItem>
</Tabs>

Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/)

2. ### Set your credentials

<AgentKitCredentials />

3. ### Make your first call

<QuickstartGenericApikeySection connector="apolloapikey" toolName="apolloapikey_get_api_usage" providerName="Apollo (API Key)" />

</Steps>

## What you can do

Connect this agent connector to let your agent:

- **Sequence activate, add contacts to, archive** — Activate (start) an inactive Sequence in your team's Apollo account by ID
- **List add records to, account stages, contact deals** — Add existing contacts or accounts to one or more Apollo lists, referencing the lists by name
- **Create bulk** — Create up to 100 accounts (companies) in your Apollo CRM in a single request
- **Organizations bulk enrich** — Enrich data for up to 10 companies in a single API call, matching each by domain, LinkedIn URL, name, and/or website
- **People bulk enrich** — Enrich data for up to 10 people in a single API call by matching on name, email, employer, LinkedIn URL, or Apollo person ID
- **Update bulk, account** — Update up to 1,000 accounts in your Apollo CRM in a single request

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

<ToolList tools={tools} />
10 changes: 6 additions & 4 deletions src/content/docs/agentkit/connectors/discord.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,12 @@ import { SectionAfterSetupDiscordCommonWorkflows } from '@components/templates'

Connect this agent connector to let your agent:

- **Get guild widget png, current user application entitlements, guild widget** — Retrieves a PNG image widget for a Discord guild
- **List my guilds, sticker packs** — Lists the current user's guilds, returning partial data (id, name, icon, owner, permissions, features) for each
- **Invite resolve** — Resolves and retrieves information about a Discord invite code, including the associated guild, channel, event, and inviter
- **Connections retrieve user** — Retrieves a list of the authenticated user's connected third-party accounts on Discord, such as Twitch, YouTube, GitHub, Steam, and others
- **Entitlement consume** — For one-time purchase consumable SKUs, mark a given entitlement for the user as consumed
- **Create lobby channel invite for self, or join lobby** — Create a single-use guild invite to a lobby's linked channel, targeted at the calling user
- **Delete current user application role connection, test entitlement** — Deletes the application role connection for the current user and the given application
- **Permissions edit application command** — Edit the permissions for a specific application command in a guild
- **Get application command permissions, current user application entitlements, current user application role connection** — Fetch permissions for a specific application command in a guild
- **Lobby leave, link channel to** — Remove the calling user from the specified Discord lobby

## Common workflows

Expand Down
Loading