---
title: "Execute Dry Run"
method: POST
path: "/billing/developer/runs/{billing_run_id}/execute"
tags: ["Billing", "billing"]
---

# Execute Dry Run

`POST /billing/developer/runs/{billing_run_id}/execute`

Execute a dry run for real — converts the run in-place.

Deletes old dry-run items, flips is_dry_run to False, resets counters,
and re-dispatches the Celery task. The same run ID is reused so the
UI updates in-place without clutter.

Developer only.

## Path parameters

- `billing_run_id` string, uuid, required

## Response `200`

Successful Response

- BillingRunResponse
  - `billing_run_id` string, uuid, required
  - `status` string, required
  - `is_dry_run` boolean, required
  - `initiated_by` string, uuid, nullable
  - `total_customers` integer, required
  - `total_items` integer, required
  - `successful_items` integer, required
  - `failed_items` integer, required
  - `skipped_items` integer, required
  - `total_amount_cents` integer, required
  - `total_amount_display` string, required
  - `error_message` string, nullable
  - `celery_task_id` string, nullable
  - `started_at` string, date-time, nullable
  - `completed_at` string, date-time, nullable
  - `created_at` string, date-time, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/openintake/apis/fastapi.md) · [All operations](https://skmtc.dev/openintake/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openintake/fastapi/revisions/4a81645b59f6/schema)
