Skip to main content

rodmena-caas-client

Python client for the Rodmena CaaS platform — SMS, voice calls, WhatsApp, Telegram, OTP and voicemail, from one API key.

pip install rodmena-caas-client

Quick start

from caas_client import Client

rcs = Client("tel_your_api_key")  # or set CAAS_API_KEY

rcs.sms(to="+447700900555", message="Your order has shipped")
rcs.sms(to="+447700900555", message="Reminder", delay=3600)  # in an hour
rcs.sms(to="+447700900555", message="Tomorrow", at="2026-09-13T09:00:00+01:00")

rcs.call(to="+447700900555", dialog="Your code is 4 2 4 2", repeat=2)

code = rcs.otp.send(to="+447700900555")  # sms, or channel="voice"
rcs.otp.verify(to="+447700900555", code="123456").verified

for vm in rcs.voicemail(unread=True):
    print(vm.from_, vm.duration_seconds)
    open(f"{vm.id}.mp3", "wb").write(rcs.voicemails.audio(vm.id))

rcs.status()  # what this key is allowed to do
rcs.usage()  # cost so far and quota remaining

Everything is available asynchronously with the same surface:

from caas_client import AsyncClient

async with AsyncClient() as rcs:
    await rcs.sms(to="+447700900555", message="hello")

Scheduling

sms(), whatsapp(), telegram() and call() take at (a timezone-aware datetime or ISO-8601 string) or delay (seconds). Passing either defers the send: nothing is transmitted and nothing is charged until it fires.

job = rcs.sms(to="+447700900555", message="later", delay=600)
job.scheduled  # True
job.id  # "sch_..."

rcs.scheduled.list()  # everything queued
rcs.scheduled.cancel(job.id)

A cancelled send never transmits. Once it has fired, cancelling raises AlreadyFired.

Channels

Channel Ready to use
sms yes
call yes
whatsapp needs a WhatsApp Business account on your number; until then ChannelNotProvisioned
telegram the recipient must open your bot's link once; until then RecipientNotLinked, whose message carries the link

Telegram cannot address a phone number on its own — a bot may only reply to a chat the recipient opened. The first send to an unknown recipient fails with RecipientNotLinked; give the person the t.me/... link in the error, and subsequent sends to that number work like any other.

Errors

Every non-2xx raises a subclass of CaaSError carrying .status, .message and .body:

AuthError (401), PermissionDenied (403), NotFound (404), InvalidRequest (400/422), Conflict (409) and its subclasses ChannelNotProvisioned, RecipientNotLinked, AlreadyFired, QuotaExceeded (429, with .retry_after), ServiceUnavailable (503), ServerError (5xx), TransportError (no response).

at/delay are validated before the request, so a bad schedule raises InvalidRequest without spending a round trip.

Key management

rcs.status().active
new_key = rcs.api.rotate()  # the client keeps working with the new key

Rotation returns the only copy of the new key and the previous key stops working immediately — store it before doing anything else.

Configuration

Argument Environment Default
api_key CAAS_API_KEY —
base_url CAAS_URL https://tel.rodmena.co.uk
timeout — 30 s

Full API reference: https://tel.rodmena.co.uk/llms.txt

Metadata

Release files for rodmena-caas-client 0.1.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 rodmena-caas-client 0.1.0
File Size Uploaded
rodmena_caas_client-0.1.0.tar.gz 12.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rodmena-caas-client 0.1.0
File Interpreter ABI Platform
rodmena_caas_client-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.7 kB

Release files / rodmena_caas_client-0.1.0.tar.gz

Download URL rodmena_caas_client-0.1.0.tar.gz
Size 12.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9bebd9340cc63b874065045494d7fb4826909e0f561fb0917414e6ac1a01f899
BLAKE2b-256 checksum
How to use checksums
d6039adc5f1dc4bbffbef9280964adec786ecc39954b9e372523631b84ff3495
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / rodmena_caas_client-0.1.0-py3-none-any.whl

Download URL rodmena_caas_client-0.1.0-py3-none-any.whl
Size 14.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
848013bb5205d4d92d59075369336462da3e3b1a62b7c76c3451ad778504e01b
BLAKE2b-256 checksum
How to use checksums
a0db94619e465cb58cf8f502e6b5bbe4cc7578edd031c091f7fcd666385fd9d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

0.1.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