# Parks on a 2FA code. Picks up from its checkpoint.

Some steps only you can finish: a one-time code, a captcha, an approval. Kaabist pauses the run right there and emails a link to you, or to the teammate or customer you choose. Once they answer, the program continues from its last checkpoint. Nothing starts over.

## Ask where the flow needs it

Put an await_input step where the site asks for something only you (or your customer) have. The browser stays open for a few minutes in case the answer comes quickly, and the job keeps waiting until the expiry you set: 24 hours by default, 7 days at most.

```
{ "await_input": {
    "name": "otp",
    "type": "secret",
    "ttl": "5m",
    "expires": "24h",
    "collect": "hosted"
} },
{ "fill": "#otp", "value": "{{vars.otp}}" }
```

## Answer from a link, or from your code

With collect set to hosted, Kaabist emails a link to the address you choose: yours, a teammate's or your customer's. They open a page on app.kaab.ist, see what the run is waiting for, and type the answer. Your own code can answer instead, with one call.

```
curl -X POST https://api.kaab.ist/v1/jobs/job_8KqV2/input \
  -H "Authorization: Bearer $KAAB_API_KEY" \
  -d '{"otp": "481207"}'
```

## Checkpoints, not restarts

A checkpoint saves the browser's storage, the URL, the step and the variables. If the browser has closed by the time the answer arrives, Kaabist rebuilds the context from the checkpoint and carries on from the step after it.

```
{ "click": { "role": "button", "name": "Sign in" } },
{ "checkpoint": "after_login" }
```

## When the unexpected happens

An unknown page, a button that moved or a captcha pauses the run as needs attention, with a snapshot, a screenshot and suggested fixes. You can take over the live browser from your panel and continue, apply a fix, or retry from a named checkpoint.

```
curl -X POST https://api.kaab.ist/v1/jobs/job_8KqV2/resume \
  -H "Authorization: Bearer $KAAB_API_KEY" \
  -d '{"retry_from": "after_login"}'
```

## Questions

### How long does a paused run wait?

A planned wait (await_input) lasts until its expiry: 24 hours by default, up to 7 days. An unplanned stop (needs attention) keeps its checkpoint for 7 days.

### Does a paused run use credits while it waits?

No. A paused run holds no reserved credits; it reserves again when it resumes.

### Who can answer a hosted page?

Whoever you send the link to: you, a teammate, your customer. They need no Kaabist account, and the page shows only what the run is waiting for. Nobody at Kaabist answers for you.
