Python module guide

Dialpad client

An async wrapper for Dialpad users, groups, calls, SMS, webhooks, and live event state. This page covers the recommended workflows first, then the complete module API.

dialpad.py 1.3Async PythonREST + webhooks

Overview

The module exposes a high-level Client, resource objects such as User and CallCenter, and a lower-level client.endpoints interface. It uses aiohttp_ws.AiohttpResponse for HTTP and toolbox.CachedProperty for async caching.

Imports and setup: install requests and aiohttp, and make the distributed pmblue_update, toolbox, and aiohttp_ws modules importable. Importing dialpad calls pmblue_update.self_update(primary_mod=True), which can check the network, write an updated module and updater cache, or prompt to publish a locally newer/missing module. Dependencies also have import-time updater behavior. See the updater guide before importing in an unattended service.

Current changes in 1.3: webhook processing rejects invalid signatures; call events update the aggregate before invoking on_call; related call IDs are compared as strings; recording events accept several response formats and select an HTTPS URL; recording downloads check HTTP status.
Directory

Load users, departments, and contact centers, then resolve them by ID, email, or name.

Calling

Start outbound calls, ring calls, consult calls, and contact-center callbacks.

Messaging

Send SMS to as many as 10 recipients, optionally with media.

Events

Provision subscriptions, validate webhook JWTs, and update local call and agent state.

Async by default. Cached collections such as client.users, client.groups, and user.groups are awaitable properties: use await client.users, not client.users().

Quick start

  1. Create one client for the Dialpad environment.
  2. Optionally declare webhook subscriptions before initialization.
  3. Call initialize() once at application startup.
  4. Use high-level client or resource methods for normal work.
import asyncio
import os
from dialpad import Client, Subscription

async def run():
    client = Client(os.environ["DIALPAD_API_KEY"], sandbox=True)

    webhook = await client.create_webhook(
        "https://example.com/webhooks/dialpad",
        os.environ["DIALPAD_WEBHOOK_SECRET"],
    )
    webhook.add_subscription(Subscription.agent_status)
    webhook.add_subscription(Subscription.call)

    await client.initialize(verbose=True)

    user = await client.find_user("[email protected]")
    if user:
        await user.initiate_call(
            "+1 (202) 555-0123",
            custom_data="CRM lead 123",
        )

asyncio.run(run())

This example uses the sandbox. Set sandbox=False only for a client intended to use production. Calls, SMS, callbacks, and webhook reconciliation make remote changes when awaited.

Keep secrets out of source control. Load the API key and webhook secret from your deployment environment or secret manager. The module adds the API key as a bearer token on every API request.

Core concepts

Client

Configuration, resource caches, event handlers, and the high-level application interface.

Client._Endpoints

Thin wrappers around individual Dialpad REST endpoints. Available as client.endpoints.

User · Group · Department · CallCenter

Objects returned from directory requests. Resource methods automatically pass IDs and group context back to the client.

WebhookManager · JWT

Remote webhook reconciliation and inbound payload parsing.

CallLog · AgentStatus · Changelog

Typed webhook events. Processing them updates the client's local state.

Your codeClient_EndpointsDialpad API

Users and groups

The client loads a maximum of 50 users plus all returned departments and call centers. Deleted groups are omitted.

users = await client.users
departments = await client.departments
contact_centers = await client.contact_centers  # alias of call_centers
groups = await client.groups                    # departments + call centers

by_id = await client.get_user_from_id(123456)
by_email = await client.find_user("[email protected]")
by_name = await client.find_user("Ada Lovelace")

find_user() accepts a User, integer ID, numeric string, email address, or full name. Email and name comparisons are case-insensitive and ignore spaces. It returns None when nothing matches.

Group membership state

Department and CallCenter inherit mapping-like behavior from Group. Membership tests accept a user object or ID; indexed values are booleans representing the locally known active state.

support = await client.get_group_from_id(987654)
agent = await client.find_user("Ada Lovelace")

if agent is not None and support is not None and agent in support and support[agent]:
    print("Agent is active in Support")

if agent is not None:
    for group in await agent.groups:
        print(group.name, group.group_type)
Local snapshot: membership and availability are derived from directory responses and later webhook events. They are not a transactional read of Dialpad at the instant you access them.

Calls and callbacks

Phone numbers are normalized with toolbox.PhoneNumber(...).e164 before they are sent. The same operations are available from the client, a user, or a group. The following snippets assume the client has been initialized and directory lookups returned a user/group; check for None when using real input.

Initiate an outbound call

user = await client.find_user("[email protected]")
group = await client.get_group_from_id(987654)

await client.initiate_call(
    user,
    "(202) 555-0123",
    group=group,
    custom_data="customer=42",
)

# Equivalent convenience call
await user.initiate_call("202-555-0123", group=group)

user may be a User, integer ID, numeric string, or exact email address. group may be a Group, a group ID, {"group_id": ..., "group_type": ...}, or [group_id, group_type]. If supplied, custom_data must be a string.

Ring and consult calls

await user.initiate_call_via_ring(
    "+12025550123",
    group=group,
    is_consult=True,
    custom_data="warm transfer",
)

The ring variant posts to /call. With is_consult=True, the request includes Dialpad's consult-call flag.

