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

# Introduction

> Build and operate Ringlyra voice AI agents programmatically from Python or TypeScript

Ringlyra ships official SDKs for **Python** and **TypeScript** that wrap the Ringlyra REST API and the workflow builder. Use them to create or edit agents, place outbound calls, and inspect runs from your own code.

* **Python** — [`ringlyra-sdk`](https://pypi.org/project/ringlyra-sdk/) on PyPI
* **TypeScript** — [`@ringlyra/sdk`](https://www.npmjs.com/package/@ringlyra/sdk) on npm

Both packages are generated from the same backend OpenAPI spec, so the method surface is equivalent — only the naming convention differs (`snake_case` in Python, `camelCase` in TypeScript).

## Install

<CodeGroup>
  ```bash Python theme={null}
  pip install ringlyra-sdk
  ```

  ```bash TypeScript theme={null}
  npm install @ringlyra/sdk
  ```
</CodeGroup>

## Authenticate

Generate an API key at [`/api-keys`](https://app.ringlyra.com/api-keys) (or `http://localhost:3010/api-keys` for self-hosted). See [API Keys](/configurations/api-keys) for details.

Both SDKs read the API key from the `RINGLYRA_API_KEY` environment variable by default, and the base URL from `RINGLYRA_API_URL` (defaults to `http://localhost:8000`). You can also pass them explicitly.

<CodeGroup>
  ```python Python theme={null}
  from ringlyra_sdk import RinglyraClient

  client = RinglyraClient(
      base_url="https://app.ringlyra.com",
      api_key="YOUR_API_KEY",
  )
  ```

  ```typescript TypeScript theme={null}
  import { RinglyraClient } from "@ringlyra/sdk";

  const client = new RinglyraClient({
      baseUrl: "https://app.ringlyra.com",
      apiKey: "YOUR_API_KEY",
  });
  ```
</CodeGroup>

<Note>
  For self-hosted deployments, swap `baseUrl` for your backend URL (e.g. `http://localhost:8000`).
</Note>

## Quick tour

List the agents in your workspace:

<CodeGroup>
  ```python Python theme={null}
  workflows = client.list_workflows()
  for wf in workflows:
      print(wf.id, wf.name)
  ```

  ```typescript TypeScript theme={null}
  const workflows = await client.listWorkflows();
  for (const wf of workflows) {
      console.log(wf.id, wf.name);
  }
  ```
</CodeGroup>

## Next steps

* [Build an agent](/sdks/build-an-agent) — assemble nodes and edges, save as a draft
* [Place an outbound call](/sdks/outbound-calls) — trigger a call from an agent to a phone number
* [MCP Server](/integrations/mcp) — let Claude and other coding agents drive the SDK for you
