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

# Retries and uncertain outcomes

> Distinguish execution failure, delivery retry and an effect awaiting confirmation.

A retry is a new attempt to achieve the same business result. Before enabling it, decide how repeated calls identify that operation and where the outcome can be verified.

## Explore the behavior

Next step

<ol />

Step  of . . .

Illustration only. Select a step to inspect it or return to the start.

## Three different situations

| Situation | What to do |
| - | - |
| Job reaches terminal `ERROR` | The configured retry policy may create a child attempt. |
| Job is waiting for a concurrency slot | Retry admission; this is not a failed business attempt. |
| HTTP timeout or interrupted write | Inspect durable evidence or the destination before repeating the effect. |

## Job retry policy

Set the following object under a template's `options.retry`:

```json theme={null}
{
  "enabled": true,
  "maxAttempts": 3,
  "minBackoffSeconds": 30,
  "maxBackoffSeconds": 300,
  "maxDoublings": 3,
  "bypassConcurrencyOnRetry": false
}
```

`maxAttempts` includes the original attempt, so this allows two retries. A failed Job remains in history and its child carries retry lineage. Cancellation, success and expiration do not create automatic retry children.

| Field | Default | Meaning |
| - | - | - |
| `enabled` | `false` | Enables automatic retry on terminal error. |
| `maxAttempts` | Unbounded when omitted or null and retry is enabled | Total attempts; a configured finite value is at least 2. |
| `minBackoffSeconds` | 30 | Initial delay before jitter; at least 1 and no greater than the maximum. |
| `maxBackoffSeconds` | 3600 | Maximum delay; 60 seconds to 30 days. |
| `maxDoublings` | 5 | Exponential doublings before linear growth; 0–16. |
| `bypassConcurrencyOnRetry` | `false` | Whether automatic retry children bypass template admission. |

## Reconcile uncertain effects

| What the destination confirms | Next action |
| - | - |
| The operation committed | Return its existing receipt. |
| No effect occurred | Retry with the same operation identity and the configured policy. |
| The effect is still unknown | Record uncertainty and reconcile it before repeating an irreversible action. |

A disconnected caller cannot establish whether a remote mutation committed. Keep its operation key and receipt, query the destination or durable business record, and classify the result as confirmed success, confirmed failure or still unknown.

Do not turn unknown into zero, an empty dataset or an automatic second payment. [Idempotency](https://docs.revoengine.com/patterns/idempotency.md) makes retries safer, while [Job history](https://docs.revoengine.com/operate/jobs.md#read-attempt-status-and-job-result) shows what each attempt actually established.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.