Queue a callback

from dialpad import CallCenter

center = await client.get_group_from_id(987654)
if isinstance(center, CallCenter):
    await center.enqueue_callback("+12025550123")

SMS and media

SMS is currently exposed on the endpoint layer.

await client.endpoints.send_sms(
    "Your appointment is confirmed.",
    to_numbers=["+12025550123", "+12025550124"],
    user_id=123456,
    infer_country_code=False,
)

await client.endpoints.send_sms(
    "See attachment",
    to_number="+12025550123",
    media="receipt.png",
)
ArgumentRules
textRequired string.
to_number / to_numbersSupply one. A list may contain at most 10 recipients.
user_id, from_numberOptional sender selection.
sender_group_id, sender_group_typeOptional group sender. Type must be office, department, or callcenter.
infer_country_codeConverted to a boolean and included by default, including when false.
mediaBytes, base64 text, or a short file-path string. Encoded data must not exceed 500 KB.

Webhooks and subscriptions

A WebhookManager describes the desired remote webhook state. During initialization it reuses an exact URL-and-secret match or creates one, removes undesired subscriptions, and adds missing subscriptions.

manager = await client.create_webhook(WEBHOOK_URL, WEBHOOK_SECRET)
manager.add_subscription(Subscription.agent_status)
manager.add_subscription(Subscription.call)
manager.add_subscription(Subscription.changelog)

await client.initialize()
ConstantEndpointDefault request data
Subscription.agent_status/subscriptions/agent_statusagent_type: callcenter
Subscription.call/subscriptions/callcall_states: [all]
Subscription.changelog/subscriptions/changelogNo extra fields

manager.initialize() is idempotent for that manager instance after it becomes active. manager.delete() removes its remote webhook and marks the manager inactive.

Inbound event processing

Register callbacks

@client.event
async def on_agent_status(event):
    print(event.user_id, event.on_duty_status)

@client.event
async def on_call(event):
    print(event.call_id, event.state)

@client.event
async def on_change(event):
    print(event.action)

Handlers must use exactly one of those three names and must be async. on_call runs after call aggregation, so it can look up the updated call. on_agent_status and on_change run before their respective local-state updates. Exceptions in callbacks propagate to the caller of process().

Process the request

from aiohttp import web

async def dialpad_webhook_handler(request):
    try:
        event = await manager.process(request)
    except (ValueError, TypeError, IndexError, KeyError):
        return web.Response(status=400, text="Invalid webhook payload")

    if event is None:
        return web.Response(status=400, text="Unsupported event")

    return web.Response(text="ok")
HTTP bodyJWTtyped eventcall state, then on_call

Classification and state changes

Changelog

Selected when both action and additional_data exist. Refreshes or mutates relevant cached directory state for supported actions.

AgentStatus

Selected when availability_status exists. Updates group operator state and the matching user's duty fields.

CallLog

Selected when state and call_id exist. Merges related legs into a local Call using master, call, entry-point, and operator IDs normalized to strings. A missing master ID falls back to the call ID; get_call_from_id() resolves either the aggregate ID or an observed leg ID.

Signature enforcement: WebhookManager.process() parses the raw request text as a JWT and raises ValueError("Invalid Dialpad webhook signature") before callbacks or state changes when its HMAC-SHA256 comparison fails. Constructing JWT directly only records the result in verify; check it yourself in that lower-level path. These helpers do not validate JWT expiration, issuer, audience, or replay.

Recordings

recording and admin_recording events inspect recording_url, admin_call_recording_share_links, and compatible recording_details. The first HTTPS URL becomes a File; absent or unsupported URLs leave recording=None.

from dialpad import CallLog

# Use the event returned by the verified handler; process each event once.
if isinstance(event, CallLog) and event.recording is not None:
    await event.recording.download("recording.mp3")
    # Alternatively: recording_bytes = await event.recording.download()

File.download() calls raise_for_status() before writing. Its async context manager returns downloaded bytes and propagates exceptions from the block. Requests to recording URLs include the client's bearer token, so only use recording URLs from trusted, verified events.

Client API

Construction and lifecycle

Client(api_key, sandbox=True, asynchronous_clients=False)

Creates a client. Sandbox selects https://sandbox.dialpad.com/api/v2; production selects https://dialpad.com/api/v2. Set asynchronous_clients=True when other clients may independently change Dialpad state.

await initialize(verbose=False)

Warms group and user caches, then reconciles every registered webhook manager.

await force_update()

Expires and reloads call centers, departments, and users. It assumes all three cache entries already exist.

await create_webhook(url, secret) → WebhookManager

Creates a local manager. The remote webhook is created later during initialization.

Lookups and collections

await client.users

List of User; cached 600 seconds.

await client.departments

List of active Department; cached 1,800 seconds.

await client.call_centers / contact_centers

List of active CallCenter; cached 1,800 seconds. contact_centers is an alias.

await client.groups

New list containing departments followed by call centers.

await get_user_from_id(id) / find_user(value)

Resolve a user by ID or by a flexible user value.

await get_group_from_id(id) / get_department_from_id(id)

Resolve group resources. Returns None when absent.

await client.calls / get_call_from_id(id)

