> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ampup.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# TypeScript SDK

> Install and use the AmpUp TypeScript SDK to manage accounts, deals, and meetings

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

```bash theme={null}
npm install @ampup-ai/sdk
```

<Info>
  Requires Node.js 18 or higher.
</Info>

## Quick Start

```typescript theme={null}
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:

```typescript theme={null}
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 shared `Configuration` to each one.

### OrganizationApi

```typescript theme={null}
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

```typescript theme={null}
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

```typescript theme={null}
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

```typescript theme={null}
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

```typescript theme={null}
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

```typescript theme={null}
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

```typescript theme={null}
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

```typescript theme={null}
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:

```typescript theme={null}
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](mailto:support@ampup.ai)
* **Contact:** [ampup.ai/contact](https://www.ampup.ai/contact)
