---
title: "Dry-run an approval"
method: POST
path: "/approval/dry-run"
tags: ["Approval"]
---

# Dry-run an approval

`POST /approval/dry-run`

## Request

- Base URL: `https://api.nullplatform.com`
- URL: `https://api.nullplatform.com/approval/dry-run`
- Auth: HTTP bearer

Resolves the approval action a real request would resolve and previews the result without creating a request. In checklist mode, conditions are evaluated for real while manual and external items report what they would wait for.

## Request body

- object
  - `nrn` string, required: Where the request would be made.
  - `action` string, required: The action the request would perform.
  - `approval_mode` 'auto' | 'checklist' | 'policy': Which branch to evaluate. `auto` picks the checklist when the action has one.
  - `entity_id` integer: The entity the request would act on.
  - `dimensions` object: Dimensions used to match the approval action.
  - `requested` object: The request payload the context is built from.
  - `context` object: Supply a context to evaluate against instead of the one nullplatform would build.

## Response `200`

The operation was successful.

- object
  - `mode` 'checklist' | 'policy': Which branch was evaluated.
  - `approvalAction` object: The approval action the request matched. Every field is emitted twice, in camelCase and in snake_case.
  - `specification_snapshot` object: The specification that was evaluated. Checklist mode only.
  - `preview` object: The predicted run. Checklist mode only.
    - `items` object[]: One entry per item, with its predicted status and whether it would run.
    - `aggregate_prediction` object: Best and worst case outcome given what is already known.
  - `policies` object[]: One entry per requirement, in the shape policy mode returns.
  - `action` 'approve' | 'manual' | 'deny': Whether the request would be approved, sent to a person, or denied.

## Other responses

- `4XX`: The request couldn't be processed. For example, a parameter is invalid, the resource doesn't exist, or you don't have permission. The body is a problem details object (RFC 9457).
- `5XX`: Something went wrong on nullplatform's side. The body is a problem details object (RFC 9457).

## Changes

- **2026-10-15** `728d4df70ca1`: 6 breaking, 15 info
  - the response property `message` became optional for the status `4XX`
  - the response property `message` became optional for the status `5XX`
  - removed the required property `error` from the response with the `4XX` status
  - removed the required property `error` from the response with the `5XX` status
  - …17 more
- **2026-09-10** `48f4b247ee12`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/nullplatform/apis/nullplatform-api/changes/approval/dry-run/post.md)

---

[API](https://skmtc.dev/nullplatform/apis/nullplatform-api.md) - [All operations](https://skmtc.dev/nullplatform/apis/nullplatform-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nullplatform/apis/nullplatform-api/revisions/d3f66bc633d4?raw)