Access locally aggregated calls or resolve one by master/leg ID.

await client.webhooks / subscriptions

Remote webhook resources and the combined typed subscription lists.

Actions

await enqueue_callback(call_center_id, phone_number)

Accepts a CallCenter or raw ID and posts a normalized phone number.

await initiate_call(user, phone_number, group=None, custom_data=None)

Starts an outbound call through the user endpoint.

await initiate_call_via_ring(user, phone_number, group=None, is_consult=False, custom_data=None)

Starts a ring-style call and optionally marks it as consult.

@client.event

Registers on_agent_status, on_call, or on_change.

Resource objects

TypeImportant fieldsOperations
Userid, company_id, name, email, admin/online/availability and duty fields, raw datascreen_pop, both call methods, awaitable groups. Equality supports user, int, or string ID.
Groupid, name, raw data, operator-state mappingMembership/index access and both call methods.
DepartmentGroup fields; group_type="department"Group behavior plus internal cache removal.
CallCenterGroup fields; group_type="call_center"Group behavior plus enqueue_callback.
Webhookid, url, secret, raw dataAwaitable subscriptions, create_subscription, delete.
Subscriptionid, sub_type/type, webhook_iddelete.
JWTraw, parts, decoded data, verifyMapping-like item access, membership, and get.
CallMaster/current IDs, all call_ids, state, direction, external number, latest user, ordered call_logsUpdated internally as call events arrive.
CallLogCall IDs, state, direction, external number, custom data, optional recordingAggregates into Call.
AgentStatususer_id, duty status/reason, boolean on_duty, group statusesAwaitable user; updates users and groups.
Changelogaction, changed_by, raw dataAwaitable changed_by_obj; updates supported cached resources.
Fileurldownload(path_or_file=None) and async context manager.

JWT helpers

verify_jwt(msg, secret) → bool

Computes an HMAC-SHA256 signature over the first two JWT segments and compares it with the final segment.

JWT(raw, secret)

Decodes the payload, attempts to JSON-decode nested string values, and stores the signature result in verify. Non-string input raises TypeError.

Endpoint API

Use client.endpoints when the high-level interface does not expose the operation you need.

MethodRequestResult
list_webhooks()GET /webhooksList of Webhook
create_webhook(hook_url, secret=None)POST /webhooksWebhook
delete_webhook(id)DELETE /webhooks/{id}No explicit value
list_subscriptions(type)GET /subscriptions/{type}List of Subscription
create_subscription(type, endpoint_id)POST /subscriptions/{type}Subscription
delete_subscription(type, id)DELETE /subscriptions/{type}/{id}No explicit value
list_departments()GET /departmentsActive departments
list_call_centers()GET /callcentersActive call centers
list_users()GET /users?limit=50Users; no pagination
screen_pop(user_id, uri)POST /users/{id}/screenpopRaw response
enqueue_callback(...)POST /callbackRaw response
initiate_call(...)POST /users/{id}/initiate_callRaw response
initiate_call_via_ring(...)POST /callRaw response
send_sms(...)POST /smsRaw response

The internal Client._request(path, method="GET", **kwargs) adds authorization and accept headers, accepts absolute URLs for downloads, and supports GET, POST, and DELETE.

Caching and consistency

PropertyLifetimeNotes
users600 secondsAlso stored in _cache["users"] for a single-client configuration.
departments, call_centers, webhooks1,800 secondsResource directories.
Typed subscription properties1,800 secondsCombined by the uncached subscriptions property.
User.groups120 secondsResolves raw group details to current group objects.
AgentStatus.userDecorator defaultResolves the affected user.
Changelog.changed_by_obj240 secondsCurrently resolves only actors of type User.
callsProcess lifetimeAppend-only in-memory aggregation; no automatic eviction.

With asynchronous_clients=False, inner _cache entries can outlive the decorator expiration: a refreshed property may return the same list without another API request. The module mutates these local objects as events arrive. With it set to True, directory properties query more often, but some changelog paths also write directly into local cache attributes. Treat the option as a consistency hint, not a distributed cache protocol.

Errors, limits, and caveats

Important implementation behavior
  • list_users() requests limit=50 and does not follow pagination links.
  • _request() notices an error key in JSON but catches its own exception, so callers still receive the response. Check status and response content in production paths.
  • Malformed JWTs can raise parsing or indexing errors; invalid signatures raise ValueError. There is no built-in event deduplication or replay tracking.
  • force_update() uses private cache internals and assumes warmed cache entries.
  • New subscription cache insertion appears inverted: the new object is appended only when an object with the same ID already exists.
  • Webhook.delete() and asynchronous cache-removal branches access remove on awaitable properties and await normal list methods; those paths can fail with AttributeError or TypeError.
  • Agent events are detected through availability_status, while AgentStatus requires on_duty_status, on_duty_status_reason, and group_details.
  • File.download() closes a caller-supplied file object after writing.
  • Client._Endpoints._get_sub_info is defined without self; call it on the class as the module does.

Common exceptions

TypeError

Wrong user type, non-string custom data or SMS text, non-list recipients, unsupported media type, or non-string JWT input.

ValueError

User/group lookup failure, invalid group type, incomplete group context, too many SMS recipients, oversized media, unsupported subscription type, or an invalid webhook signature.

