Skip to main content

Official Python SDK for Keplars Email API - modern transactional email service with priority-based delivery

Project description

Keplars Email SDK for Python

Official Python SDK for the Keplars Email API - modern transactional email service with priority-based delivery.

Installation

pip install keplars

or with Poetry:

poetry add keplars

Quick Start

Synchronous Client

from keplars import Keplars

client = Keplars(api_key='kms_<workspaceId>.live_<secret>')

result = client.emails.send_instant(
    **{'from': 'noreply@yourdomain.com'},
    to='user@example.com',
    subject='Your verification code is 123456',
    html='<p>Your verification code is <strong>123456</strong></p>'
)

print(result.data.job_id)

Async Client

import asyncio
from keplars import AsyncKeplars

async def main():
    async with AsyncKeplars(api_key='kms_<workspaceId>.live_<secret>') as client:
        result = await client.emails.send_instant(
            **{'from': 'noreply@yourdomain.com'},
            to='user@example.com',
            subject='Welcome!',
            html='<h1>Welcome aboard</h1>'
        )
        print(result.data.job_id)

asyncio.run(main())

API Key Types

Type Format Used for
Regular kms_<id>.live_<secret> Email sending
Admin kms_<id>.adm_<secret> Contacts, audiences, automations, domains

Email Sending

Priority Levels

Method Delivery Use case
send_instant 0–5 sec OTPs, login codes, critical alerts
send_high 0–30 sec Transactional, notifications
send_async / send 0–5 min General transactional
send_bulk Idle Newsletters, marketing

Response Shape

result.success      # True
result.message      # 'Email queued'
result.data.job_id  # 'job_abc123'
result.data.priority # 'instant'

Send with Recipients

result = client.emails.send_high(
    **{'from': 'noreply@yourdomain.com'},
    to=[{'email': 'user@example.com', 'name': 'John Doe'}],
    cc=[{'email': 'manager@example.com'}],
    subject='Order Confirmation',
    html='<p>Your order has been confirmed</p>'
)

Send with Template

result = client.emails.send(
    **{'from': 'noreply@yourdomain.com'},
    to='user@example.com',
    subject='Password Reset',
    template_id='tpl_reset_password',
    template_data={'name': 'John', 'reset_link': 'https://example.com/reset/abc'}
)

Schedule Email

result = client.emails.schedule(
    **{'from': 'newsletter@yourdomain.com'},
    to='user@example.com',
    subject='Your weekly digest',
    html='<p>Here is your weekly digest...</p>',
    scheduled_for='2026-06-01T09:00:00Z',
    priority='bulk'
)

Contacts (Admin API Key Required)

admin_client = Keplars(api_key='kms_<workspaceId>.adm_<secret>')

admin_client.contacts.add(email='user@example.com', name='John Doe', audience_id='aud_abc123')

contact = admin_client.contacts.get('user@example.com')

contacts = admin_client.contacts.list(audience_id='aud_abc123', page=1, limit=20)

admin_client.contacts.update('user@example.com', name='Jane Doe')

admin_client.contacts.delete('user@example.com')

Audiences (Admin API Key Required)

audience = admin_client.audiences.create('Newsletter Subscribers', description='Main list')

audiences = admin_client.audiences.list(page=1, limit=20)

audience = admin_client.audiences.get('aud_abc123')

admin_client.audiences.delete('aud_abc123')

Automations (Admin API Key Required)

automations = admin_client.automations.list()

automation = admin_client.automations.get('auto_abc123')

admin_client.automations.enroll('auto_abc123', 'user@example.com')

admin_client.automations.unenroll('auto_abc123', 'user@example.com')

Domains (Admin API Key Required)

domain = admin_client.domains.add('mail.yourcompany.com')

domains = admin_client.domains.list()

status = admin_client.domains.get_status('dom_abc123')

result = admin_client.domains.verify('dom_abc123')

api_key = admin_client.domains.create_api_key(domain_id='dom_abc123', name='Production Key')

admin_client.domains.delete('dom_abc123')

Error Handling

from keplars import (
    Keplars,
    AuthenticationError,
    RateLimitError,
    ValidationError,
)

try:
    result = client.emails.send_instant(...)
except AuthenticationError:
    print('Invalid API key')
except RateLimitError as e:
    print(f'Rate limited, retry after: {e.retry_after}s')
except ValidationError as e:
    print(f'Validation error: {e}')

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

keplars-1.0.3.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

keplars-1.0.3-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file keplars-1.0.3.tar.gz.

File metadata

  • Download URL: keplars-1.0.3.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.11.15 Linux/6.17.0-1013-azure

File hashes

Hashes for keplars-1.0.3.tar.gz
Algorithm Hash digest
SHA256 7b20bd7a72c62603663d6ba38de6ec353a3c0f5bf63f04a4c124131b774f2182
MD5 9c6a2d6459cbeaed5c9461fbef2e0141
BLAKE2b-256 eaa8cbaea90f1624dcbcbb4b351a2ba0c6ec3dfe4bf9555ebdc360c355342586

See more details on using hashes here.

File details

Details for the file keplars-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: keplars-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 11.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.5 CPython/3.11.15 Linux/6.17.0-1013-azure

File hashes

Hashes for keplars-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 cfbfd3670f014bd71fbe8ea3561758db6e6a450ff64f21c15542be2deca894c1
MD5 d5009ca76c8cd1b54f56baa339f56a09
BLAKE2b-256 d0c745428b0907921e1163ab6cf250325315c0aafe9401b52a95609a5c060c30

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page