# `step.encryption_key_required`

Actions make several changing calls but no key encrypts their answers.

Area 12, [Jobs and events](../topics/jobs-and-events.md); not declinable; the next step is usually the human's.

The answers of an action with several changing calls are kept, encrypted,
until it commits, so `app.jadpo` names the `SigningKey` setting they are
encrypted with. The error is reported once, at the
first such action:








```jadpo
use app { sheets }
use bakery/failures { SheetNotKept }
use bakery/events { PricesChanged }

/// Keeps a supplier's new prices as a sheet, then a copy for the
/// accountant.
action file_prices(event: PricesChanged) fails SheetNotKept -> Unit {
    var sheet: File = attempt sheets.put(encoding.to_utf8(event.price_list), FileType.csv) {
        storage_full: SheetNotKept
    }
    var invoice_copy: File = attempt sheets.put(encoding.to_utf8(event.price_list), FileType.csv) {
        storage_full: SheetNotKept
    }
    assert sheet != invoice_copy
}
```

```text
error: `file_prices` makes 2 changing calls, but `app.jadpo` names no key to encrypt their answers with
 --> domains/bakery/actions/file_prices.jadpo:8:31
  |
8 |     var sheet: File = attempt sheets.put(encoding.to_utf8(event.price_list), FileType.csv) {
  |                               ^^^^^^^^^^ its answers are kept
  reason: Each answer of an action with several changing calls is kept, encrypted, until the action commits, so a retry can replay it; `application { steps: { encryption_key: } }` names the `SigningKey` setting it is encrypted with, and `file_prices` is the first action that needs it.
  next: Add `steps: { encryption_key: config.step_encryption_key }` to `application { }` in `app.jadpo`, and declare `step_encryption_key: SigningKey` in `config.jadpo` (human)
  rule: step.encryption_key_required
  help: https://jadpo.dev/docs/errors/step.encryption_key_required

check failed: 1 error, 7 files
```
