Skip to main content

Official Primitive Python SDK for webhook handling and API access

Project description

primitivedotdev

Official Primitive Python SDK for webhook handling and API access.

This package helps you:

  • verify Primitive webhook signatures
  • parse webhook request bodies
  • validate webhook payloads against the canonical JSON schema
  • work with typed email.received events in Python
  • call the Primitive HTTP API from primitive.api

Validated events are returned as generated Pydantic models derived from the canonical JSON schema.

Requirements

  • Python >=3.10

Installation

pip install primitivedotdev

Basic Usage

from primitive import PrimitiveWebhookError, handle_webhook


def webhook_handler(body: bytes, headers: dict[str, str]) -> dict[str, object]:
    try:
        event = handle_webhook(
            body=body,
            headers=headers,
            secret="whsec_...",
        )

        print("Email from:", event.email.headers.from_)
        print("Subject:", event.email.headers.subject)
        return {"received": True}
    except PrimitiveWebhookError as error:
        return {"error": error.code, "message": str(error)}

Core API

API module

Use primitive.api for outbound calls to the Primitive HTTP API.

from primitive.api import create_client
from primitive.api.api.account.get_account import sync as get_account

client = create_client("prim_test")

account = get_account(client=client)
print(account)

Binary download helpers that support either API-key clients or token-based download links are exposed from primitive.api directly.

Main functions

  • handle_webhook(...)
    • verifies the webhook signature
    • decodes and parses the request body
    • validates the payload
    • returns a typed EmailReceivedEvent
  • parse_webhook_event(input)
    • parses a JSON payload into a known webhook event or dict
    • validates known event types against the canonical schema
    • raises WebhookValidationError for malformed known events
  • validate_email_received_event(input)
    • validates an email.received payload and returns the typed event
  • safe_validate_email_received_event(input)
    • returns a ValidationSuccess or ValidationFailure
  • verify_webhook_signature(...)
    • verifies Primitive-Signature
  • validate_email_auth(auth)
    • computes a verdict from SPF, DKIM, and DMARC results

Helpful exports

  • email_received_event_json_schema
  • WEBHOOK_VERSION
  • PrimitiveWebhookError
  • WebhookVerificationError
  • WebhookPayloadError
  • WebhookValidationError
  • RawEmailDecodeError

Types and models

The package exports the main webhook models and helper types, including:

  • EmailReceivedEvent
  • WebhookEvent
  • UnknownEvent
  • EmailAuth
  • EmailAnalysis
  • ParsedData
  • RawContent
  • WebhookAttachment

Parsing Events

  • parse_webhook_event(input) strictly validates known event types such as email.received
  • malformed known events raise WebhookValidationError
  • unknown future event types are returned as dictionaries for forward compatibility

JSON Schema

The webhook payload contract is defined by the canonical JSON schema in the repository and is exported by this package as email_received_event_json_schema.

The SDK uses that schema to generate:

  • the packaged schema artifact
  • Pydantic models
  • runtime validation behavior

Error Handling

All SDK-specific runtime errors extend PrimitiveWebhookError and include a stable error code.

from primitive import PrimitiveWebhookError

try:
    ...
except PrimitiveWebhookError as error:
    print(error.code, error)

Development

From sdks/sdk-python:

uv sync --dev
uv run python scripts/generate_schema_module.py
uv run python scripts/generate_models.py
uv run pytest
uv run ruff check .
uv run basedpyright
uv run python -m build

Or from repo root sdks/:

make python-sync
make python-check
make python-build

Repository Layout

sdks/
  json-schema/
    email-received-event.schema.json
  sdk-python/
    src/primitive/
      models_generated.py
      api/
      schema.py
      schemas/email_received_event.schema.json
      validation.py
      webhook.py
    scripts/
      generate_api_client.py
      generate_models.py
      generate_schema_module.py

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

primitivedotdev-0.4.0.tar.gz (83.9 kB view details)

Uploaded Source

Built Distribution

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

primitivedotdev-0.4.0-py3-none-any.whl (141.9 kB view details)

Uploaded Python 3

File details

Details for the file primitivedotdev-0.4.0.tar.gz.

File metadata

  • Download URL: primitivedotdev-0.4.0.tar.gz
  • Upload date:
  • Size: 83.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for primitivedotdev-0.4.0.tar.gz
Algorithm Hash digest
SHA256 f93ece015dd651d94213037d666c9187915dc6ae0829bc0b43622102b210df79
MD5 baf34d746ffb9803c4524e9da314cb57
BLAKE2b-256 e117750cf5cdd20ad244b100e56788236b6eafaf5ebefbdede5b23d74ca436b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for primitivedotdev-0.4.0.tar.gz:

Publisher: python-release.yml on primitivedotdev/sdks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file primitivedotdev-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: primitivedotdev-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 141.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for primitivedotdev-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0d306539f9b8f56945105db1c020c54b67331be814df17e23d8dbd36c675a0fb
MD5 be36a3bbfff66f73950714045dc573bb
BLAKE2b-256 e4afbb248eb40d51c9f6310886092cc243c0786dd1f352a01113ab1dea6960d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for primitivedotdev-0.4.0-py3-none-any.whl:

Publisher: python-release.yml on primitivedotdev/sdks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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