{
  "title": "Retry policy",
  "content": "* Retry per HTTP request, not per multi-step flow.\n* Preserve ordering by retrying only the current step.\n* Avoid duplicating non-idempotent operations.\n\n* Attempts: 3\n* Max delay cap: 30000 ms\n* Jitter: 0.1 (10 percent)\n* Provider defaults:\n  * Telegram min delay: 400 ms\n  * Discord min delay: 500 ms\n\n* Retries only on rate-limit errors (HTTP 429).\n* Uses Discord `retry_after` when available, otherwise exponential backoff.\n\n* Retries on transient errors (429, timeout, connect/reset/closed, temporarily unavailable).\n* Uses `retry_after` when available, otherwise exponential backoff.\n* Markdown parse errors are not retried; they fall back to plain text.\n\nSet retry policy per provider in `~/.openclaw/openclaw.json`:\n\n* Retries apply per request (message send, media upload, reaction, poll, sticker).\n* Composite flows do not retry completed steps.",
  "code_samples": [],
  "headings": [
    {
      "level": "h2",
      "text": "Goals",
      "id": "goals"
    },
    {
      "level": "h2",
      "text": "Defaults",
      "id": "defaults"
    },
    {
      "level": "h2",
      "text": "Behavior",
      "id": "behavior"
    },
    {
      "level": "h3",
      "text": "Discord",
      "id": "discord"
    },
    {
      "level": "h3",
      "text": "Telegram",
      "id": "telegram"
    },
    {
      "level": "h2",
      "text": "Configuration",
      "id": "configuration"
    },
    {
      "level": "h2",
      "text": "Notes",
      "id": "notes"
    }
  ],
  "url": "llms-txt#retry-policy",
  "links": []
}