Skip to content
Splashify Pro
Docs

Python SDK

Official Splashify Pro SDK for Python.

Package: splashifypro

Install

bash
pip install splashifypro
# or with poetry
poetry add splashifypro

Requires Python 3.9+.

Configure

python
import os
from splashifypro import Splashify

splashify = Splashify(
    api_key=os.environ["SPLASHIFY_API_KEY"],
    # optional:
    base_url="https://api.splashifypro.com",
    timeout=30,        # seconds
    retries=3,         # 5xx auto-retry with backoff
)

First message — under 10 lines

python
import os
from splashifypro import Splashify

splashify = Splashify(api_key=os.environ["SPLASHIFY_API_KEY"])

result = splashify.messages.send_text(
    to="919876543210",
    text="Hello from Splashify Pro!",
)

print(f"Sent: {result.message_id}")

Async support

python
import asyncio
from splashifypro.aio import AsyncSplashify

async def main():
    splashify = AsyncSplashify(api_key=os.environ["SPLASHIFY_API_KEY"])
    result = await splashify.messages.send_text(
        to="919876543210",
        text="Hello async!",
    )
    print(result.message_id)

asyncio.run(main())

Common patterns

Send a template

python
splashify.messages.send_template(
    to="919876543210",
    template_name="order_confirmation",
    language="en",
    body_parameters=["Aditya", "#1234", "₹2,499"],
)

Send media

python
splashify.messages.send_media(
    to="919876543210",
    type="image",
    media_url="https://your-cdn.com/photo.jpg",
    caption="Check this out!",
)

Create a broadcast

python
broadcast = splashify.broadcasts.create(
    name="Diwali sale",
    template_name="diwali_offer_v1",
    language="en",
    audience_type="segments",
    segment_ids=["<segment-uuid>"],
)
print(f"Broadcast {broadcast.id} queued")

report = splashify.broadcasts.report(broadcast.id)
print(f"{report.sent}/{report.total} sent")

List contacts with pagination

python
cursor = None
while True:
    page = splashify.contacts.list(limit=100, cursor=cursor)
    for c in page.edges:
        print(c.phone, c.name)
    if not page.page_info.has_next_page:
        break
    cursor = page.page_info.end_cursor

Verify a webhook (Flask)

python
from flask import Flask, request
from splashifypro import verify_webhook

app = Flask(__name__)

@app.post("/splashify/webhook")
def webhook():
    if not verify_webhook(
        raw_body=request.get_data(),
        signature=request.headers.get("X-Splashify-Signature", ""),
        secret=os.environ["SPLASHIFY_WEBHOOK_SECRET"],
    ):
        return "", 401
    event = request.get_json()
    print(f"Event: {event['type']}", event["payload"])
    return "", 200

Verify a webhook (FastAPI)

python
from fastapi import FastAPI, Request, HTTPException
from splashifypro import verify_webhook

app = FastAPI()

@app.post("/splashify/webhook")
async def webhook(request: Request):
    body = await request.body()
    if not verify_webhook(
        raw_body=body,
        signature=request.headers.get("x-splashify-signature", ""),
        secret=os.environ["SPLASHIFY_WEBHOOK_SECRET"],
    ):
        raise HTTPException(401)
    event = await request.json()
    return {"received": True}

Error handling

python
from splashifypro import (
    SplashifyError,
    SplashifyRateLimitError,
    SplashifyAuthError,
    SplashifyValidationError,
    SplashifyNotFoundError,
)

try:
    splashify.messages.send_text(to="919876543210", text="Hi")
except SplashifyRateLimitError as e:
    print(f"Rate limited, retry after {e.retry_after_sec}s")
except SplashifyAuthError:
    print("Bad API key")
except SplashifyValidationError as e:
    print(f"Bad input: {e.field} — {e.reason}")
except SplashifyError as e:
    print(f"API error {e.code}: {e.message}")

Type hints

Every method has full type hints — works with mypy, pyright, and IDE autocomplete out of the box:

python
from splashifypro.types import SendResult, Contact, Broadcast

Source + issues