NameError

Unsupported event-handler name or internal subscription type.

Object handbook

The client owns API configuration and caches; directory resources point back to that client. Webhook managers connect incoming signed requests to event objects and update the same cached users, groups, and calls. Constructors that accept d expect a parsed response mapping, not an ID. Obtain resources from the client unless you deliberately need to parse fixture data.

Client and endpoint adapter

Client(api_key, sandbox=True, asynchronous_clients=False) creates local state without fetching directory data. Its public settings are api_key, sandbox, and asynchronous_clients; url derives the API base from the sandbox setting. endpoints is a Client._Endpoints instance bound to this client. live_calls is initialized as a separate list but is not populated by the call aggregation code; read await client.calls for tracked calls.

await initialize(verbose=False) loads departments, call centers, then users and initializes registered webhook managers. It returns None. await force_update() drops and reloads the three directory caches; use it only after initialization with the cache assumptions described above. Neither method starts an HTTP listener or background polling loop. There is no client close() method; request transport is delegated to the HTTP wrapper.

The endpoint adapter's list_* methods return resource lists. create_webhook(hook_url, secret=None) and create_subscription(sub_type, endpoint_id) return newly parsed resource objects. Deletion methods return None; they make a remote request when awaited. Calls, callbacks, screen pops, and SMS return raw responses. Await the operation first, then inspect its status_code, call raise_for_status(), or read json(). The endpoint adapter delegates missing attributes to its parent client.

User

User(d, c) requires directory fields including id, company_id, is_admin, is_online, is_available, first_name, last_name, license, and a nonempty emails list; c is the owning client. The object stores the first email as email, converts id to an integer, preserves data, and exposes computed name. Duty status and reason start as None and are populated by agent-status events.

await user.groups resolves the IDs in the user's original data["group_details"] to Department/CallCenter resources, with a 120-second decorator cache. await user.screen_pop(uri) asks Dialpad to display a URI for that user. await user.initiate_call(phone_number, group=None, custom_data=None) and await user.initiate_call_via_ring(phone_number, group=None, is_consult=False, custom_data=None) forward the user ID and return raw responses. These methods make remote changes. User equality compares IDs against another user, an integer, or a string.

Group, Department, and CallCenter

Group(d, c) parses integer id, name, and raw data; it starts with an empty operator-state mapping. Department(d, c) sets group_type="department". CallCenter(d, c) sets group_type="call_center", which outgoing call methods normalize to the API's callcenter.

user in group and group[user] accept either a User or ID and inspect locally tracked membership/availability. A missing indexed ID raises KeyError. Assignment and deletion should use IDs: group[user.id] = True and del group[user.id] modify only local state, without changing remote membership. User construction and webhook processing normally maintain this map for you.

await group.initiate_call(user, phone_number, custom_data=None) and the corresponding ring method supply this group automatically. await center.enqueue_callback(phone_number) is available on CallCenter and passes its ID to the client's callback method. Use concrete Department/CallCenter objects for calls: the base Group constructor does not assign group_type. Group removal helpers and destructors affect local cache membership; they are not API methods for deleting remote departments or call centers.

WebhookManager, Webhook, and Subscription

WebhookManager(url, secret, c) can be constructed directly, but await client.create_webhook(url, secret) also registers the manager for client initialization. Its client, url, and secret describe the desired connection; webhook begins as None and later refers to a remote Webhook. add_subscription(sub_type) accepts the three Subscription constants, avoids local duplicates, and returns None.

await manager.initialize() first matches a webhook by URL and secret, creates one if needed, and reconciles subscriptions. The first successful call returns its Webhook; subsequent calls return None when already active. Reconciliation may delete subscriptions on that matched remote webhook if they are absent from the manager's desired list. await manager.subscriptions requires initialization and delegates to its webhook. await manager.delete() marks the manager inactive and delegates remote deletion; the existing deletion caveat still applies.

Webhook(d, c) expects webhook JSON with hook_url, id, and signature; its adapter argument is normally client.endpoints. It exposes hook_url/url, id, secret, and data. await webhook.subscriptions filters the client's subscriptions by webhook ID. await webhook.create_subscription(sub_type) returns a Subscription and makes a remote change.

Subscription(d, sub_type, c) likewise normally receives the endpoint adapter. Its id, sub_type/type, and optional webhook_id identify the remote subscription. await subscription.delete() deletes it remotely and removes a matching entry from its typed local list, returning None. The class constants are plain strings: agent_status, call, and changelog.

JWT, CallLog, AgentStatus, and Changelog

JWT(raw, secret) takes token text and a shared secret, exposes raw, parts, partial_msg, parsed data, and boolean verify. Mapping access jwt[key], key in jwt, and jwt.get(key, default=None) reads the decoded payload. String field values that themselves contain JSON are decoded again. Construction alone does not enforce validity; manager.process(request) does.

CallLog(d, client=None) requires state and call_id. It exposes the master/entry-point/operator IDs, direction, external number, custom data, and optional recording. It falls back to call_id when the master ID is absent. AgentStatus(d, client=None) requires target ID, duty fields, and a group-details mapping; it exposes user_id, on_duty_status, on_duty_status_reason, and groups. on_duty is true for available, occupied, wrapup, and wrapup-end. await agent_event.user resolves a User or None.

