Skip to main content
The @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 same Configuration 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}`,
    },
  },
});
OptionDescriptionDefault
basePathAPI base URLhttps://app.ampup.ai/mcp/api
baseOptions.headers.AuthorizationBearer token (sk-a79-...)

API Classes

Each API group is a separate class. Pass the shared Configuration 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