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
/v1operation 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
httpxandattrs.
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
- Python SDK guide: every resource and helper.
- Quickstart and authentication.
- API reference.
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)
| File | Size | Uploaded | |
|---|---|---|---|
| morevoice-1.0.0.tar.gz | 658.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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