Changelog(d, client=None) requires action, keeps data, and normalizes an absent/empty changed_by to None. await change.changed_by_obj resolves a user only when the actor type is exactly User; other types return None. Supported processing includes selected user/group refreshes, admin-flag changes, and local group deletion. Some actions, including operator_added, currently have no state-update implementation.

These constructors parse data without dispatching callbacks or updating client state. The normal input path is await manager.process(request), which verifies, classifies, dispatches, and processes the event. It returns the event object, or None for an unrecognized signed payload.

Call and File

Call(master_call_id) initializes an aggregate with id, master_call_id, call_id, state/direction unknown, empty call_ids/call_logs, and no external number/latest user. Processing appends logs in arrival order, remembers related IDs, and updates current fields. id stays at its construction value even if master_call_id later changes. latest_user_id updates for a target mapping whose type is exactly lowercase user. Aggregates are in-memory history; there is no sorting, deduplication, persistence, or eviction.

File(url, client) stores a URL and uses that client for an authenticated GET. await file.download(to_file=None) returns bytes with no destination, or writes to a path/open writable binary object and returns None. A supplied file object is closed after writing. async with file as data downloads bytes on entry and does not suppress block exceptions. The module does not stream large recordings to disk; it buffers the response.

Worked examples

Run the asynchronous helpers below from an existing event loop. Examples use sandbox configuration or an already configured client; lookup IDs and phone numbers are examples. Imports retain the updater behavior described earlier.

Return a directory snapshot for an application

async def directory_snapshot(client):
    await client.initialize()
    result = []
    for user in await client.users:
        memberships = []
        for group in await user.groups:
            active = group[user.id] if user.id in group else None
            memberships.append({
                "id": group.id,
                "name": group.name,
                "type": group.group_type,
                "active": active,
            })
        result.append({
            "id": user.id,
            "name": user.name,
            "email": user.email,
            "groups": memberships,
        })
    return result

This produces ordinary dictionaries for rendering or serializing. active=None means the local membership map has no status for that user; it does not prove the user is unavailable. The endpoint still fetches only its first 50 users.

Screen pop and send an SMS for a resolved user

async def notify_agent_and_customer(client, email, customer_number):
    agent = await client.find_user(email)
    if agent is None:
        raise LookupError("Agent was not found in the loaded directory")

    screen = await agent.screen_pop("https://example.com/customer/42")
    screen.raise_for_status()
    message = await client.endpoints.send_sms(
        "Your appointment is confirmed.",
        to_number=customer_number,
        user_id=agent.id,
        infer_country_code=False,
    )
    message.raise_for_status()
    return message.json()

This workflow performs two independent remote actions. A successful screen pop is not rolled back if SMS fails. Pass the SMS number in the expected international format; the SMS wrapper does not call the phone normalizer used by the call methods.

Inspect the updated call inside an event callback

def register_call_observer(client):
    @client.event
    async def on_call(event):
        aggregate = await client.get_call_from_id(event.call_id)
        if aggregate is None:
            return
        print({
            "master_call_id": aggregate.master_call_id,
            "current_call_id": aggregate.call_id,
            "state": aggregate.state,
            "related_ids": list(aggregate.call_ids),
            "events_received": len(aggregate.call_logs),
        })
        if event.recording is not None:
            # Process the returned bytes or choose a local destination.
            recording_bytes = await event.recording.download()
            print("Recording bytes:", len(recording_bytes))
    return on_call

Register this observer before processing incoming requests. The client stores one callback per event name, so registering another on_call replaces the prior callback. In version 1.3 the aggregate has already been updated when on_call runs. Downloading a recording inside the callback delays the webhook response; an application that needs immediate acknowledgment should place verified work in its own queue.

Connect a manager to an aiohttp application

import os
from aiohttp import web
from dialpad import Client, Subscription

async def create_app():
    client = Client(os.environ["DIALPAD_API_KEY"], sandbox=True)
    manager = await client.create_webhook(
        os.environ["DIALPAD_WEBHOOK_URL"],
        os.environ["DIALPAD_WEBHOOK_SECRET"],
    )
    manager.add_subscription(Subscription.call)
    register_call_observer(client)
    await client.initialize()

    async def receive(request):
        try:
            event = await manager.process(request)
        except (ValueError, TypeError, KeyError, IndexError):
            return web.Response(status=400, text="Invalid webhook")
        if event is None:
            return web.Response(status=400, text="Unsupported event")
        return web.Response(status=204)

    app = web.Application()
    app.router.add_post("/webhooks/dialpad", receive)
    return app

# In a dedicated server entry point:
# web.run_app(create_app(), port=8080)

Set the public webhook URL to the external address that reaches this route. Startup reconciles that URL/secret's remote subscriptions to the desired call subscription. The sample handler does not deduplicate deliveries; keep any application event-ID tracking outside this module.

Source reviewed 2026-09-20 against modules/dialpad.py version 1.3. Return values described as “raw response” are aiohttp_ws.AiohttpResponse objects.

Complete source API

