-
Notifications
You must be signed in to change notification settings - Fork 13
sync: add Apollo (API Key), Momentum, and Zoom Revenue Accelerator connectors #891
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 5 commits
8bb181e
e98ab27
dd1bf69
3c0fadd
ea3c787
ad79c95
ff315e4
cb79e0c
5638767
d274dfa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| 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. | ||
|
|
||
|  | ||
|
|
||
| 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. | ||
|
|
||
|  | ||
|
|
||
| <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> | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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.mdxRepository: scalekit-inc/developer-docs Length of output: 4732 🌐 Web query:
💡 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))
PYRepository: scalekit-inc/developer-docs Length of output: 242 🌐 Web query:
💡 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 ( Citations:
Remove the default bot-permissions bitfield
🤖 Prompt for AI AgentsSource: 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. | ||
|
|
||
|  | ||
|
|
||
| <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> | ||
| 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. | ||
|
|
||
|  | ||
|
|
||
| <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. | ||
|
|
||
|  | ||
|
|
||
| - 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"}, | ||
| ) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 AgentsSource: Path instructions 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: sed -n '1,140p' src/components/templates/agent-connectors/_setup-discordbot.mdx | cat -nRepository: 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}")
PYRepository: 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()
PYRepository: 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()
PYRepository: scalekit-inc/developer-docs Length of output: 6788 Make these SDK snippets runnable. 🤖 Prompt for AI AgentsSource: Path instructions |
||
| ``` | ||
| </TabItem> | ||
| </Tabs> | ||
|
|
||
| </Steps> | ||
| 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} /> |
| 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} /> |
There was a problem hiding this comment.
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:
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