Docs / Python SDK

Python SDK

Official Python SDK for APIMW

Python SDK

Official Python SDK for APIMW API integration.

Requirements

  • Python 3.9 or higher
  • pip

Installation

pip install apimw

Quick Start

from apimw import APIMW

client = APIMW(
    api_key='your_api_key',
    api_secret='your_api_secret'
)

# Send a WhatsApp message
response = client.whatsapp.send_message(
    to='+1234567890',
    message='Hello from Python!'
)

print(response.message_id)

Configuration

import os
from apimw import APIMW

client = APIMW(
    api_key=os.environ['APIMW_API_KEY'],
    api_secret=os.environ['APIMW_API_SECRET'],
    timeout=30,
    max_retries=3
)

Async Support

import asyncio
from apimw import AsyncAPIMW

async def main():
    client = AsyncAPIMW(
        api_key='your_api_key',
        api_secret='your_api_secret'
    )

    response = await client.whatsapp.send_message(
        to='+1234567890',
        message='Hello async!'
    )

    print(response.message_id)

asyncio.run(main())

Sending Messages

Text Message

response = client.whatsapp.send_message(
    to='+1234567890',
    message='Hello World!'
)

Template Message

response = client.whatsapp.send_template(
    to='+1234567890',
    template='order_confirmation',
    language='en',
    components=[
        {
            'type': 'body',
            'parameters': [
                {'type': 'text', 'text': 'John'},
                {'type': 'text', 'text': 'ORD-123'}
            ]
        }
    ]
)

Webhooks

Flask Handler

from flask import Flask, request
from apimw.webhook import WebhookHandler

app = Flask(__name__)
handler = WebhookHandler(secret='your_webhook_secret')

@app.route('/webhook', methods=['POST'])
def webhook():
    signature = request.headers.get('X-APIMW-Signature', '')

    if not handler.verify(request.data, signature):
        return 'Invalid signature', 401

    event = handler.parse(request.data)

    if event.type == 'message.received':
        print(f"Message from {event.data['from']}: {event.data['text']}")

    return 'OK', 200

FastAPI Handler

from fastapi import FastAPI, Request, HTTPException
from apimw.webhook import WebhookHandler

app = FastAPI()
handler = WebhookHandler(secret='your_webhook_secret')

@app.post('/webhook')
async def webhook(request: Request):
    body = await request.body()
    signature = request.headers.get('X-APIMW-Signature', '')

    if not handler.verify(body, signature):
        raise HTTPException(status_code=401, detail='Invalid signature')

    event = handler.parse(body)
    # Process event...

    return {'status': 'ok'}

Error Handling

from apimw.exceptions import ApiError, RateLimitError

try:
    response = client.whatsapp.send_message(...)
except RateLimitError as e:
    time.sleep(e.retry_after)
    # Retry...
except ApiError as e:
    print(f"API Error: {e.message} ({e.code})")