Generated from modules/dialpad.py; version 1.3. Includes public functions, classes, directly declared methods, properties, and Python protocol methods. Conditional APIs may require optional dependencies. Inherited members and dynamically assigned attributes are explained in the guide where relevant.

Signatures and docstrings are extracted without importing or running the module. A property or AsyncProperty decorator changes how a member is accessed; see its decorators and the guide.

Classes and objects

Module functions

class Client

Source line 53

Construct: Client(api_key, sandbox=True, asynchronous_clients=False)

Fields assigned by the constructor: api_key, asynchronous_clients, endpoints, live_calls, sandbox. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

Client.__init__(self, api_key, sandbox=True, asynchronous_clients=False)

Source line 54

ParameterPassing conventionDefault / required
api_keypositional or keywordrequired
sandboxpositional or keywordTrue
asynchronous_clientspositional or keywordFalse
Client.event(self, func)

Source line 64

ParameterPassing conventionDefault / required
funcpositional or keywordrequired
async Client.calls(self)

Source line 83

Decorators: @toolbox.AsyncProperty

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.webhooks(self)

Source line 88

Decorators: @toolbox.CachedProperty(expire=1800)

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.departments(self)

Source line 99

Decorators: @toolbox.CachedProperty(expire=1800)

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.users(self)

Source line 110

Decorators: @toolbox.CachedProperty(expire=600)

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.get_user_from_id(self, i: str) -> 'User'

Source line 120

Retrieve a user object by their ID.

Args:
    i (str): The user ID to search for.

Returns:
    User: The user object matching the provided ID, or None if not found.
ParameterPassing conventionDefault / required
i: strpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

Return annotation: 'User'.

async Client.find_user(self, user: str) -> 'User'

Source line 134

ParameterPassing conventionDefault / required
user: strpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

Return annotation: 'User'.

async Client.get_call_from_id(self, i)

Source line 156

ParameterPassing conventionDefault / required
ipositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.call_centers(self)

Source line 165

Decorators: @toolbox.CachedProperty(expire=1800)

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.contact_centers(self)

Source line 176

Decorators: @toolbox.AsyncProperty

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.groups(self)

Source line 180

Decorators: @toolbox.AsyncProperty

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.get_group_from_id(self, i) -> 'Group/Department/CallCenter'

Source line 189

ParameterPassing conventionDefault / required
ipositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

Return annotation: 'Group/Department/CallCenter'.

async Client.get_department_from_id(self, i) -> 'Department'

Source line 194

ParameterPassing conventionDefault / required
ipositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

Return annotation: 'Department'.

async Client.agent_status_subscriptions(self)

Source line 200

Decorators: @toolbox.CachedProperty(expire=1800)

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.call_subscriptions(self)

Source line 211

Decorators: @toolbox.CachedProperty(expire=1800)

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.changelog_subscriptions(self)

Source line 222

Decorators: @toolbox.CachedProperty(expire=1800)

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.subscriptions(self)

Source line 233

Decorators: @toolbox.AsyncProperty

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

Client.url(self)

Source line 278

Decorators: @property

No caller-supplied parameters are declared.

async Client.create_webhook(self, url, secret)

Source line 284

ParameterPassing conventionDefault / required
urlpositional or keywordrequired
secretpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.initialize(self, verbose=False)

Source line 289

ParameterPassing conventionDefault / required
verbosepositional or keywordFalse

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.force_update(self)

Source line 308

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.enqueue_callback(self, call_center_id, phone_number)

Source line 323

ParameterPassing conventionDefault / required
call_center_idpositional or keywordrequired
phone_numberpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.initiate_call(self, user, phone_number, group=None, custom_data=None)

Source line 328

ParameterPassing conventionDefault / required
userpositional or keywordrequired
phone_numberpositional or keywordrequired
grouppositional or keywordNone
custom_datapositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client.initiate_call_via_ring(self, user, phone_number, group=None, is_consult=False, custom_data=None)

Source line 372

ParameterPassing conventionDefault / required
userpositional or keywordrequired
phone_numberpositional or keywordrequired
grouppositional or keywordNone
is_consultpositional or keywordFalse
custom_datapositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

class Client._Endpoints

Source line 419

Construct: Client._Endpoints(c)

Declared functions, properties, and nested objects:

Client._Endpoints.__init__(self, c)

Source line 420

ParameterPassing conventionDefault / required
cpositional or keywordrequired
Client._Endpoints.__getattr__(self, name)

Source line 422

ParameterPassing conventionDefault / required
namepositional or keywordrequired
async Client._Endpoints.list_webhooks(self)

Source line 424

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.create_webhook(self, hook_url, secret=None)

Source line 433

ParameterPassing conventionDefault / required
hook_urlpositional or keywordrequired
secretpositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.delete_webhook(self, id)

Source line 443

ParameterPassing conventionDefault / required
idpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.list_subscriptions(self, sub_type)

Source line 455

ParameterPassing conventionDefault / required
sub_typepositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.create_subscription(self, sub_type, endpoint_id)

Source line 465

ParameterPassing conventionDefault / required
sub_typepositional or keywordrequired
endpoint_idpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.delete_subscription(self, sub_type, id)

Source line 490

ParameterPassing conventionDefault / required
sub_typepositional or keywordrequired
idpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.list_departments(self)

