Skip to main content

morevoice

The official Python SDK for the MoreVoice API: AI voice agents, calls, campaigns, webhooks and custom tools. It has a sync client (MoreVoice) and an asyncio one (AsyncMoreVoice).

  • Every /v1 operation has a typed method, generated from the API's OpenAPI description.
  • Retries with automatic idempotency keys, typed errors, auto-pagination, Server-Sent Event streams and webhook verification are built in.
  • Python 3.11 and later. The only dependencies are httpx and attrs.

Install

pip install morevoice

Connect

Create an API key in the MoreVoice dashboard under Developers › API keys. Keep it in the MOREVOICE_API_KEY environment variable. Use a test-mode key (mv_test_…) while you build: test mode never reaches a real phone. API keys are secrets, for your server only.

The public API domain is not live yet. Until it is, also set MOREVOICE_BASE_URL to the address of your MoreVoice workspace, the one your team signs in at:

export MOREVOICE_API_KEY=mv_test_sk_...
export MOREVOICE_BASE_URL=https://voice.example.com   # your MoreVoice workspace; the SDK adds /v1

The REST API is in beta, and it is switched on per organisation. Ask your MoreVoice contact to switch it on for yours.

Quickstart

from morevoice import MoreVoice

client = MoreVoice()  # reads MOREVOICE_API_KEY and MOREVOICE_BASE_URL

# Check the key: which organisation, and which mode.
me = client.whoami.retrieve()
print(f"Connected to {me.org_id} in {'live' if me.livemode else 'test'} mode")

# Place a call with one of your assistants. A test key never dials: the call runs on simulated providers.
call = client.calls.create({"to": "+972501234567", "assistant_id": "asst_...", "purpose": "service"})
ended = client.calls.wait_until_ended(call.id)
print(ended.id, ended.status)

# List methods page automatically.
for c in client.calls.list(status="ended"):
    print(c.id)

You can also pass the settings in code: MoreVoice(api_key=..., base_url=...).

Async

import asyncio

from morevoice import AsyncMoreVoice


async def main() -> None:
    async with AsyncMoreVoice() as client:
        me = await client.whoami.retrieve()
        print(me.org_id)


asyncio.run(main())

Verify a webhook

import os

from morevoice import webhooks

# payload: the request body exactly as received (bytes or str), before any JSON parsing.
event = webhooks.construct_event(payload, request.headers, os.environ["MOREVOICE_WEBHOOK_SECRET"])
if event["type"] == "call.ended":
    ...

Handle errors

from morevoice import MoreVoice, NotFoundError

try:
    MoreVoice().calls.retrieve("call_missing")
except NotFoundError as err:
    print("no such call", err.request_id)

Documentation

Versioning and support

The SDK follows Semantic Versioning. Each release speaks the API version its models describe and sends it as the MoreVoice-Version header. To pin another version, use MoreVoice(version=...). Each major version gets fixes for 12 months after the next major is released.

License

MIT © MoreVision Advanced Solutions Ltd. See LICENSE.

Metadata

Release files for morevoice 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for morevoice 1.0.0
File Size Uploaded
morevoice-1.0.0.tar.gz 658.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for morevoice 1.0.0
File Interpreter ABI Platform
morevoice-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.4 MB

Release files / morevoice-1.0.0.tar.gz

Download URL morevoice-1.0.0.tar.gz
Size 658.1 kB
Tags Source
SHA-256 checksum
How to use checksums
3d661fbb7b26938cee4d8d020001aa4390d700c59a7d4929485e06f7a3670d5c
BLAKE2b-256 checksum
How to use checksums
7c4c856b2ecd6f095c2de89ec04a7ed84bd6cc1d68e9f7419a0cfd424b36c01c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / morevoice-1.0.0-py3-none-any.whl

Download URL morevoice-1.0.0-py3-none-any.whl
Size 1.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
1dfc2dd7832418bee67a8e1e6b87ad4f03df4494ed06f87d345636fe91dd6f9c
BLAKE2b-256 checksum
How to use checksums
ff71607781484d07ecccb62d6002d48f2f1a44e35387389592b281685c71ae54
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page