> ## Documentation Index
> Fetch the complete documentation index at: https://praison.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Platform Capabilities • AI Agent SDK

> PlatformCapabilities: Platform-specific capabilities descriptor for bot adapters.

# PlatformCapabilities

> Defined in the [**protocols**](../modules/protocols) module.

<Badge color="blue">AI Agent</Badge>

Platform-specific capabilities descriptor for bot adapters.

Declares what a messaging platform can do, enabling the shared delivery
machinery to apply features like streaming, rate limiting, and chunking
uniformly across all platforms.

Attributes:
max\_message\_length: Maximum message length in the platform's unit
length\_unit: Unit for message length ("codepoints" or "utf16")
supports\_edit: Whether the platform supports in-place message edits (for streaming)
supports\_typing: Whether the platform supports typing indicators
markdown\_dialect: Markdown flavor the platform uses (e.g., "markdown", "telegram\_markdown\_v2")
needs\_rate\_limit: Whether the platform needs rate limiting
edit\_interval\_ms: Minimum milliseconds between message edits (for streaming)
max\_files\_per\_message: Maximum number of file attachments per message
max\_file\_size\_mb: Maximum file size in megabytes
supported\_file\_types: List of supported file extensions/mime types
accepts\_webhooks: Whether the platform delivers inbound messages via webhook
verifies\_webhook\_signature: Whether the adapter verifies inbound webhook
authenticity. Adapters that accept webhooks MUST set this True and
expose a `webhook_verifier` so central ingress can enforce it
fail-closed.
reconciles\_unknown\_send: Whether the adapter can confirm whether a prior
send attempt actually landed (e.g. via a provider message-status
lookup keyed on the idempotency key). When True the durable outbox
reconciles an in-flight (`sending`) entry on restart before
re-dispatch, upgrading delivery from at-least-once to
effectively-once. When False, delivery remains at-least-once and a
crash mid-send may re-send the message.
supports\_media: Whether the adapter can attach/upload media files on
outbound sends (photos, documents). When False, the gateway's
delivery router degrades gracefully and reports media as not
attached rather than silently dropping it.
supports\_idempotency\_token: Whether the transport accepts a
provider-level idempotency token so the platform itself
de-duplicates a retried send. This is an informational capability
descriptor only; the durable outbox does not forward a token on
resend, so adapters relying on provider-side dedupe should also set
`reconciles_unknown_send` to get effectively-once delivery.

## Properties

<ResponseField name="max_message_length" type="int">
  No description available.
</ResponseField>

<ResponseField name="length_unit" type="str">
  No description available.
</ResponseField>

<ResponseField name="supports_edit" type="bool">
  No description available.
</ResponseField>

<ResponseField name="supports_typing" type="bool">
  No description available.
</ResponseField>

<ResponseField name="markdown_dialect" type="str">
  No description available.
</ResponseField>

<ResponseField name="needs_rate_limit" type="bool">
  No description available.
</ResponseField>

<ResponseField name="edit_interval_ms" type="int">
  No description available.
</ResponseField>

<ResponseField name="max_files_per_message" type="int">
  No description available.
</ResponseField>

<ResponseField name="max_file_size_mb" type="int">
  No description available.
</ResponseField>

<ResponseField name="supported_file_types" type="List[str]">
  No description available.
</ResponseField>

<ResponseField name="accepts_webhooks" type="bool">
  No description available.
</ResponseField>

<ResponseField name="verifies_webhook_signature" type="bool">
  No description available.
</ResponseField>

<ResponseField name="reconciles_unknown_send" type="bool">
  No description available.
</ResponseField>

<ResponseField name="supports_idempotency_token" type="bool">
  No description available.
</ResponseField>

<ResponseField name="supports_media" type="bool">
  No description available.
</ResponseField>

<Accordion title="Internal & Generic Methods">
  * **from\_dict**: Create from dictionary.
  * **to\_dict**: Convert to dictionary.
</Accordion>

## Source

<Card title="View on GitHub" icon="github" href="https://github.com/MervinPraison/PraisonAI/blob/main/src/praisonai-agents/praisonaiagents/bots/protocols.py#L72">
  `praisonaiagents/bots/protocols.py` at line 72
</Card>