Source line 494

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.list_call_centers(self)

Source line 506

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.list_users(self)

Source line 518

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.screen_pop(self, i, uri)

Source line 527

ParameterPassing conventionDefault / required
ipositional or keywordrequired
uripositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.enqueue_callback(self, call_center_id, phone_number)

Source line 534

ParameterPassing conventionDefault / required
call_center_idpositional or keywordrequired
phone_numberpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.initiate_call(self, user_id, phone_number, group_type=None, group_id=None, custom_data=None)

Source line 542

ParameterPassing conventionDefault / required
user_idpositional or keywordrequired
phone_numberpositional or keywordrequired
group_typepositional or keywordNone
group_idpositional or keywordNone
custom_datapositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.initiate_call_via_ring(self, user_id, phone_number, group_type=None, group_id=None, is_consult=False, custom_data=None)

Source line 566

ParameterPassing conventionDefault / required
user_idpositional or keywordrequired
phone_numberpositional or keywordrequired
group_typepositional or keywordNone
group_idpositional or keywordNone
is_consultpositional or keywordFalse
custom_datapositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Client._Endpoints.send_sms(self, text, to_number=None, to_numbers=None, user_id=None, from_number=None, sender_group_id=None, sender_group_type=None, infer_country_code=False, media=None)

Source line 594

ParameterPassing conventionDefault / required
textpositional or keywordrequired
to_numberpositional or keywordNone
to_numberspositional or keywordNone
user_idpositional or keywordNone
from_numberpositional or keywordNone
sender_group_idpositional or keywordNone
sender_group_typepositional or keywordNone
infer_country_codepositional or keywordFalse
mediapositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

class User

Source line 660

Construct: User(d, c)

Fields assigned by the constructor: company_id, data, email, first_name, id, is_admin, is_available, is_online, last_name, license, on_duty_status, on_duty_status_reason. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

User.__init__(self, d, c)

Source line 661

ParameterPassing conventionDefault / required
dpositional or keywordrequired
cpositional or keywordrequired
User.__eq__(self, other)

Source line 705

ParameterPassing conventionDefault / required
otherpositional or keywordrequired
User.name(self)

Source line 714

Decorators: @property

No caller-supplied parameters are declared.

async User.screen_pop(self, uri)

Source line 717

ParameterPassing conventionDefault / required
uripositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async User.initiate_call(self, phone_number, group=None, custom_data=None)

Source line 720

ParameterPassing conventionDefault / required
phone_numberpositional or keywordrequired
grouppositional or keywordNone
custom_datapositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async User.initiate_call_via_ring(self, phone_number, group=None, is_consult=False, custom_data=None)

Source line 722

ParameterPassing conventionDefault / required
phone_numberpositional or keywordrequired
grouppositional or keywordNone
is_consultpositional or keywordFalse
custom_datapositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async User.groups(self)

Source line 726

Decorators: @toolbox.CachedProperty(expire=120)

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

class Group

Source line 739

Construct: Group(d, c)

Fields assigned by the constructor: data, id, name. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

Group.__init__(self, d, c)

Source line 740

ParameterPassing conventionDefault / required
dpositional or keywordrequired
cpositional or keywordrequired
Group.__setitem__(self, k, v)

Source line 746

ParameterPassing conventionDefault / required
kpositional or keywordrequired
vpositional or keywordrequired
Group.__getitem__(self, k)

Source line 748

ParameterPassing conventionDefault / required
kpositional or keywordrequired
Group.__delitem__(self, k)

Source line 752

ParameterPassing conventionDefault / required
kpositional or keywordrequired
Group.__contains__(self, other)

Source line 754

ParameterPassing conventionDefault / required
otherpositional or keywordrequired
async Group.initiate_call(self, user, phone_number, custom_data=None)

Source line 777

ParameterPassing conventionDefault / required
userpositional or keywordrequired
phone_numberpositional or keywordrequired
custom_datapositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Group.initiate_call_via_ring(self, user, phone_number, is_consult=False, custom_data=None)

Source line 779

ParameterPassing conventionDefault / required
userpositional or keywordrequired
phone_numberpositional or keywordrequired
is_consultpositional or keywordFalse
custom_datapositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

class Department(Group)

Source line 785

Construct: Department(d, c)

Fields assigned by the constructor: group_type. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

Department.__init__(self, d, c)

Source line 786

ParameterPassing conventionDefault / required
dpositional or keywordrequired
cpositional or keywordrequired
Department.__del__(self)

Source line 789

No caller-supplied parameters are declared.

class CallCenter(Group)

Source line 805

Construct: CallCenter(d, c)

Fields assigned by the constructor: group_type. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

CallCenter.__init__(self, d, c)

Source line 806

ParameterPassing conventionDefault / required
dpositional or keywordrequired
cpositional or keywordrequired
CallCenter.__del__(self)

Source line 809

No caller-supplied parameters are declared.

async CallCenter.enqueue_callback(self, phone_number)

Source line 824

ParameterPassing conventionDefault / required
phone_numberpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

class Subscription

Source line 830

Construct: Subscription(d, sub_type, c)

