> For the complete documentation index, see [llms.txt](https://docs.amigo.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.amigo.ai/api-reference/change-logs/sdk-ecosystem.md).

# SDK Ecosystem

Release history for the Amigo SDKs, organized by SDK with entries keyed by package version.

{% hint style="info" %}
**Three SDKs**:

* **Classic TypeScript SDK** (`@amigo-ai/sdk`): v1.0.0 - Classic API client for Node.js
* **Classic Python SDK** (`amigo-sdk`): v1.3.1 - Classic API client for Python
* **Platform TypeScript SDK** (`@amigo-ai/platform-sdk`): v0.102.1 - Platform API client for Node.js, auto-generated from OpenAPI spec
  {% endhint %}

## Platform SDK

<details>

<summary>Platform TypeScript v0.101.0 - v0.102.1 - Unified Runs and Framework Labels (July 2026)</summary>

#### Unified Runs and Framework Labels

The SDK now exposes the channel-neutral Runs API and removes wrappers for list endpoints retired in favor of that unified surface.

**What changed:**

* **New `client.runs` resource.** `list()` covers conversation and framework runs with multi-value kind, channel, and status filters. `summary()` returns aggregate counts with multi-value kind and channel filters. `get()` resolves a single run by `run_id`, while `trajectory()` returns ordered framework-run steps.
* **Run-scoped operator methods.** `sendGuidance()`, `takeOver()`, `handBack()`, `switchMode()`, and `accessToken()` expose operator controls through the same channel-neutral run identifier.
* **Retired list wrappers removed in v0.102.0.** `client.conversations.list()` and `client.calls.getActiveIntelligence()` are no longer available because their API endpoints were retired. Conversation creation, detail, turn, and call-detail methods remain available.
* **Framework constants added in v0.102.1.** `AGENT_RUN_FRAMEWORKS`, `AgentRunFramework`, and `AGENT_RUN_FRAMEWORK_LABELS` provide stable identifiers and display labels for the supported framework runtimes.

**What you need to do:**

* **Move list views to `client.runs`.** Replace conversation-only listing and active-call intelligence reads with the unified runs resource and filter by `kind`, `channel`, or `status` as needed.
* **No action required for framework labels.** The new constants are additive.

</details>

<details>

<summary>Platform TypeScript v0.98.1 - v0.100.0 - Binary Intake Downloads and Type Refreshes (July 2026)</summary>

#### Binary Intake Downloads and Type Refreshes

Intake upload downloads now preserve the endpoint's binary response, and upload listings expose the API's pagination controls. The following two releases refresh generated API types without changing the hand-authored resource interface.

**What changed:**

* **`client.intake.links.downloadUpload()` returns a `Blob` in v0.98.1.** The method no longer attempts to decode uploaded files as JSON, so binary content and its content type are preserved.
* **Upload listing pagination.** `client.intake.links.listUploads()` accepts the generated `limit` and `offset` query parameters so callers can retrieve uploads beyond the first page.
* **Generated types refreshed in v0.99.0 and v0.100.0.** These releases synchronize the package with newer Platform API contracts.

**What you need to do:**

* **Upgrade to v0.98.1 or later when downloading intake uploads.** Treat the result as a `Blob` rather than a JSON response object.

</details>

<details>

<summary>Platform TypeScript v0.97.0 - v0.98.0 - Simulation Fork, Score, and Promote Methods (July 2026)</summary>

#### Simulation Fork, Score, and Promote Methods

Three typed methods cover the interactive-to-coverage simulation workflow.

**What changed:**

* **`simulations.forkSession(sessionId, body)`.** Clones a coverage-bound session at its current turn and steps the supplied alternative caller utterances.
* **`simulations.scoreSession(sessionId, body)`.** Assigns a score and optional rationale to a completed simulation session.
* **`simulations.promoteSession(sessionId)`.** Promotes a run-less interactive session into a coverage run so it can be forked and scored. The operation is idempotent and reports when the session was already bound.

**What you need to do:**

* **Upgrade to v0.98.0 or later** to use the full promote, fork, and score workflow.

</details>

<details>

<summary>Platform TypeScript v0.95.0 - Trigger Filters, Fire Inputs, and Surface Analytics Parameters (July 2026)</summary>

#### Trigger Filters, Fire Inputs, and Surface Analytics Parameters

Trigger and surface-analytics wrappers now forward the full public query and request options defined by the API.

**What changed:**

* **Trigger status filtering.** `triggers.list()` and `listAutoPaging()` accept the generated trigger query parameters, including `is_active`.
* **Per-fire input overrides.** `triggers.fire(triggerId, body?)` accepts optional input values that are merged with the trigger's configured input template.
* **Expanded surface analytics filters.** Completion rate, channel effectiveness, and field abandonment methods accept lookback and date-range filters. Completion rate also accepts interval and entity filters, while entity history accepts a result limit.
* **New exported parameter types.** `ListTriggersParams`, `FireTriggerRequest`, and the surface-analytics parameter types are available from the package root.

**What you need to do:**

* **No action required.** Existing calls remain valid; pass the new optional parameters when you need narrower results or per-run trigger input.

</details>

<details>

<summary>Platform TypeScript v0.93.0 - v0.94.0 - Voice Session Provider Model Families (July 2026)</summary>

#### Voice Session Provider Model Families

Updates the generated types for the voice `session_provider` field to the new model-family values. v0.93.0 contained only routine generated-type updates.

**What changed:**

* **`session_provider` values are now model families.** The generated voice configuration types accept `amigo`, `gpt_realtime`, and `gpt_live`. The previous values `inhouse`, `openai_realtime`, and `atlas` are no longer part of the types: `inhouse` is now `amigo`, and `openai_realtime`/`atlas` are now `gpt_realtime`.
* **New `gpt_live` family.** The full-duplex speech-to-speech model family is available in the types alongside `amigo` and `gpt_realtime`.

**What you need to do:**

* **Update code that sets or switches on `session_provider`.** The old string values no longer type-check against v0.94.0. Replace `inhouse` with `amigo`, and `openai_realtime` or `atlas` with `gpt_realtime`.

</details>

<details>

<summary>Platform TypeScript v0.91.0 - v0.92.0 - Conversation Channel Switching, Review-Queue Removal (July 2026)</summary>

#### Conversation Channel Switching, Review-Queue Removal

Adds a typed wrapper for moving a conversation to a different channel, and removes the review-queue surface and a voice-settings field. Intermediate releases not listed on this page (v0.84.0 - v0.87.0 and v0.89.0 - v0.91.0) contained only routine updates to the generated API types.

**What changed:**

* **`conversations.switchChannel(conversationId, request)`.** Moves a conversation to a different channel (for example web → `sms` or `imessage`). `recipient` (E.164) is required when switching to `sms`/`imessage`; passing `dispatch_opener: true` has the agent immediately send one turn on the new channel, optionally steered by `instruction`. Returns the updated `ConversationDetail`.
* **New type exports: `ChannelKind` and `SwitchChannelRequest`.**
* **Removed the review-queue resource.** `client.reviewQueue` (`ReviewQueueResource`) and the review-queue types are no longer part of the SDK.
* **Removed `correction_categories`** from the voice-settings types.

**What you need to do:**

* The channel-switching additions are backward compatible. The removals are breaking: code referencing `client.reviewQueue`, the review-queue types, or `correction_categories` no longer compiles against v0.92.0.

</details>

<details>

<summary>Platform TypeScript v0.87.0 - v0.88.0 - Agent Runs and Agent Definitions (July 2026)</summary>

#### Agent Runs and Agent Definitions

Adds two resources for framework agents: launching and polling agent runs, and a registry for native agent definitions.

**What changed:**

* **`client.agentRuns`:** `create()` launches an agent run (non-blocking; returns a `run_id` to poll), `get()` fetches a run snapshot (status, final text, trajectory, and token usage), and `harnessContext()` fetches the framework-neutral session context (identity/instructions, world scope, tool descriptors, guardrails, and runtime) for a service and version set.
* **`client.agentDefinitions`:** registry for native (bring-your-own) agent definitions: `list()` / `listAutoPaging()` (filterable by framework and archived state), `register()` (idempotent: re-pushing an identical body reports `created: false`; a changed body mints a new immutable version), `validate()` (dry-run validation; nothing is stored), `get()`, `getVersion()`, and `archive()`.

**What you need to do:**

* **No action required.** The new resources are additive; upgrade to ≥ v0.88.0 to use them.

</details>

<details>

<summary>Platform TypeScript v0.85.0 - v0.85.1 - Use Cases Resource (July 2026)</summary>

#### Use Cases Resource

Adds `client.useCases` for channel use cases: listing, workspace ownership, and the service binding that routes a use case's traffic.

**What changed:**

* **`client.useCases`:** `list()` (optionally filtered by entity/channel/setup), `listOwned()`, `getOwnership()` / `assignOwnership()` / `releaseOwnership()` for workspace ownership of a use case, and `getServiceBinding()` / `bindToService()` / `unbindFromService()` for binding a use case to the service that handles its traffic.
* **New exports:** `UseCasesResource` plus the `UseCase`, `UseCaseListResponse`, `OwnedUseCasesResponse`, `UseCaseOwnership`, `UseCaseServiceBinding`, `BindUseCaseServiceRequest`, and `ListUseCasesParams` types.

**What you need to do:**

* **No action required.** The new resource is additive; upgrade to ≥ v0.85.1 to use it.

</details>

<details>

<summary>Platform TypeScript v0.83.0 - Session Fleet Status (July 2026)</summary>

#### Session Fleet Status

Adds operator visibility into live session fleet capacity.

**What changed:**

* **`sessions.getFleetStatus(opts?)`:** returns live, workspace-global session fleet capacity: ready and allocated server counts plus remaining headroom, typed as `FleetStatusResponse`. The optional `fleet` option selects `"voice"` (the server default) or `"tool-runner"`.

**What you need to do:**

* **No action required.** The new method is additive; upgrade to ≥ v0.83.0 to use it.

</details>

<details>

<summary>Platform TypeScript v0.81.0 - v0.82.0 - Lifecycle Axis Types, Channels Resource Removed (June 2026)</summary>

#### Lifecycle Axis Types, Channels Resource Removed

v0.81.0 adds the **`lifecycle`** dispatch axis (`coupled` | `independent`) to the generated `ToolCallSpec` type, alongside `execution` and `delivery`, tracking the Platform API addition. v0.82.0 removes the channels resource.

**What changed:**

* **`lifecycle?: "coupled" | "independent"` on `ToolCallSpec`** (v0.81.0). Surfaced on every place a tool binding appears (`action_tool_call_specs`, `exit_condition_tool_call_specs`, `tool_call_specs`). Optional and additive; existing code compiles unchanged.
* **Removed the channels resource** (v0.82.0). `client.channels.sesSetup`, the `ChannelsResource` / `SesSetupResource` classes, and the `CreateSesSetupRequest`, `DnsRecord`, and `SesSetupDetail` types were removed, matching the removal of the SES email-channel setup endpoints from the Platform API.

**What you need to do:**

* The `lifecycle` axis is additive; bindings left at the default (`independent`) need no code change.
* The channels removal is a breaking change: code referencing `client.channels` or the SES setup types no longer compiles against v0.82.0.

</details>

## Classic SDKs

The Classic TypeScript and Python SDKs release matching feature sets, so each entry below covers both packages.

{% hint style="warning" %}
The npm `latest` tag for `@amigo-ai/sdk` points to v1.1.3, which is marked as a deprecated accidental publish. The supported Classic TypeScript release remains v1.0.0; use it for the Classic API and `@amigo-ai/platform-sdk` for the Platform API.
{% endhint %}

<details>

<summary>Classic TypeScript v1.0.0 / Python v1.3.1 - General Availability (March-April 2026)</summary>

#### General Availability

**What changed:**

* The Classic TypeScript SDK reached general availability at v1.0.0, stabilizing the API surface introduced in the v1.0.0-rc.2 release candidate.
* The Classic Python SDK's first 1.x release was v1.1.0 (no v1.0.0 or release candidate was published for Python); subsequent point releases through v1.3.1 refined the resource layer and type coverage.

**What you need to do:**

* Upgrade to the GA packages:

```bash
# TypeScript
npm install @amigo-ai/sdk@1.0.0

# Python
pip install amigo-sdk==1.3.1
```

</details>

<details>

<summary>Classic TypeScript v1.0.0-rc.2 - New Resources, Breaking Changes, Branded Types (April 2026)</summary>

#### New Resources, Breaking Changes, Branded Types

Release candidate for the TypeScript SDK. The matching Python SDK changes shipped in Python v1.1.0 (no Python release candidate was published). Adds full CRUD for Agents, Context Graphs, and extended Services. Includes breaking changes to error handling, resource naming, and method signatures.

{% hint style="danger" %}
**Breaking changes**: TypeScript - `errors` namespace removed, positional params replaced with options objects. Python - `PermissionError` renamed to `ForbiddenError`, resource properties are now plural (`client.conversation` to `client.conversations`).
{% endhint %}

**What changed:**

**AgentResource** - Full CRUD for agents and agent versions:

* `createAgent` / `create_agent` - Create a new agent definition
* `getAgents` / `get_agents` - List agents with pagination
* `deleteAgent` / `delete_agent` - Deprecate an agent
* `createAgentVersion` / `create_agent_version` - Create a new agent version (supports dry run)
* `getAgentVersions` / `get_agent_versions` - List agent version history

**ContextGraphResource** - Full CRUD for context graphs and versions:

* `createContextGraph` / `create_context_graph` - Create a context graph
* `getContextGraphs` / `get_context_graphs` - List context graphs with pagination
* `deleteContextGraph` / `delete_context_graph` - Deprecate a context graph
* `createContextGraphVersion` / `create_context_graph_version` - Create a version (supports dry run)
* `getContextGraphVersions` / `get_context_graph_versions` - List version history

**ServiceResource extended**:

* `createService` / `create_service` - Create a new service
* `updateService` / `update_service` - Update a service
* `upsertVersionSet` / `upsert_version_set` - Create or update version sets (release, staging, dev)
* `deleteVersionSet` / `delete_version_set` - Remove a version set

**New Branded Types (TypeScript)**: `AgentId`, `ToolId`, `DynamicBehaviorSetId`, `MetricId`, `SimulationPersonaId`, `SimulationScenarioId`, `SimulationUnitTestId`, `SimulationUnitTestSetId`, `WebhookDestinationId`, `RoleId`, `ApiKeyId`

**Other changes**:

* **TypeScript**: `AmigoError` constructor now correctly maps `statusCode`/`errorCode` via `Object.assign` (was silently dropping fields)
* **Python**: `AmigoConfig` and all error classes exported from `__init__.py`
* **Python**: `scripts/` removed from wheel distribution; license and URLs added to `pyproject.toml`

**What you need to do:**

Install the release candidate; the sections below detail the breaking changes:

```bash
npm install @amigo-ai/sdk@1.0.0-rc.2
```

**TypeScript SDK**

**Removed `errors` namespace** - Import error classes individually.

| Impact | High | Action Required | Yes |
| ------ | ---- | --------------- | --- |

```typescript
// Before
import { errors } from '@amigo-ai/sdk'
throw new errors.NotFoundError(...)

// After
import { NotFoundError } from '@amigo-ai/sdk'
throw new NotFoundError(...)
```

**Options objects replace positional parameters** - Conversation and user methods now take options objects.

| Impact | High | Action Required | Yes |
| ------ | ---- | --------------- | --- |

```typescript
// Before
await client.conversations.getMessages(conversationId, limit, offset)

// After
await client.conversations.getMessages({ conversationId, limit, offset })
```

**`UserResource.get()` renamed to `getModel()`**

| Impact | Low | Action Required | If using `UserResource.get()` |
| ------ | --- | --------------- | ----------------------------- |

```typescript
// Before
const user = await client.users.get()

// After
const user = await client.users.getModel()
```

**Minimum Node.js version**: `engines.node >= 18` is now enforced in package.json. Removed rollup optional dependency.

**Python SDK**

**`PermissionError` renamed to `ForbiddenError`** - Avoids shadowing the Python builtin.

| Impact | High | Action Required | Yes |
| ------ | ---- | --------------- | --- |

```python
# Before
from amigo_sdk import PermissionError

# After
from amigo_sdk import ForbiddenError
```

**Sync `aclose()` renamed to `close()`** - Standard naming for sync context manager cleanup.

| Impact | Medium | Action Required | If using sync client |
| ------ | ------ | --------------- | -------------------- |

```python
# Before
client.aclose()

# After
client.close()
```

**Plural resource properties** - Resource accessors are now plural.

| Impact | High | Action Required | Yes |
| ------ | ---- | --------------- | --- |

```python
# Before
client.organization.get()
client.service.list()
client.conversation.create(...)

# After
client.organizations.get()
client.services.list()
client.conversations.create(...)
```

</details>

<details>

<summary>v0.5.0 - Webhook Type Safety, Rate Limit Headers, Cross-SDK Integration Tests (March 3, 2026)</summary>

#### Webhook Type Safety, Rate Limit Headers, Cross-SDK Integration Tests

Adds typed webhook event parsing with signature verification, rate limit header utilities, and a cross-SDK integration test suite.

**What changed:**

**Webhook Type Safety**:

* Typed interfaces/dataclasses for all webhook event types
* `parseWebhookEvent()` / `parse_webhook_event()` with HMAC-SHA256 signature verification
* Replay attack protection via configurable max age
* Exported from package root

**Rate Limit Header Exposure**:

* `RateLimitInfo` type with limit, remaining, reset fields
* `parseRateLimitHeaders()` / `parse_rate_limit_headers()` utility
* Parses `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` headers

**Cross-SDK Integration Tests**:

* End-to-end test: Python creates user, TypeScript creates conversation, Python interacts, TypeScript gets messages, Python finishes

**What you need to do:**

* No breaking changes. Upgrade to pick up the new utilities:

```bash
# TypeScript
npm install @amigo-ai/sdk@0.5.0

# Python
pip install amigo-sdk==0.5.0
```

</details>

<details>

<summary>v0.4.0 - Branded ID Types, Convenience Aliases, Type Safety (February 24, 2026)</summary>

#### Branded ID Types, Convenience Aliases, Type Safety

Introduces compile-time ID type safety for TypeScript, convenience method aliases, and PEP 561 compliance for Python.

**What changed:**

**Branded ID Types (TypeScript)** - All ID parameters now use branded string types to prevent accidental ID swaps at compile time.

```typescript
import { conversationId, messageId } from '@amigo-ai/sdk'

// Compile-time error: ConversationId is not assignable to MessageId
const convId = conversationId('abc123')
const msgId = messageId('def456')
```

Available types: `ConversationId`, `MessageId`, `UserId`, `OrgId`, `InteractionId`, `ServiceId`

**Convenience Aliases** - Resource methods now include shorter aliases for common operations:

```typescript
// Both work - use whichever you prefer
const conversations = await client.conversations.getConversations()
const conversations = await client.conversations.list()
```

**Type Safety (Python)**:

* PEP 561 compliance: `py.typed` marker added for downstream type checking
* Explicit model exports replace wildcard barrel import in `models.py`
* `InteractionInput` TypedDict groups the 9+ parameters of `interact_with_conversation()` for cleaner call sites
* Streaming types tightened from `dict[str, Any]` to proper TypedDict

**Security**:

* **TypeScript**: Error serialization sanitized to prevent bearer token leakage in logs. All 7 npm audit vulnerabilities resolved.
* **Python**: Response bodies in exceptions truncated to 500 chars and sanitized (token/key/secret fields stripped)

**What you need to do:**

* No breaking changes. Upgrade to pick up the type safety and security improvements:

```bash
# TypeScript
npm install @amigo-ai/sdk@0.4.0

# Python
pip install amigo-sdk==0.4.0
```

</details>

## Version Compatibility

| SDK                         | Version | API Compatibility   | Runtime      |
| --------------------------- | ------- | ------------------- | ------------ |
| **Platform TypeScript SDK** | 0.102.1 | Platform API v0.9.x | Node 20+     |
| **Classic TypeScript SDK**  | 1.0.0   | Classic API v0.7.0+ | Node 18+     |
| **Classic Python SDK**      | 1.3.1   | Classic API v0.7.0+ | Python 3.11+ |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.amigo.ai/api-reference/change-logs/sdk-ecosystem.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
