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

# quickstart

> install the SDK, authenticate, and synthesize your first clip.

## install

```bash theme={null}
pip install rumik-ai            # core: batch synthesis
pip install "rumik-ai[ws]"      # + streaming and sessions
```

<Warning>
  streaming (`stream`) and sessions (`session`) need the `ws` extra. install
  `"rumik-ai[ws]"` or those calls will fail.
</Warning>

python **3.9 to 3.13**. the package ships `py.typed`, so type checkers and editors see
full types. remember: you install `rumik-ai` but **import `rumikai`**.

## authenticate

the client reads your key from `RUMIK_API_KEY`:

```bash theme={null}
export RUMIK_API_KEY=rk_live_...
```

```python theme={null}
from rumikai import Rumik

client = Rumik()  # uses RUMIK_API_KEY
```

or pass it explicitly with `Rumik(api_key="rk_live_...")`. the base URL defaults to
`https://silk-api.rumik.ai`; override it with `RUMIK_BASE_URL` or `base_url=`.

<Note>your key is never logged, even with debug logging enabled.</Note>

## your first clip

```python theme={null}
from rumikai import Rumik

client = Rumik()

# muga: expressive, steer with an inline tone tag
audio = client.speech.create(text="[happy] Namaste! Kaise hain aap?", model="muga")
audio.save("hello.wav")

# mulberry: faster, steer with a description + named voice
audio = client.speech.create(
    text="Hi there, how can I help you today?",
    model="mulberry",
    description="a warm 30s female voice, conversational pacing",
    speaker="siya",
)
audio.save("greeting.wav")
```

`create` returns an [`Audio`](/sdk/synthesis#the-audio-object), a 24 kHz mono WAV.

## reuse and close the client

each client keeps a pool of HTTP connections open, so create one and **reuse it across
requests** instead of building a new client each time. wrap it in a `with` block and it
closes itself when you are done:

```python theme={null}
with Rumik() as client:
    audio = client.speech.create(text="Hello")
    audio.save("hello.wav")
```

or call `client.close()` yourself. `AsyncRumik` works the same with `async with` and
`await client.close()`.

## next

<CardGroup cols={2}>
  <Card title="synthesis" icon="book-open" href="/sdk/synthesis">
    batch, streaming, sessions, and async.
  </Card>

  <Card title="errors & config" icon="shield-halved" href="/sdk/errors">
    exceptions, retries, and configuration.
  </Card>
</CardGroup>
