OpenApp SDKs

Typed SDKs for your stack. Same wire, same behavior.

Idiomatic clients for automation, PMS integration, and physical access orchestration. Full coverage of the public OpenApp API, generated from the same contract that powers the reference — so types match the wire, always.

Available SDKs

All SDKs share the same wire contract, error model, and authentication scheme as the public OpenApp API.

Python
Available

Async-first client (AsyncClient) plus a synchronous facade (Client), typed via py.typed, with optional Pydantic v2 integration.

Rust
Available

Async Client built on openapp-sdk-core. Published to crates.io as openapp-sdk.

TypeScript / Node
Available

OpenAPI-generated types plus an async AsyncClient over the shared core bridge. Published as @tomers/openapp-sdk.

Go
Available

OpenAPI-generated client with transport through openapp-sdk-core for consistent auth, retries, and error mapping.

On the roadmap
Planned

Additional languages under consideration:

  • .NET (C#)
  • Ruby
  • PHP

Need another language? Tell us which one.

What you get

Every OpenApp SDK is designed around the same principles, so you can reach for whichever language fits your stack without giving up ergonomics or safety. The sample on the right creates a time-bound guest invite and sends it by email or SMS — same program in Python, TypeScript, Rust, and Go.

  • Batteries included
    Authentication, automatic retries with backoff, and structured telemetry are handled for you out of the box.
  • Typed, always current
    Idiomatic types for every resource and response, generated from the same contract that powers our API reference — so your editor's autocomplete is never behind the API.
  • Consistent across languages
    The same authentication, retry, and error-handling behavior across every official SDK. Learn one, know them all.
guest invitations
"""Create a time-bound access invite for guests."""

# SDK docs: https://openapp.house/docs/sdk/python/

from openapp_sdk import Client

# Replace the placeholder values below with your org's values from the dashboard.
# OPENAPP_API_KEY: generate at https://openapp.house/dashboard/resources/api-keys
OPENAPP_API_KEY = (
    "https://openapp.house_openapp_9kHWAeFWbMqPg0hMKshNGba7scA6mfmISG7mgI7Eok8"
)
ORG_ID = "01KSYAX0BS1K7Y6R997XE1EWHY"
INTEGRATION_NAME = "Virtual Access Demo"  # name shown in the dashboard
PORTAL_NAME = "Lobby Portal"  # name shown in the dashboard
EXPIRES_IN = "1w"  # One week; you can also set exact dates with valid_from / valid_to.


def main() -> None:
    client = Client.connect(api_key=OPENAPP_API_KEY, org_id=ORG_ID)
    integration = client.integrations.get_by_name(INTEGRATION_NAME)
    portal = client.integrations.get_access_portal_by_name(
        integration["id"], PORTAL_NAME
    )
    invite = client.integrations.create_access_invite(
        integration["id"],
        portal_ids=[portal["id"]],
        name="Year-end celebration",
        expires_in=EXPIRES_IN,
        max_uses=50,
        invitee_message={"en": "Welcome — use this link during the party hour."},
    )
    # Share this URL with your guests.
    print(invite["invite_url"])


if __name__ == "__main__":
    main()

Ready to build?

Grab an API key from the dashboard, install the SDK, and you're shipping. Questions, roadmap feedback, or want early access to a new language binding? Get in touch.