# Retry, Replay and Cancel

> Fix COD Order Calls by hand - retry a call now, call a settled order again, cancel a job, and replay a store webhook event - from the Orders screen, the Events tab or the API.

Source: https://edesy.in/docs/order-calls/orders/retry-replay-cancel

You can step in on any order. **Retry now** moves the next call up to right away, or calls a settled order again when it ended unreachable, no input, expired or update failed. **Cancel job** stops calling an order that is still scheduled. **Replay** processes a store webhook event again from the Events tab.

## Retry now

On an order in the Orders screen:

| Order is | Button | What happens |
|---|---|---|
| Scheduled | **Retry now** | The next attempt is moved to now |
| Settled as `unreachable`, `no_input`, `expired` or `action_failed` | **Call again now** | The order goes back to Scheduled with one more attempt, and is called now. If its give-up time has passed, it gets another 24 hours |
| Settled as `confirmed` or `cancelled`, skipped or cancelled | | Can't be retried |

The timeline notes "retry requested from the portal".

## Cancel a job

**Cancel job** stops calling an order. It works while the order is Scheduled (before the first call or between attempts). The order moves to Cancelled with "cancelled from the portal", and no more calls are made. A call already in progress is not hung up.

To stop calls for an order automatically, send `order.cancelled` or `order.paid` from your store. See [Store Events](https://edesy.in/docs/order-calls/connect-your-store/store-events).

## Replay an event

In the store's **Events** tab, open an event and press **Replay**. We process the stored delivery again as if it had just arrived. Use it after you fix a call rule, for example when an order was skipped because no rule was enabled.

Replay does not call an order twice for the same rule. If a job already exists for that order and rule, the event is recorded as "already handled".

## Search and filters

The Orders screen filters by state, outcome and call rule, and searches by order name, number or phone. It shows when each order was received, the attempts made and the next attempt time.

## Over the API

The same actions are on the REST API at `https://voice-api.edesy.in/v1`, authenticated with `Authorization: Bearer <api key>`:

| Method | Path | What it does |
|---|---|---|
| `GET` | `/ivr/commerce/jobs` | List orders. Filters: `state`, `outcome`, `automation_id`, `q`, `page`, `per_page` |
| `GET` | `/ivr/commerce/jobs/:id` | One order with its timeline and calls |
| `POST` | `/ivr/commerce/jobs/:id/retry-now` | Retry now. `409 job_not_retryable` when it can't be retried |
| `POST` | `/ivr/commerce/jobs/:id/cancel` | Cancel a scheduled job |
| `GET` | `/ivr/commerce/events` | List webhook events. Filters: `connection_id`, `status`, `page`, `per_page` |
| `GET` | `/ivr/commerce/events/:id` | One event with headers and body |
| `POST` | `/ivr/commerce/events/:id/replay` | Replay an event |

Errors use the shape `{"error": {"code": "...", "message": "..."}}`.