Fields assigned by the constructor: data, id, sub_type, type, webhook_id. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

Subscription.__init__(self, d, sub_type, c)

Source line 835

ParameterPassing conventionDefault / required
dpositional or keywordrequired
sub_typepositional or keywordrequired
cpositional or keywordrequired
async Subscription.delete(self)

Source line 848

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

class Webhook

Source line 869

Construct: Webhook(d, c)

Fields assigned by the constructor: data, hook_url, id, secret, url. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

Webhook.__init__(self, d, c)

Source line 870

ParameterPassing conventionDefault / required
dpositional or keywordrequired
cpositional or keywordrequired
async Webhook.delete(self)

Source line 880

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Webhook.subscriptions(self)

Source line 885

Decorators: @toolbox.AsyncProperty

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async Webhook.create_subscription(self, sub_type)

Source line 892

ParameterPassing conventionDefault / required
sub_typepositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

verify_jwt(msg, secret)

Source line 896

ParameterPassing conventionDefault / required
msgpositional or keywordrequired
secretpositional or keywordrequired
class JWT

Source line 908

Construct: JWT(raw, secret)

Fields assigned by the constructor: data, partial_msg, parts, raw, verify. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

JWT.__init__(self, raw, secret)

Source line 909

ParameterPassing conventionDefault / required
rawpositional or keywordrequired
secretpositional or keywordrequired
JWT.__getitem__(self, k)

Source line 945

ParameterPassing conventionDefault / required
kpositional or keywordrequired
JWT.__contains__(self, k)

Source line 947

ParameterPassing conventionDefault / required
kpositional or keywordrequired
JWT.get(self, k, default=None)

Source line 949

ParameterPassing conventionDefault / required
kpositional or keywordrequired
defaultpositional or keywordNone
class WebhookManager

Source line 956

Construct: WebhookManager(url, secret, c)

Fields assigned by the constructor: client, secret, url, webhook. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

WebhookManager.__init__(self, url, secret, c)

Source line 957

ParameterPassing conventionDefault / required
urlpositional or keywordrequired
secretpositional or keywordrequired
cpositional or keywordrequired
async WebhookManager.initialize(self, verbose=False)

Source line 965

ParameterPassing conventionDefault / required
verbosepositional or keywordFalse

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

WebhookManager.add_subscription(self, sub_type)

Source line 994

ParameterPassing conventionDefault / required
sub_typepositional or keywordrequired
async WebhookManager.subscriptions(self)

Source line 1001

Decorators: @toolbox.AsyncProperty

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async WebhookManager.delete(self)

Source line 1004

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async WebhookManager.process(self, r)

Source line 1008

ParameterPassing conventionDefault / required
rpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

class File

Source line 1029

Construct: File(url, client)

Fields assigned by the constructor: url. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

File.__init__(self, url, client)

Source line 1030

ParameterPassing conventionDefault / required
urlpositional or keywordrequired
clientpositional or keywordrequired
async File.download(self, to_file=None)

Source line 1033

ParameterPassing conventionDefault / required
to_filepositional or keywordNone

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async File.__aenter__(self)

Source line 1043

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

async File.__aexit__(self, exc_type, exc_value, traceback)

Source line 1045

ParameterPassing conventionDefault / required
exc_typepositional or keywordrequired
exc_valuepositional or keywordrequired
tracebackpositional or keywordrequired

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

class Call

Source line 1051

Construct: Call(master_call_id)

Fields assigned by the constructor: call_id, call_ids, call_logs, direction, external_number, id, latest_user_id, master_call_id, state. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

Call.__init__(self, master_call_id)

Source line 1052

ParameterPassing conventionDefault / required
master_call_idpositional or keywordrequired
class CallLog

Source line 1091

Construct: CallLog(d, client=None)

Fields assigned by the constructor: call_id, client, custom_data, data, direction, entry_point_call_id, external_number, id, master_call_id, operator_call_id, recording, state. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

CallLog.__init__(self, d, client=None)

Source line 1092

ParameterPassing conventionDefault / required
dpositional or keywordrequired
clientpositional or keywordNone
class AgentStatus

Source line 1146

Construct: AgentStatus(d, client=None)

Fields assigned by the constructor: client, data, groups, on_duty, on_duty_status, on_duty_status_reason, user_id. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

AgentStatus.__init__(self, d, client=None)

Source line 1147

ParameterPassing conventionDefault / required
dpositional or keywordrequired
clientpositional or keywordNone
async AgentStatus.user(self)

Source line 1164

Decorators: @toolbox.CachedProperty

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.

class Changelog

Source line 1177

Construct: Changelog(d, client=None)

Fields assigned by the constructor: action, changed_by, client, data. Some assignments may be conditional; see the object guide for meaning and lifecycle.

Declared functions, properties, and nested objects:

Changelog.__init__(self, d, client=None)

Source line 1178

ParameterPassing conventionDefault / required
dpositional or keywordrequired
clientpositional or keywordNone
async Changelog.changed_by_obj(self)

Source line 1191

Decorators: @toolbox.CachedProperty(expire=240)

No caller-supplied parameters are declared.

Declared with async def. Normal calls return an awaitable, or an async generator if the body yields. Decorated properties may be accessed differently; follow the object guide.