# Waits and questions

A wait is a pause for something the run cannot produce itself: a person’s answer, another system’s signal, or a moment in time. The turn keeps its place until the wait is answered.

Step: A step asks → Wait: The turn waits → Answer: The answer arrives → Step: The step continues

Waiting costs nothing: time spent waiting is not counted against a turn’s Duration, and the run survives restarts while it waits.

## Registered waits

| Wait | Answered by | Answer |
| --- | --- | --- |
| `Clarification` · intervention | A person | Text, or { "Declined": true, "Reason": "…" } to say no |
| `UserLocationRequired` · intervention | A person | Text naming where they are |
| `Signal` · signal | Another system | Any JSON |
| `Schedule` · schedule | The engine’s clock | { "status": "due" } at the moment the model named |

A decline is an answer like any other: the step receives it and the workflow decides what to do with it.

## What raises a wait

- **A Wait step.** The step puts the question you wrote to a person through a declared wait.
- **A model step.** A ModelCall that lists a wait in its Operations may call it and write the question itself. Clarification is offered to every model step whose output admits calls without being listed; every other wait reaches a model step only where it is listed.
- **An exhausted step.** A step with OnExhausted: Wait raises Clarification when its attempts or budget run out, saying what ran out and how much was spent.

## Declaring a wait

A wait a step names is declared in `Operations` under `Wait`, and the binding’s name is the registration’s name. An upload naming a wait that is not registered is refused.

```yaml
Operations:
  - Wait: Clarification
    Locator: embedded://momor.ai/services/tools/clarification
```

## Answering

A raised wait appears on the run’s event stream as `wait.<class>.raised`, for example `wait.intervention.raised`, carrying its `waitId`, the question and the schema the answer must match. Answer it with `POST /workflow/runs/{runId}/waits/{waitId}`. When a step is waiting on several things at once, it continues only once every one of them is answered.

- [Answer a question](/docs/workflows/api/answer-a-question/): The request, the answers each wait accepts, and the errors.

> **Who can answer**
> Waits are answered through the run’s API by the run’s owner: the signed-in person or the API key that started it. Momor does not send the question anywhere else yet, so a system that starts runs for other people delivers the question to them and posts their answer.

## While a turn waits

- **New requests.** A request arriving at the run follows the workflow’s Mode, exactly as if the turn were running.
- **Cancelling.** Cancelling the turn ends its waits. A late answer is refused with 410.
- **Advisories.** A model can also raise an advisory: a notice for the person that does not stop the run, recorded as advisory.raised.
