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)
| File | Size | Uploaded | |
|---|---|---|---|
| rodmena_caas_client-0.1.0.tar.gz | 12.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|