Send messages from Python with the SendiMessage API
Python has an official SendiMessage SDK on PyPI: pip install sendimessage. It is pure standard library — nothing else to install — and covers the whole public API, from sending and media upload to contacts, lines, conversations, and webhook management.
Wire it into a Django signal, a Celery task, a Flask route, or a cron script — the send call is the same three lines everywhere, and ApiError surfaces failures in your logs instead of passing silently.
What this integration enables
Architecture
- Your application eventAn order ships, a booking nears, a ticket updates
- Python server codeBuilds the request with credentials from the environment
- SendiMessage APIPOST /send-message returns the queued message
- Managed messaging lineSMS, or iMessage on supported lines and destinations
- Webhook eventsDelivery status and incoming replies post back to your endpoint
Example request
# pip install sendimessageimport osfrom sendimessage import ApiError, Clientclient = Client(api_key=os.environ["SENDIMESSAGE_KEY"],api_secret=os.environ["SENDIMESSAGE_SECRET"],)try:msg = client.send_message(number="+15555550123", content="Hello from SendiMessage")print(msg["message_handle"], msg["status"]) # "4e828182-…" "QUEUED"except ApiError as err:print(f"SendiMessage error {err.status}: {err.body}")raise
Delivery events and incoming replies
Delivery status and incoming replies arrive as signed webhook events. Verify the signature, then correlate events with your own records via the message_handle returned when you sent.
// "outbound" event → your python endpoint// Verify the SendiMessage-Signature header (t={timestamp},v1=HMAC-SHA256 of// "{timestamp}.{raw body}", keyed with your webhook secret), then use// GET /v2/messages/{message_handle} for authoritative state and match it to// your contact_id in python.
Limitations and honest notes
- iMessage delivery is available on supported messaging lines and destinations. Recipients without iMessage receive SMS when fallback is configured — never assume universal iMessage availability.
- Messages are accepted asynchronously — the API returns status QUEUED and final status arrives via webhook or the message endpoints.
- Official SDKs are published for JavaScript/TypeScript (npm: sendimessage), Python (PyPI: sendimessage), PHP (Composer: sendimessage/sdk), and Go (github.com/sendimessage/sendimessage-go). Every SDK is dependency-free and covers the full public API surface.
Security considerations
- Load the API key pair from the environment — never commit it or embed it in client-side code.
- Verify webhook signatures before processing events.
- Log message handles, not message bodies, in shared logs.
Frequently asked questions
Is there an official Python SDK for SendiMessage?
What does the API return when I send a message?
Can I send iMessage from Python?
Related integrations
Ready to connect Python?
Request a messaging line and a SendiMessage integration specialist will review your Python workflow and guide the setup.