> ## 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.

# Send Error Kind • AI Agent SDK

> SendErrorKind: Structured, machine-readable classification of *why* a send failed.

# SendErrorKind

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

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

Structured, machine-readable classification of *why* a send failed.

Carried on :class:`SendResult` so the retry loop, delivery router,
dead-target registry, DLQ and user-notice path can all reason about a
failure uniformly instead of substring-matching an English error string.

Members:
RATE\_LIMITED: Throttled by the platform (HTTP 429); retry after wait.
TARGET\_NOT\_FOUND: Chat/channel no longer exists (HTTP 404/410); the
whole target is permanently unreachable — do not retry, mark dead.
FORBIDDEN: Bot was kicked/blocked or lacks rights (HTTP 403); the
target is permanently unreachable — do not retry, mark dead.
AUTH\_FATAL: Bad/expired/revoked credential (HTTP 401); retrying the
same token is pointless — surface as a degraded state.
INVALID\_REQUEST: Malformed payload the platform rejects (HTTP 400);
retrying the identical request will fail again.
TRANSIENT: Network blip / 5xx / timeout; safe to retry with backoff.
UNKNOWN: Could not classify; treated as retryable to preserve the
historical default (do not silently drop a send we can't classify).

## Source

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