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.5.0.tar.gz (84.4 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.5.0-py3-none-any.whl (141.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for primitivedotdev-0.5.0.tar.gz
Algorithm Hash digest
SHA256 47971395318ab3a6231ced6e88ae4a7f385985ba177d1e5b94b8876937ec2ca1
MD5 e4c776ccf183c9925752d0dc1e661eae
BLAKE2b-256 f74c0e4814944b56f8fc0de8634b2a0f6463b416acfbe5de2d321fe2828ce95e

See more details on using hashes here.

Provenance

The following attestation bundles were made for primitivedotdev-0.5.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.5.0-py3-none-any.whl.

File metadata

  • Download URL: primitivedotdev-0.5.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.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3d7550efb0fd37b5c717b454cef58fb90336992e1b91cd2b0837f07c68d5b4ca
MD5 6770c3a7ea0c18abea52fc1366f828a7
BLAKE2b-256 4d061b21f62a4e95224f31bb3642532c1b52dac31e8f794e6736abe79707b5e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for primitivedotdev-0.5.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