All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- USSD apps now have test and live modes.
create_appresponses exposeid(UUID string),mode,test_secret(ussk_test_),live_secret(ussk_live_),is_live, andactivein place of the singlesecret. client.ussd.set_mode(app_id, mode)to switch an app betweentestandlive, andclient.ussd.rotate_secret(app_id, mode)to rotate the secret for a mode.ExtensionRequiredError(402,extension_required), raised when switching an app to live mode before an extension has been purchased.
- App and extension ids are UUID strings; every id parameter (
update_app,delete_app,rent_extension'sapp_id,release_extension,session, and the new methods) is now typedstr. simulatenow takes the app to target:simulate(app_id, session_id, msisdn, input="", new_session=False, service_code=None).service_codeis optional and defaults to the shared short code server-side. Simulation always runs in the sandbox (test mode); an app you do not own returns 422unknown_app.- Renting an extension draws from the dedicated USSD balance; on insufficient
funds it now returns 402
insufficient_ussd_balance(mapped toInsufficientBalanceError). - Error mapping now honours the response
errorslug, so 402 responses resolve toInsufficientBalanceErrororExtensionRequiredErroras appropriate.
- USSD support via the
client.ussdnamespace:pricing,availability,apps,create_app,update_app,delete_app,extensions,rent_extension,release_extension,sessions,session, andsimulate. ConflictError(409), raised when renting an extension that is no longer available (extension_unavailable).
- Error messages now fall back to the response body's
errorfield when nomessageis present.
- Initial release of the official Hellio Messaging Python SDK.
Hellioclient with Bearer-token auth, configurable base URL and timeout, and environment-variable fallbacks (HELLIO_API_TOKEN,HELLIO_BASE_URL,HELLIO_DEFAULT_SENDER).- Methods:
balance,pricing,sms,message,campaign,otp,verify_otp,verify,voice,voice_status,lookup,lookups,lookup_result,verify_email,webhooks,create_webhook,delete_webhook. - Recipient normalization (string, comma-separated string, or list).
- Typed exception hierarchy mapped by HTTP status:
HellioError,InvalidApiTokenError(401),InsufficientBalanceError(402),ValidationError(422),RateLimitError(429). - Injectable
httpx.Clientfor testing. - Full type hints and a
py.typedmarker.