# Dry runs

Some changes can be rehearsed: every check runs, the write is rehearsed against your current records, and nothing is stored. This guide is which operations allow it, how to ask, and how to read the answer.

## Which operations

184 operations declare a rehearsal — the creates and edits of your records, and the item wizard's create. Each of their reference pages carries a **Dry run** section, and the machine index at [/index.json](/index.json) marks them with `dryRun: true`. An operation without the section cannot be rehearsed: asking answers `VALIDATION/DRY_RUN_UNSUPPORTED`, and nothing pretends.

## How to ask

Add `dryRun: true` to the request envelope beside the version:

```json
{
  "extensions": {
    "at": {
      "version": {
        "name": "genesis",
        "number": 0
      },
      "dryRun": true
    }
  }
}
```

Everything else — the operation, its variables, the token — is exactly the real call.

## How to read the answer

A rehearsal answers what the real call would: the refusal it would give, in the same error grammar, or the record it would create or change, with its would-be fields. Every answer to a rehearsal carries `dryRun: true` in `extensions.at`, so a rehearsed record can never be mistaken for a saved one; nothing it shows exists afterwards.

## What it is for

- Validating a payload you assembled from another system before you commit it.
- Showing a person what a change would do before they confirm it.
- Testing an integration against your real records without leaving anything behind.

A rehearsal is not a sandbox: it reads your live records and counts against your rate limits like any other call ([Rate limits](/guides/rate-limits/)).
