Skip to main content

Sockudo Python HTTP Server SDK

High-performance Python server SDK for the Sockudo HTTP API. It publishes events, signs channel and user authentication payloads, validates webhooks, queries channel state, reads durable history, mutates versioned messages, and manages annotations.

Features

  • Sync and asyncio clients: Sockudo and AsyncSockudo
  • Persistent HTTP connection pooling via httpx, with HTTP/2 enabled by default
  • Pusher-compatible signed REST requests
  • Single, multi-channel, and batch publishing
  • Explicit and automatic idempotency keys for safe publish retries
  • Private, presence, user, and webhook authentication helpers
  • Channel state, presence users, durable history, and presence history APIs
  • Versioned message APIs: get, versions, update, delete, append
  • Annotation APIs: publish, list, delete
  • Operator controls for history reset/purge and presence-history reset
  • End-to-end encrypted channel auth, publish, batch publish, and webhook decrypt support for private-encrypted-* channels

Install

For apps, install the published package:

pip install sockudo-http-python

For contributors working inside this repository:

pip install -e server-sdks/sockudo-http-python[dev]

Quick Start

from sockudo_http import Config, Sockudo

sockudo = Sockudo(
    Config(
        app_id="app-id", key="app-key", secret="app-secret", host="127.0.0.1", port=6001
    )
)

result = sockudo.trigger("orders", "order.created", {"id": "ord_123"})
assert result.ok
sockudo.close()

Async:

from sockudo_http_python import AsyncSockudo, SockudoOptions

async with AsyncSockudo(
    "app-id",
    "app-key",
    "app-secret",
    options=SockudoOptions(host="127.0.0.1", port=6001),
) as sockudo:
    await sockudo.trigger("orders", "order.created", {"id": "ord_123"})

Idempotent Publishing

from sockudo_http_python import TriggerOptions

sockudo.trigger(
    "orders",
    "order.created",
    {"id": "ord_123"},
    TriggerOptions(idempotency_key="order-created-ord_123"),
)

sockudo.trigger(
    "orders", "order.created", {"id": "ord_124"}, TriggerOptions(idempotency_key=True)
)

Set SockudoOptions(auto_idempotency=True) to generate keys for publish and batch publish calls that omit one.

Target a single user channel:

sockudo.send_to_user("user-123", "notice", {"body": "hello"})

Authentication Helpers

from sockudo_http_python import PresenceUser

private_body = sockudo.authenticate("123.456", "private-orders")

presence_body = sockudo.authenticate(
    "123.456",
    "presence-room",
    PresenceUser("user-1", {"name": "Ada"}),
)

user_body = sockudo.authenticate_user("123.456", {"id": "user-1", "name": "Ada"})

Encrypted channel auth responses include shared_secret when encryption_master_key_base64 is configured:

encrypted = Sockudo(
    "app-id",
    "app-key",
    "app-secret",
    encryption_master_key_base64="base64-encoded-32-byte-key",
)

body = encrypted.authenticate("123.456", "private-encrypted-room")

Channel And History APIs

from sockudo_http_python import ChannelsParams, HistoryParams, PresenceHistoryParams

sockudo.list_channels(
    ChannelsParams(
        filter_by_prefix="presence-", info=["subscription_count", "user_count"]
    )
)
sockudo.get_channel_users("presence-room")
sockudo.get_channel_history("orders", HistoryParams(limit=50, direction="newest_first"))
sockudo.get_channel_presence_history("presence-room", PresenceHistoryParams(limit=50))

User Controls

Terminate all active connections for a user:

# Synchronous
sockudo.terminate_user_connections("user-123")

# Asynchronous
await async_sockudo.terminate_user_connections("user-123")

Force Reconnect User

Close all active connections for a user with code 4200, prompting clients to reconnect:

# Synchronous
sockudo.force_reconnect_user("user-123")

# Asynchronous
await async_sockudo.force_reconnect_user("user-123")

Versioned Messages And Annotations

from sockudo_http_python import MessageMutation, PublishAnnotationRequest

sockudo.get_message("orders", "msg:1")
sockudo.get_message_versions("orders", "msg:1")
sockudo.update_message("orders", "msg:1", MessageMutation(data={"status": "paid"}))
sockudo.append_message("orders", "msg:1", " appended text")
sockudo.delete_message("orders", "msg:1", MessageMutation(description="moderated"))

sockudo.publish_annotation(
    "orders",
    "msg:1",
    PublishAnnotationRequest(
        type="reactions:distinct.v1", name="like", client_id="user-1", count=1
    ),
)
sockudo.list_annotations("orders", "msg:1")

Webhooks

validity = sockudo.validate_webhook_signature(
    x_pusher_key, x_pusher_signature, raw_body
)
webhook = sockudo.parse_webhook(x_pusher_key, x_pusher_signature, raw_body)

If a webhook contains encrypted channel events and the client has an encryption master key, parse_webhook decrypts those event payloads.

Signed URIs

uri = sockudo.signed_uri(
    "GET", "/apps/app-id/channels", parameters={"filter_by_prefix": "presence-"}
)

The signing format matches Sockudo/Pusher REST auth: auth_key, auth_timestamp, auth_version, optional body_md5, and auth_signature over {METHOD}\n{PATH}\n{SORTED_QUERY}.

URL Configuration

sockudo = Sockudo.from_url("http://app-key:app-secret@127.0.0.1:6001/apps/app-id")

Metadata

Release files for sockudo-http-python 2.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sockudo-http-python 2.2.0
File Size Uploaded
sockudo_http_python-2.2.0.tar.gz 20.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sockudo-http-python 2.2.0
File Interpreter ABI Platform
sockudo_http_python-2.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 34.8 kB

Release files / sockudo_http_python-2.2.0.tar.gz

Download URL sockudo_http_python-2.2.0.tar.gz
Size 20.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0cc0438497db3dce0ea622a9aff954b42da5b043cc9a7fe94cbf237e9b67058c
BLAKE2b-256 checksum
How to use checksums
ef553973fa60e54f00bb348bf8918243f955e7222ce47e0d273bc79369da645e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.

Transparency log

Release files / sockudo_http_python-2.2.0-py3-none-any.whl

Download URL sockudo_http_python-2.2.0-py3-none-any.whl
Size 14.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b69fe5a8ef686527dd6153c2657822fd6b584f7caf46c110d79ee52aa2e35de3
BLAKE2b-256 checksum
How to use checksums
e642fdec7393233a24afb80d00bf6d5260fabd5a980f1f2822b433f5638d6e8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.2.0 This release

2 release files

2.1.0

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page