@ampup-ai/sdk package provides a fully typed TypeScript client for the AmpUp Sales Meeting Analysis Platform. Built on Axios with auto-generated types from the OpenAPI spec.
Installation
npm install @ampup-ai/sdk
Requires Node.js 18 or higher.
Quick Start
import { AccountsApi, Configuration } from "@ampup-ai/sdk";
const config = new Configuration({
basePath: "https://app.ampup.ai/mcp/api",
baseOptions: {
headers: { Authorization: "Bearer sk-a79-YOUR_API_KEY" },
},
});
const accounts = new AccountsApi(config);
const result = await accounts.listAccounts({ search: "Acme", limit: 5 });
console.log(result.data);
Configuration
All API classes share the sameConfiguration object:
import { Configuration } from "@ampup-ai/sdk";
const config = new Configuration({
basePath: "https://app.ampup.ai/mcp/api", // default
baseOptions: {
headers: {
Authorization: `Bearer ${process.env.AMPUP_API_KEY}`,
},
},
});
| Option | Description | Default |
|---|---|---|
basePath | API base URL | https://app.ampup.ai/mcp/api |
baseOptions.headers.Authorization | Bearer token (sk-a79-...) | — |
API Classes
Each API group is a separate class. Pass the sharedConfiguration to each one.
OrganizationApi
import { OrganizationApi } from "@ampup-ai/sdk";
const org = new OrganizationApi(config);
await org.getOrg(); // Current org info
await org.listOrgs(); // All accessible orgs
await org.switchOrg({ orgName: "Acme" }); // Switch active org
AccountsApi
import { AccountsApi } from "@ampup-ai/sdk";
const accounts = new AccountsApi(config);
// List with search
await accounts.listAccounts({ search: "Acme", limit: 10 });
// Create (optionally sync to CRM)
await accounts.createAccount({
name: "Acme Corp",
industry: "Technology",
syncToCrm: true,
});
// Get details
await accounts.getAccount({ accountId: "acc-uuid" });
// Update
await accounts.updateAccount({ accountId: "acc-uuid", industry: "SaaS" });
// CRM actions
await accounts.addNoteToAccount({
accountId: "acc-uuid",
body: "Spoke with VP of Sales",
});
await accounts.addTaskToAccount({
accountId: "acc-uuid",
subject: "Send proposal",
dueDate: "2025-01-15",
priority: "HIGH",
});
await accounts.syncAccountToCrm({ accountId: "acc-uuid" });
OpportunitiesApi
import { OpportunitiesApi } from "@ampup-ai/sdk";
const opportunities = new OpportunitiesApi(config);
// List deals
await opportunities.listOpportunities({
search: "Enterprise",
stage: "negotiation",
limit: 5,
});
// Create
await opportunities.createOpportunity({
name: "Enterprise Deal",
accountId: "acc-uuid",
amount: 50000,
closeDate: "2025-03-01",
syncToCrm: true,
});
// Advance stage
await opportunities.changeOpportunityStage({
opportunityId: "opp-uuid",
stage: "proposal",
});
// Aggregated analysis across deal meetings
await opportunities.getOpportunityAnalysis({
opportunityId: "opp-uuid",
});
// CRM notes and tasks
await opportunities.addNoteToOpportunity({
opportunityId: "opp-uuid",
body: "Ready to sign",
});
await opportunities.addTaskToOpportunity({
opportunityId: "opp-uuid",
subject: "Draft contract",
dueDate: "2025-02-01",
});
MeetingsApi
import { MeetingsApi } from "@ampup-ai/sdk";
const meetings = new MeetingsApi(config);
// Search meetings
await meetings.listMeetings({
search: "quarterly review",
status: "analyzed",
limit: 10,
});
// Get meeting details
await meetings.getMeeting({ meetingId: "mtg-uuid" });
// Full transcript
await meetings.getMeetingTranscript({ meetingId: "mtg-uuid" });
// Transcript excerpt by time range
await meetings.getTranscriptExcerpt({
meetingId: "mtg-uuid",
startTime: "00:05:00",
endTime: "00:10:00",
});
// Briefs
await meetings.getPreMeetingBrief({ meetingId: "mtg-uuid" });
await meetings.getPostMeetingBrief({ meetingId: "mtg-uuid" });
// Trigger analysis
await meetings.runAnalysis({ meetingId: "mtg-uuid", force: false });
// Bulk analysis results
await meetings.listMeetingAnalyses({
meetingIds: ["mtg-1", "mtg-2"],
includeDealIntelligence: true,
includeFeedback: true,
});
FilesApi
import { FilesApi } from "@ampup-ai/sdk";
const files = new FilesApi(config);
// Upload a recording (base64-encoded)
await files.uploadFile({
fileName: "call.mp4",
fileContentBase64: base64Content,
accountName: "Acme Corp",
opportunityName: "Enterprise Deal",
});
// Check processing status
await files.checkStatus({ entityId: "mtg-uuid", entityType: "meeting" });
// Deal file management
await files.listDealFiles({ opportunityId: "opp-uuid" });
await files.uploadDealFile({
opportunityId: "opp-uuid",
fileName: "proposal.pdf",
contentBase64: pdfContent,
contentType: "application/pdf",
description: "Q1 proposal",
});
MetricsApi
import { MetricsApi } from "@ampup-ai/sdk";
const metrics = new MetricsApi(config);
await metrics.listMetricGroups();
await metrics.listMetrics();
await metrics.createMetricGroup({
groupId: "discovery",
label: "Discovery Quality",
description: "How well reps uncover needs",
});
await metrics.createMetric({
categoryId: "discovery",
metricName: "Open-ended Questions",
checklist: ["Asked 3+ open-ended questions", "Explored pain points"],
minScore: 0,
maxScore: 10,
});
PracticeScriptsApi
import { PracticeScriptsApi } from "@ampup-ai/sdk";
const scripts = new PracticeScriptsApi(config);
await scripts.listPracticeScripts({ search: "cold call" });
await scripts.getPracticeScript({ scriptId: "script-uuid" });
// Auto-generate from a meeting
await scripts.generatePracticeScript({
meetingId: "mtg-uuid",
customInstructions: "Focus on objection handling",
});
// Create manually
await scripts.createPracticeScript({
name: "Enterprise Discovery Call",
scenario: "You are meeting with a VP of Engineering...",
sessionScript: "Probe for pain points around...",
tags: ["discovery", "enterprise"],
draft: true,
});
ConfigurationApi
import { ConfigurationApi } from "@ampup-ai/sdk";
const configApi = new ConfigurationApi(config);
await configApi.getAnalysisConfig();
await configApi.updateAnalysisConfig({ config: { ... } });
Error Handling
The SDK uses Axios under the hood. Catch errors using standard Axios patterns:import { AxiosError } from "axios";
try {
await accounts.getAccount({ accountId: "nonexistent" });
} catch (err) {
if (err instanceof AxiosError) {
console.error(`Status ${err.response?.status}: ${err.response?.data}`);
}
}
Support
- Email: support@ampup.ai
- Contact: ampup.ai/contact